public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] KVM test: Add the ability to test migration during guest installation
@ 2011-01-11  5:22 Lucas Meneghel Rodrigues
  2011-01-11  5:22 ` [PATCH 2/2] KVM test: Run client tests of autotest in parallel with migration Lucas Meneghel Rodrigues
  0 siblings, 1 reply; 3+ messages in thread
From: Lucas Meneghel Rodrigues @ 2011-01-11  5:22 UTC (permalink / raw)
  To: autotest; +Cc: kvm

From: Jason Wang <jasowang@redhat.com>

It's helpful to test the installation during migration. So patch just reuse the
unattended installation tests and migrate the vm during the wait loop. The
params of "-initrd", "-kernel" and "-append" were also dropped as they may
break the migration.

Changes from v1:
- Use the new super cool vm.migrate() method

Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 client/tests/kvm/tests/unattended_install.py |   22 ++++++++++++++++++++--
 client/tests/kvm/tests_base.cfg.sample       |    3 +++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/client/tests/kvm/tests/unattended_install.py b/client/tests/kvm/tests/unattended_install.py
index 9617603..fdb020a 100644
--- a/client/tests/kvm/tests/unattended_install.py
+++ b/client/tests/kvm/tests/unattended_install.py
@@ -1,4 +1,4 @@
-import logging, time, socket
+import logging, time, socket, re
 from autotest_lib.client.common_lib import error
 import kvm_utils, kvm_test_utils
 
@@ -24,6 +24,11 @@ def run_unattended_install(test, params, env):
         post_install_delay = 0
 
     install_timeout = float(params.get("timeout", 3000))
+    migrate_background = params.get("migrate_background") == "yes"
+    if migrate_background:
+        mig_timeout = float(params.get("mig_timeout", "3600"))
+        mig_protocol = params.get("migration_protocol", "tcp")
+
     logging.info("Starting unattended install watch process. "
                  "Timeout set to %ds (%d min)", install_timeout,
                  install_timeout/60)
@@ -46,7 +51,20 @@ def run_unattended_install(test, params, env):
                     break
             except socket.error:
                 pass
-        time.sleep(1)
+
+        if migrate_background:
+            # Drop the params which may break the migration
+            # Better method is to used dnsmasq to do the unattended installation
+            if vm.params.get("initrd"):
+                vm.params["initrd"] = None
+            if vm.params.get("kernel"):
+                vm.params["kernel"] = None
+            if vm.params.get("extra_params"):
+                vm.params["extra_params"] = re.sub("--append '.*'", "",
+                                                   vm.params["extra_params"])
+            vm.migrate(timeout=mig_timeout, protocol=mig_protocol)
+        else:
+            time.sleep(1)
         client.close()
         end_time = time.time()
         time_elapsed = int(end_time - start_time)
diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
index 6374923..047b0f3 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -103,6 +103,9 @@ variants:
         kernel = vmlinuz
         initrd = initrd.img
         nic_mode = tap
+        # uncomment the following line to test the migration in parallel
+        # migrate_with_background = yes
+
         variants:
             # Install guest from cdrom 
             - cdrom:
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] KVM test: Run client tests of autotest in parallel with migration
  2011-01-11  5:22 [PATCH 1/2] KVM test: Add the ability to test migration during guest installation Lucas Meneghel Rodrigues
@ 2011-01-11  5:22 ` Lucas Meneghel Rodrigues
  2011-01-11 10:39   ` Michael Goldish
  0 siblings, 1 reply; 3+ messages in thread
From: Lucas Meneghel Rodrigues @ 2011-01-11  5:22 UTC (permalink / raw)
  To: autotest; +Cc: kvm

From: Jason Wang <jasowang@redhat.com>

Run some workload in the background and do the migration would be helpful to
verfiy the correctness, so this patch use the Thread class to wait for the
completion of autotest cmd -- "bin/autotest control" and do the migration in
parallel.

Changes from v1:
- Use the new super cool vm.migrate() method

Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 client/tests/kvm/kvm_test_utils.py     |   33 +++++++++++++++++++++++++++++--
 client/tests/kvm/tests/autotest.py     |    5 +++-
 client/tests/kvm/tests_base.cfg.sample |   11 ++++++++++
 3 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/client/tests/kvm/kvm_test_utils.py b/client/tests/kvm/kvm_test_utils.py
index c1bff29..c9a9b42 100644
--- a/client/tests/kvm/kvm_test_utils.py
+++ b/client/tests/kvm/kvm_test_utils.py
@@ -429,7 +429,7 @@ def get_memory_info(lvms):
     return meminfo
 
 
-def run_autotest(vm, session, control_path, timeout, outputdir):
+def run_autotest(vm, session, control_path, timeout, outputdir, params):
     """
     Run an autotest control file inside a guest (linux only utility).
 
@@ -439,6 +439,9 @@ def run_autotest(vm, session, control_path, timeout, outputdir):
     @param timeout: Timeout under which the autotest control file must complete.
     @param outputdir: Path on host where we should copy the guest autotest
             results to.
+
+    The following params is used by the migration
+    @param params: Test params used in the migration test
     """
     def copy_if_hash_differs(vm, local_path, remote_path):
         """
@@ -515,6 +518,11 @@ def run_autotest(vm, session, control_path, timeout, outputdir):
         raise error.TestError("Invalid path to autotest control file: %s" %
                               control_path)
 
+    migrate_background = params.get("migrate_background") == "yes"
+    if migrate_background:
+        mig_timeout = float(params.get("mig_timeout", "3600"))
+        mig_protocol = params.get("migration_protocol", "tcp")
+
     compressed_autotest_path = "/tmp/autotest.tar.bz2"
 
     # To avoid problems, let's make the test use the current AUTODIR
@@ -551,12 +559,31 @@ def run_autotest(vm, session, control_path, timeout, outputdir):
     except kvm_subprocess.ShellError:
         pass
     try:
+        bg = None
         try:
             logging.info("---------------- Test output ----------------")
-            session.cmd_output("bin/autotest control", timeout=timeout,
-                               print_func=logging.info)
+            if migrate_background:
+                mig_timeout = float(params.get("mig_timeout", "3600"))
+                mig_protocol = params.get("migration_protocol", "tcp")
+
+                bg = kvm_utils.Thread(session.cmd_output,
+                                      kwargs={'cmd': "bin/autotest control",
+                                              'timeout': timeout,
+                                              'print_func': logging.info})
+
+                bg.start()
+
+                while bg.is_alive():
+                    logging.info("Tests is not ended, start a round of"
+                                 "migration ...")
+                    vm.migrate(timeout=mig_timeout, protocol=mig_protocol)
+            else:
+                session.cmd_output("bin/autotest control", timeout=timeout,
+                                   print_func=logging.info)
         finally:
             logging.info("------------- End of test output ------------")
+            if migrate_background and bg:
+                bg.join()
     except kvm_subprocess.ShellTimeoutError:
         if vm.is_alive():
             get_results()
diff --git a/client/tests/kvm/tests/autotest.py b/client/tests/kvm/tests/autotest.py
index 0b97b03..37e1b00 100644
--- a/client/tests/kvm/tests/autotest.py
+++ b/client/tests/kvm/tests/autotest.py
@@ -19,8 +19,11 @@ def run_autotest(test, params, env):
 
     # Collect test parameters
     timeout = int(params.get("test_timeout", 300))
+    migrate = params.get("migrate" , "no") == "yes"
     control_path = os.path.join(test.bindir, "autotest_control",
                                 params.get("test_control_file"))
     outputdir = test.outputdir
 
-    kvm_test_utils.run_autotest(vm, session, control_path, timeout, outputdir)
+    kvm_test_utils.run_autotest(vm, session, control_path, timeout, outputdir,
+                                params)
+
diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
index 047b0f3..c5d9ca3 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -170,6 +170,17 @@ variants:
             - with_file_transfer:
                 iterations = 1
                 type = migration_with_file_transfer
+            - with_autotest:
+                type = autotest
+                migrate_background = yes
+                test_timeout = 1800
+                variants:
+                    - dbench:
+                        test_control_file = dbench.control
+                    - stress:
+                        test_control_file = stress.control
+                    - monotonic_time:
+                        test_control_file = monotonic_time.control
 
     - migrate_multi_host:      install setup unattended_install.cdrom
         type = migration_multi_host
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 2/2] KVM test: Run client tests of autotest in parallel with migration
  2011-01-11  5:22 ` [PATCH 2/2] KVM test: Run client tests of autotest in parallel with migration Lucas Meneghel Rodrigues
@ 2011-01-11 10:39   ` Michael Goldish
  0 siblings, 0 replies; 3+ messages in thread
From: Michael Goldish @ 2011-01-11 10:39 UTC (permalink / raw)
  To: Lucas Meneghel Rodrigues; +Cc: autotest, kvm, Jason Wang

On 01/11/2011 07:22 AM, Lucas Meneghel Rodrigues wrote:
> From: Jason Wang <jasowang@redhat.com>
> 
> Run some workload in the background and do the migration would be helpful to
> verfiy the correctness, so this patch use the Thread class to wait for the
> completion of autotest cmd -- "bin/autotest control" and do the migration in
> parallel.
> 
> Changes from v1:
> - Use the new super cool vm.migrate() method
> 
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
>  client/tests/kvm/kvm_test_utils.py     |   33 +++++++++++++++++++++++++++++--
>  client/tests/kvm/tests/autotest.py     |    5 +++-
>  client/tests/kvm/tests_base.cfg.sample |   11 ++++++++++
>  3 files changed, 45 insertions(+), 4 deletions(-)
> 
> diff --git a/client/tests/kvm/kvm_test_utils.py b/client/tests/kvm/kvm_test_utils.py
> index c1bff29..c9a9b42 100644
> --- a/client/tests/kvm/kvm_test_utils.py
> +++ b/client/tests/kvm/kvm_test_utils.py
> @@ -429,7 +429,7 @@ def get_memory_info(lvms):
>      return meminfo
>  
>  
> -def run_autotest(vm, session, control_path, timeout, outputdir):
> +def run_autotest(vm, session, control_path, timeout, outputdir, params):
>      """
>      Run an autotest control file inside a guest (linux only utility).
>  
> @@ -439,6 +439,9 @@ def run_autotest(vm, session, control_path, timeout, outputdir):
>      @param timeout: Timeout under which the autotest control file must complete.
>      @param outputdir: Path on host where we should copy the guest autotest
>              results to.
> +
> +    The following params is used by the migration
> +    @param params: Test params used in the migration test
>      """
>      def copy_if_hash_differs(vm, local_path, remote_path):
>          """
> @@ -515,6 +518,11 @@ def run_autotest(vm, session, control_path, timeout, outputdir):
>          raise error.TestError("Invalid path to autotest control file: %s" %
>                                control_path)
>  
> +    migrate_background = params.get("migrate_background") == "yes"
> +    if migrate_background:
> +        mig_timeout = float(params.get("mig_timeout", "3600"))
> +        mig_protocol = params.get("migration_protocol", "tcp")

Don't you think it's a cleaner to extract these parameters from params
outside this function (in the autotest wrapper test) and pass them to
this function instead of the params dict?  We only need mig_protocol and
mig_timeout.  Migration will take place if mig_protocol is a nonempty
string.

Alternatively, we can move the contents of this function back to the
test itself, because there's only 1 test using this function, and then
we can look at params directly like all tests do.

>      compressed_autotest_path = "/tmp/autotest.tar.bz2"
>  
>      # To avoid problems, let's make the test use the current AUTODIR
> @@ -551,12 +559,31 @@ def run_autotest(vm, session, control_path, timeout, outputdir):
>      except kvm_subprocess.ShellError:
>          pass
>      try:
> +        bg = None
>          try:
>              logging.info("---------------- Test output ----------------")
> -            session.cmd_output("bin/autotest control", timeout=timeout,
> -                               print_func=logging.info)
> +            if migrate_background:
> +                mig_timeout = float(params.get("mig_timeout", "3600"))
> +                mig_protocol = params.get("migration_protocol", "tcp")
> +
> +                bg = kvm_utils.Thread(session.cmd_output,
> +                                      kwargs={'cmd': "bin/autotest control",
> +                                              'timeout': timeout,
> +                                              'print_func': logging.info})
> +
> +                bg.start()
> +
> +                while bg.is_alive():
> +                    logging.info("Tests is not ended, start a round of"
> +                                 "migration ...")
> +                    vm.migrate(timeout=mig_timeout, protocol=mig_protocol)
> +            else:
> +                session.cmd_output("bin/autotest control", timeout=timeout,
> +                                   print_func=logging.info)
>          finally:
>              logging.info("------------- End of test output ------------")
> +            if migrate_background and bg:
> +                bg.join()
>      except kvm_subprocess.ShellTimeoutError:
>          if vm.is_alive():
>              get_results()
> diff --git a/client/tests/kvm/tests/autotest.py b/client/tests/kvm/tests/autotest.py
> index 0b97b03..37e1b00 100644
> --- a/client/tests/kvm/tests/autotest.py
> +++ b/client/tests/kvm/tests/autotest.py
> @@ -19,8 +19,11 @@ def run_autotest(test, params, env):
>  
>      # Collect test parameters
>      timeout = int(params.get("test_timeout", 300))
> +    migrate = params.get("migrate" , "no") == "yes"
>      control_path = os.path.join(test.bindir, "autotest_control",
>                                  params.get("test_control_file"))
>      outputdir = test.outputdir
>  
> -    kvm_test_utils.run_autotest(vm, session, control_path, timeout, outputdir)
> +    kvm_test_utils.run_autotest(vm, session, control_path, timeout, outputdir,
> +                                params)
> +
> diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
> index 047b0f3..c5d9ca3 100644
> --- a/client/tests/kvm/tests_base.cfg.sample
> +++ b/client/tests/kvm/tests_base.cfg.sample
> @@ -170,6 +170,17 @@ variants:
>              - with_file_transfer:
>                  iterations = 1
>                  type = migration_with_file_transfer
> +            - with_autotest:
> +                type = autotest
> +                migrate_background = yes
> +                test_timeout = 1800
> +                variants:
> +                    - dbench:
> +                        test_control_file = dbench.control
> +                    - stress:
> +                        test_control_file = stress.control
> +                    - monotonic_time:
> +                        test_control_file = monotonic_time.control
>  
>      - migrate_multi_host:      install setup unattended_install.cdrom
>          type = migration_multi_host


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-01-11 10:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-11  5:22 [PATCH 1/2] KVM test: Add the ability to test migration during guest installation Lucas Meneghel Rodrigues
2011-01-11  5:22 ` [PATCH 2/2] KVM test: Run client tests of autotest in parallel with migration Lucas Meneghel Rodrigues
2011-01-11 10:39   ` Michael Goldish

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox