def balloon_memory(vm, device_path, mem_check): """ Doing memory balloon in a loop and check memory status during balloon. :param vm: VM object. :param device_path: balloon polling path. :param mem_check: need to do memory check if param mem_check is 'yes' """ repeat_times = int(params.get("repeat_times", 5)) logging.info("repeat times: %d" % repeat_times) if params['os_type'] == 'windows': balloon_test = BallooningTestWin(test, params, env) else: balloon_test = BallooningTestLinux(test, params, env) min_sz, max_sz = balloon_test.get_memory_boundary() while repeat_times: for tag in params.objects('test_tags'): error_context.context("Running %s test" % tag, logging.info) params_tag = params.object_params(tag) balloon_type = params_tag['balloon_type'] if balloon_type == 'evict': expect_mem = int( random.uniform(min_sz, balloon_test.get_ballooned_memory())) else: expect_mem = int( random.uniform(balloon_test.get_ballooned_memory(), max_sz)) quit_after_test = balloon_test.run_ballooning_test( expect_mem, tag) time.sleep(20) get_polling_output = vm.monitor.qom_get( device_path, get_balloon_property) time.sleep(20) if mem_check == "yes": memory_check(vm, get_polling_output, 'stat-free-memory') if quit_after_test: return repeat_times -= 1
def balloon_memory(vm, device_path, mem_check): """ Doing memory balloon in a loop and check memory status during balloon. :param vm: VM object. :param device_path: balloon polling path. :param mem_check: need to do memory check if param mem_check is 'yes' """ repeat_times = int(params.get("repeat_times", 5)) logging.info("repeat times: %d" % repeat_times) if params['os_type'] == 'windows': balloon_test = BallooningTestWin(test, params, env) else: balloon_test = BallooningTestLinux(test, params, env) min_sz, max_sz = balloon_test.get_memory_boundary() while repeat_times: for tag in params.objects('test_tags'): error_context.context("Running %s test" % tag, logging.info) params_tag = params.object_params(tag) balloon_type = params_tag['balloon_type'] if balloon_type == 'evict': expect_mem = int(random.uniform(min_sz, balloon_test.get_ballooned_memory())) else: expect_mem = int(random.uniform( balloon_test.get_ballooned_memory(), max_sz)) quit_after_test = balloon_test.run_ballooning_test(expect_mem, tag) time.sleep(20) get_polling_output = vm.monitor.qom_get(device_path, get_balloon_property) time.sleep(20) if mem_check == "yes": memory_check(vm, get_polling_output, 'stat-free-memory') if quit_after_test: return repeat_times -= 1
def run(test, params, env): """ Balloon negative test, balloon windows guest memory to very small value. 1) boot a guest with balloon device. 2) enable and check driver verifier in guest. 3) evict guest memory to 10M. 4) repeat step 3 for many times. 5) check guest free memory. :param test: QEMU test object. :param params: Dictionary with the test parameters. :param env: Dictionary with test environment. """ error_context.context("Boot guest with balloon device", logging.info) vm = env.get_vm(params["main_vm"]) session = vm.wait_for_login() driver_name = params.get("driver_name", "balloon") session = utils_test.qemu.windrv_check_running_verifier(session, vm, test, driver_name) balloon_test = BallooningTestWin(test, params, env) expect_mem = int(params["expect_memory"]) balloon_test.pre_mem = balloon_test.get_ballooned_memory() balloon_test.pre_gmem = balloon_test.get_memory_status() repeat_times = int(params.get("repeat_times", 10)) while repeat_times: try: balloon_test.vm.balloon(expect_mem) except QMPEventError: pass balloon_test._balloon_post_action() time.sleep(30) repeat_times -= 1 ballooned_memory = expect_mem - balloon_test.pre_mem balloon_test.memory_check("after balloon guest memory 10 times", ballooned_memory) session.close()