On 09/25/2010 11:36 AM, Jason Wang wrote: > We could give a further test of migration by launch test during migartion. So > the following series implements: > > - A simple class to run a specified test in the background which could be used > to launch other test during migartion. Its design is rather simple and its usage > is a little tricky, but it work well. > - Two sample tests which take advantages of the background class: Test reboot > during guest migration and test file_transfer during guest migration. > > In the future, we could even lauch autotest client test during guest migation. > > --- > > Jason Wang (3): > KVM Test: Introduce a helper class to run a test in the background > KVM test: Test reboot during migration > KVM test: Test the file transfer during migartion > > > client/tests/kvm/kvm_test_utils.py | 44 +++++++++++++++ > .../kvm/tests/migration_with_file_transfer.py | 59 ++++++++++++++++++++ > client/tests/kvm/tests/migration_with_reboot.py | 45 +++++++++++++++ > client/tests/kvm/tests_base.cfg.sample | 12 ++++ > 4 files changed, 159 insertions(+), 1 deletions(-) > create mode 100644 client/tests/kvm/tests/migration_with_file_transfer.py > create mode 100644 client/tests/kvm/tests/migration_with_reboot.py It seems to me that this method is only applicable to tests/functions that don't require a VM object (i.e. that require only a shell session object). kvm_test_utils.reboot() operates on a VM object, and the same VM is destroyed by migrate() which runs in the background, so eventually reboot() tries logging into a destroyed VM, which fails because vm.get_address() fails. Any monitor operation will also fail. If the autotest wrapper requires a VM object (currently it does) then it can't be used either. An alternative (somewhat ugly) way to migrate in the background is to pass a boolean 'migrate' flag to various functions/tests, such as reboot() and run_autotest(). If 'migrate' is True, these functions will do something like vm = kvm_test_utils.migrate(vm, ...) in their waiting loops, where wait_for() is normally used. This guarantees that 'vm' is always a valid VM object. For example: # Log in after reboot while time.time() < end_time: if migrate_in_bg: vm = kvm_test_utils.migrate(vm, ...) session = vm.remote_login() if session: break time.sleep(2) This is much longer than the usual wait_for(...) but it does the job. What do you think? -- 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