Emulate the powercut under IO workload(dd so far) using kill -9.
Then check image in post command.
This case want to make sure powercut under IO workload will not
break qcow2 image.
Now it only work on linux.

Signed-off-by: Feng Yang <fy...@redhat.com>
---
 client/tests/kvm/tests/ioquit.py       |   39 ++++++++++++++++++++++++++++++++
 client/tests/kvm/tests_base.cfg.sample |   10 +++++++-
 2 files changed, 48 insertions(+), 1 deletions(-)
 create mode 100644 client/tests/kvm/tests/ioquit.py

diff --git a/client/tests/kvm/tests/ioquit.py b/client/tests/kvm/tests/ioquit.py
new file mode 100644
index 0000000..a202297
--- /dev/null
+++ b/client/tests/kvm/tests/ioquit.py
@@ -0,0 +1,39 @@
+import logging, time, random
+from autotest_lib.client.common_lib import error
+import kvm_test_utils
+
+
+def run_ioquit(test, params, env):
+    """
+    Emulate the poweroff under IO workload(dd so far) using kill -9.
+
+    @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,
+                  timeout=int(params.get("login_timeout", 360)))
+    session2 = kvm_test_utils.wait_for_login(vm,
+                  timeout=int(params.get("login_timeout", 360)))
+    try:
+        bg_cmd = params.get("background_cmd")
+        logging.info("Add IO workload for guest OS.")
+        (s, o) = session.get_command_status_output(bg_cmd, timeout=60)
+        check_cmd = params.get("check_cmd")
+        (s, o) = session2.get_command_status_output(check_cmd, timeout=60)
+        if int(o) <= 0:
+            raise error.TestError("Fail to add IO workload for Guest OS")
+
+        logging.info("Sleep for a while")
+        time.sleep(random.randrange(30,100))
+        (s, o) = session2.get_command_status_output(check_cmd, timeout=300)
+        if int(o) <= 0:
+            logging.info("Background command finish before kill VM")
+        logging.info("Kill the virtual machine")
+        vm.process.close()
+    finally:
+        session.close()
+        session2.close()
+
diff --git a/client/tests/kvm/tests_base.cfg.sample 
b/client/tests/kvm/tests_base.cfg.sample
index bb3646c..4387a36 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -389,7 +389,11 @@ variants:
                 rebase_mode = unsafe
                 image_name_snapshot1 = sn1
                 image_name_snapshot2 = sn2
-
+    - ioquit:
+        type = ioquit
+        background_cmd = "for i in 1 2 3 4; do (nohup dd if=/dev/urandom 
of=/tmp/file bs=102400 count=10000000 &) done"
+        check_cmd = ps -a |grep dd |wc -l
+        
     # system_powerdown, system_reset and shutdown *must* be the last ones
     # defined (in this order), since the effect of such tests can leave
     # the VM on a bad state.
@@ -1347,6 +1351,10 @@ variants:
         pre_command += " scripts/hugepage.py /mnt/kvm_hugepage;"
         extra_params += " -mem-path /mnt/kvm_hugepage"
 
+ioquit:
+    post_command_noncritical = no
+    only qcow2
+    only Linux
 
 variants:
     - @no_pci_assignable:
-- 
1.5.5.6

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to