On 05/24/2012 03:46 PM, tangchen wrote: > Signed-off-by: Tang Chen<tangc...@cn.fujitsu.com> > --- > client/virt/libvirt_vm.py | 63 > ++++++++++++++++++++++++++++++++++++++++---- > 1 files changed, 57 insertions(+), 6 deletions(-) > > diff --git a/client/virt/libvirt_vm.py b/client/virt/libvirt_vm.py > index 5d35888..ce594af 100644 > --- a/client/virt/libvirt_vm.py > +++ b/client/virt/libvirt_vm.py > @@ -424,6 +424,7 @@ def virsh_migrate(options, name, dest_uri, extra, uri = > ""): > # Rely on test-code to verify guest state on receiving-end > migrate_cmd = "migrate %s %s %s %s" %\ > (options, name, dest_uri, extra) > + logging.debug("Migration command: %s" % migrate_cmd) > try: > virsh_cmd(migrate_cmd, uri) > except error.CmdError, detail: > @@ -432,6 +433,44 @@ def virsh_migrate(options, name, dest_uri, extra, uri = > ""): > return True > > > +def virsh_migrate_error(options="", vm_ref="", dest_uri="", extra="", > uri=""): > + """ > + Migrate a guest with wrong options. > + This function is for error testing. So it doesn't handle any fault. > + > + @param: options: Free-form string of options to virsh migrate > + @param: vm_ref: How to refer a guest (invalid name, invalid uuid and so > on) > + @param: dest_uri: libvirt uri to send guest to > + @param: extra: Free-form string of options to follow<domain> <desturi> > + @return: True if migration command was successful > + """ > + cmd = "" > + if uri: > + cmd += "virsh -c %s migrate " % uri > + else: > + cmd += "virsh migrate " > + if options: > + cmd += options > + if vm_ref: > + cmd += " --domain %s " % vm_ref > + if dest_uri: > + cmd += " --desturi %s " % dest_uri > + if extra: > + cmd += extra > + logging.debug("Migration command: %s" % cmd) > + > + cmd_result = utils.run(cmd, ignore_status=True) > + logging.info("Output: %s", cmd_result.stdout.strip()) > + logging.error("Error: %s", cmd_result.stderr.strip()) > + logging.info("Status: %d", cmd_result.exit_status) > + > + # Here we should keep the return value type the same as do_migration(). > + if cmd_result.exit_status == 0: > + return True > + else: > + return False > + > + > def _check_interface_type(type): > if not type: > logging.error("Interface type missing.") > @@ -1280,20 +1319,32 @@ class VM(virt_vm.BaseVM): > lockfile.close() > > > - > - def migrate(self, dest_uri, options="--live --timeout 60", extra=""): > + def migrate(self, dest_uri, options="--live --timeout 60", extra="", > + error_test=False, vm_ref=""): > """ > Migrate a VM to a remote host. > > @param: dest_uri: Destination libvirt URI > @param: options: Migration options before<domain> <desturi> > @param: extra: Migration options after<domain> <desturi> > + @param: error_test: If we are doing error test. > + @param: vm_ref: How to refer a guest when doing error test. > @return: True if command succeeded > """ > - logging.info("Migrating VM %s from %s to %s" % > - (self.name, self.connect_uri, dest_uri)) > - result = virsh_migrate(options, self.name, dest_uri, > - extra, self.connect_uri) > + if not error_test: > + if self.connect_uri == dest_uri: > + logging.error("Destination uri and source uri are the same.") > + return False > + logging.info("Migrating VM %s from %s to %s" % > + (self.name, self.connect_uri, dest_uri)) > + result = virsh_migrate(options, self.name, dest_uri, > + extra, self.connect_uri) > + > + else: > + logging.info("Doing migration with wrong options.") > + result = virsh_migrate_error(options, vm_ref, dest_uri, > + extra, self.connect_uri) Is virsh_migrate_error() a necessary function? whether we may use 'try...except' to catch virsh_migrate() exception. > + > # On successful migration, point to guests new hypervisor > if result == True: > self.connect_uri = dest_uri
_______________________________________________ Autotest mailing list Autotest@test.kernel.org http://test.kernel.org/cgi-bin/mailman/listinfo/autotest