+ Both libvirt and KVM had nearly identical needs_restart implimentations. This patch allows them to inherit common checks while allowing specialty checks via subclass overrides.
+ Fix networking bug in needs_restart() for virt-kvm and virt-libvirt. Before each test, preprocess_vm() checks any VM instances stored in env file against requested parameters, using vm.needs_restart(). However, as implemented, only parameters encoded on the qemu or virt-install command-line are tested. This patch adds a check to also compare networking parameters. N.B. It does NOT verify non-networking related hot-added devices. Signed-off-by: Chris Evich <[email protected]> --- client/tests/virt/virttest/kvm_vm.py | 18 +++--------------- client/tests/virt/virttest/libvirt_vm.py | 30 ++++++++---------------------- client/tests/virt/virttest/virt_vm.py | 27 +++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 37 deletions(-) diff --git a/client/tests/virt/virttest/kvm_vm.py b/client/tests/virt/virttest/kvm_vm.py index 078ef0f..247f0eb 100644 --- a/client/tests/virt/virttest/kvm_vm.py +++ b/client/tests/virt/virttest/kvm_vm.py @@ -157,7 +157,7 @@ class VM(virt_vm.BaseVM): return VM(name, params, root_dir, address_cache, state) - def __make_qemu_command(self, name=None, params=None, root_dir=None): + def make_create_command(self, name=None, params=None, root_dir=None): """ Generate a qemu command line. All parameters are optional. If a parameter is not supplied, the corresponding value stored in the @@ -1490,7 +1490,7 @@ class VM(virt_vm.BaseVM): # Generate basic parameter values for all NICs and create TAP fd for nic in self.virtnet: # fill in key values, validate nettype - # note: __make_qemu_command() calls vm.add_nic (i.e. on a copy) + # note: make_create_command() calls vm.add_nic (i.e. on a copy) nic = self.add_nic(**dict(nic)) # implied add_netdev if mac_source: # Will raise exception if source doesn't @@ -1580,7 +1580,7 @@ class VM(virt_vm.BaseVM): raise virt_vm.VMPAError(pa_type) # Make qemu command - qemu_command = self.__make_qemu_command() + qemu_command = self.make_create_command() # Add migration parameters if required if migration_mode == "tcp": @@ -2624,18 +2624,6 @@ class VM(virt_vm.BaseVM): migration_exec_cmd="cat "+path, mac_source=self) self.verify_status('running') # Throws exception if not - def needs_restart(self, name, params, basedir): - """ - Verifies whether the current qemu commandline matches the requested - one, based on the test parameters. - """ - if (self.__make_qemu_command() != - self.__make_qemu_command(name, params, basedir)): - logging.debug("VM params in env don't match requested, restarting.") - return True - else: - logging.debug("VM params in env do match requested, continuing.") - return False def pause(self): """ diff --git a/client/tests/virt/virttest/libvirt_vm.py b/client/tests/virt/virttest/libvirt_vm.py index 2ec7cf0..4e03835 100644 --- a/client/tests/virt/virttest/libvirt_vm.py +++ b/client/tests/virt/virttest/libvirt_vm.py @@ -104,7 +104,7 @@ class VM(virt_vm.BaseVM): @param name: The name of the object @param params: A dict containing VM params - (see method __make_libvirt_command for a full description) + (see method make_create_command for a full description) @param root_dir: Base directory for relative filenames @param address_cache: A dict that maps MAC addresses to IP addresses @param state: If provided, use this as self.__dict__ @@ -250,7 +250,7 @@ class VM(virt_vm.BaseVM): @param root_dir: Optional new base directory for relative filenames @param address_cache: A dict that maps MAC addresses to IP addresses @param copy_state: If True, copy the original VM's state to the clone. - Mainly useful for __make_libvirt_command(). + Mainly useful for make_create_command(). """ if name is None: name = self.name @@ -267,7 +267,7 @@ class VM(virt_vm.BaseVM): return VM(name, params, root_dir, address_cache, state) - def __make_libvirt_command(self, name=None, params=None, root_dir=None): + def make_create_command(self, name=None, params=None, root_dir=None): """ Generate a libvirt command line. All parameters are optional. If a parameter is not supplied, the corresponding value stored in the @@ -498,7 +498,7 @@ class VM(virt_vm.BaseVM): result += ',mac=%s' % mac elif mac: # possible to specify --mac w/o --network result += " --mac=%s" % mac - logging.debug("vm.__make_libvirt_command.add_nic returning: %s" + logging.debug("vm.make_create_command.add_nic returning: %s" % result) return result @@ -723,9 +723,9 @@ class VM(virt_vm.BaseVM): # setup networking parameters for nic in vm.virtnet: - # __make_libvirt_command can be called w/o vm.create() + # make_create_command can be called w/o vm.create() nic = vm.add_nic(**dict(nic)) - logging.debug("__make_libvirt_command() setting up command for" + logging.debug("make_create_command() setting up command for" " nic: %s" % str(nic)) virt_install_cmd += add_nic(help,nic) @@ -881,13 +881,13 @@ class VM(virt_vm.BaseVM): logging.debug("Copying mac for nic %s from VM %s" % (nic.nic_name, mac_source.nam)) nic_params['mac'] = mac_source.get_mac_address(nic.nic_name) - # __make_libvirt_command() calls vm.add_nic (i.e. on a copy) + # make_create_command() calls vm.add_nic (i.e. on a copy) nic = self.add_nic(**nic_params) logging.debug('VM.create activating nic %s' % nic) self.activate_nic(nic.nic_name) # Make qemu command - install_command = self.__make_libvirt_command() + install_command = self.make_create_command() logging.info("Running libvirt command (reformatted):") for item in install_command.replace(" -", " \n -").splitlines(): @@ -1184,20 +1184,6 @@ class VM(virt_vm.BaseVM): return self.wait_for_login(nic_index, timeout=timeout) - def needs_restart(self, name, params, basedir): - """ - Verifies whether the current virt_install commandline matches the - requested one, based on the test parameters. - """ - if (self.__make_libvirt_command() != - self.__make_libvirt_command(name, params, basedir)): - logging.debug("VM params in env don't match requested, restarting.") - return True - else: - logging.debug("VM params in env do match requested, continuing.") - return False - - def screendump(self, filename, debug=False): if debug: logging.debug("Requesting screenshot %s" % filename) diff --git a/client/tests/virt/virttest/virt_vm.py b/client/tests/virt/virttest/virt_vm.py index aca2838..f87c766 100644 --- a/client/tests/virt/virttest/virt_vm.py +++ b/client/tests/virt/virttest/virt_vm.py @@ -432,6 +432,33 @@ class BaseVM(object): # # Public API - could be reimplemented with virt specific code # + + + def needs_restart(self, name, params, basedir): + """ + Verifies whether the current virt_install commandline matches the + requested one, based on the test parameters. + """ + if (self.make_create_command() != + self.make_create_command(name, params, basedir)): + logging.debug("VM params in env don't match requested, restarting.") + return True + else: + # Command-line encoded state doesn't include all params + # TODO: Check more than just networking + other_virtnet = utils_misc.VirtNet(params, name, self.instance) + if self.virtnet != other_virtnet + logging.debug("VM params in env match, but network differs, " + "restarting") + logging.debug("\t" + str(self.virtnet)) + logging.debug("\t!=") + logging.debug("\t" + str(other_virtnet) + return True + else: + logging.debug("VM params in env do match requested, continuing.") + return False + + def verify_alive(self): """ Make sure the VM is alive and that the main monitor is responsive. -- 1.7.1 _______________________________________________ Autotest-kernel mailing list [email protected] https://www.redhat.com/mailman/listinfo/autotest-kernel
