On Wed, Dec 2, 2009 at 9:10 AM, Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx> wrote: > On Wed, 2009-12-02 at 08:59 +0530, sudhir kumar wrote: >> On Wed, Dec 2, 2009 at 7:51 AM, Yolkfull Chow <yzhou@xxxxxxxxxx> wrote: >> > >> > Looks good for me. Thanks Lucas for improving this test. >> > >> > Sudhir, what do you think about this? :) >> Needs couple of hours before I go through the patch. I will post my >> comments by today. Also would like to give a quick run for windows >> guests which are more prone to break :) Thanks Lucas for the effort. > > Thanks guys, > > I've found some bugs on the version I sent to the mailing list, the bugs > were fixed and now the test looks like this - please review this > version! > > import re, string, logging > from autotest_lib.client.common_lib import error > import kvm_test_utils, kvm_utils > > > def run_physical_resources_check(test, params, env): > """ > Check physical resources assigned to KVM virtual machines: > 1) Log into the guest > 2) Verify whether cpu counts ,memory size, nics' model, > count and drives' format & count, drive_serial, UUID > reported by the guest OS matches what has been assigned > to the VM (qemu command line) > 3) Verify all MAC addresses for guest NICs > > @param test: kvm test object > @param params: Dictionary with the test parameters > @param env: Dictionary with test environment. > """ > vm = kvm_test_utils.get_living_vm(env, params.get("main_vm")) > session = kvm_test_utils.wait_for_login(vm) > > logging.info("Starting physical resources check test") > logging.info("Values assigned to VM are the values we expect " > "to see reported by the Operating System") > # Define a failure counter, as we want to check all physical > # resources to know which checks passed and which ones failed > n_fail = 0 > > # Check cpu count > logging.info("CPU count check") > expected_cpu_nr = int(params.get("smp")) > actual_cpu_nr = vm.get_cpu_count() > if expected_cpu_nr != actual_cpu_nr: > n_fail += 1 > logging.error("CPU count mismatch:") > logging.error(" Assigned to VM: %s" % expected_cpu_nr) > logging.error(" Reported by OS: %s" % actual_cpu_nr) > > # Check memory size > logging.info("Memory size check") > expected_mem = int(params.get("mem")) > actual_mem = vm.get_memory_size() > if actual_mem != expected_mem: > n_fail += 1 > logging.error("Memory size mismatch:") > logging.error(" Assigned to VM: %s" % expected_mem) > logging.error(" Reported by OS: %s" % actual_mem) > > # Define a function for checking number of hard drivers & NICs > def check_num(devices, cmd, check_str): > f_fail = 0 > expected_num = kvm_utils.get_sub_dict_names(params, devices).__len__() > s, o = vm.send_monitor_cmd(cmd) > if s != 0: > f_fail += 1 > logging.error("qemu monitor command failed: %s" % cmd) > > actual_num = string.count(o, check_str) > if expected_num != actual_num: > f_fail += 1 > logging.error("%s number mismatch:") > logging.error(" Assigned to VM: %d" % expected_num) > logging.error(" Reported by OS: %d" % actual_num) > return expected_num, f_fail > > logging.info("Hard drive count check") > drives_num, f_fail = check_num("images", "info block", "type=hd") > n_fail += f_fail > > logging.info("NIC count check") > nics_num, f_fail = check_num("nics", "info network", "model=") > n_fail += f_fail > > # Define a function for checking hard drives & NICs' model > def chk_fmt_model(device, fmt_model, cmd, str): > f_fail = 0 > devices = kvm_utils.get_sub_dict_names(params, device) > for chk_device in devices: > expected = kvm_utils.get_sub_dict(params, chk_device).get(fmt_model) > if not expected: > expected = "rtl8139" chk_fmt_model is a generic function. why are we initializing this variable, expected to rtl8139 ? > s, o = vm.send_monitor_cmd(cmd) > if s != 0: > f_fail += 1 > logging.error("qemu monitor command failed: %s" % cmd) > > device_found = re.findall(str, o) > logging.debug("Found devices: %s" % device_found) > found = False > for fm in device_found: > if expected in fm: > found = True > > if not found: > f_fail += 1 > logging.error("%s model mismatch:") > logging.error(" Assigned to VM: %s" % expected) > logging.error(" Reported by OS: %s" % device_found) > return f_fail > > logging.info("NICs model check") > f_fail = chk_fmt_model("nics", "nic_model", "info network", "model=(.*),") > n_fail += f_fail > > logging.info("Drive format check") > f_fail = chk_fmt_model("images", "drive_format", "info block", > "(.*)\: type=hd") > n_fail += f_fail > > logging.info("Network card MAC check") > s, o = vm.send_monitor_cmd("info network") > if s != 0: > n_fail += 1 > logging.error("qemu monitor command failed: info network") > found_mac_addresses = re.findall("macaddr=(.*)", o) > logging.debug("Found MAC adresses: %s" % found_mac_addresses) > > for nic_name in kvm_utils.get_sub_dict_names(params, "nics"): > nic_params = kvm_utils.get_sub_dict(params, nic_name) > mac, ip = kvm_utils.get_mac_ip_pair_from_dict(nic_params) > if not string.lower(mac) in found_mac_addresses: > n_fail += 1 > logging.error("MAC address mismatch:") > logging.error(" Assigned to VM (not found): %s" % mac) > > # Define a function to verify UUID & Serial number > def verify_device(expect, name, verify_cmd): > f_fail = 0 > if verify_cmd: > actual = session.get_command_output(verify_cmd) > if not string.upper(expect) in actual: > f_fail += 1 > logging.error("%s mismatch:") > logging.error(" Assigned to VM: %s" % string.upper(expect)) > logging.error(" Reported by OS: %s" % actual) > return f_fail > > logging.info("UUID check") > if vm.get_uuid(): > f_fail = verify_device(vm.get_uuid(), "UUID", > params.get("catch_uuid_cmd")) > n_fail += f_fail > > logging.info("Hard Disk serial number check") > catch_serial_cmd = params.get("catch_serial_cmd") > f_fail = verify_device(params.get("drive_serial"), "Serial", > catch_serial_cmd) > n_fail += f_fail > > if n_fail != 0: > raise error.TestFail("Physical resources check test reported %s " > "failures. Please verify the test logs." % n_fail) > > session.close() A generic question: In the patch we are verifying some of the resources(image, nic) through qemu monitor. Is it sufficient instead of testing them inside OS(as we do for cpu and memory)? However a particular device may not have been configured inside guest OS but still it will be visible to the guest OS. > > > -- Sudhir Kumar -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html