Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Unified Diff: client/tests/kvm/tests/enospc.py

Issue 6246035: Merge remote branch 'cros/upstream' into master (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/autotest.git@master
Patch Set: patch Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: client/tests/kvm/tests/enospc.py
diff --git a/client/tests/kvm/tests/enospc.py b/client/tests/kvm/tests/enospc.py
new file mode 100644
index 0000000000000000000000000000000000000000..3c53b64a1e262bd2e7f3bf312480583f9d4418bf
--- /dev/null
+++ b/client/tests/kvm/tests/enospc.py
@@ -0,0 +1,74 @@
+import logging, time, re
+from autotest_lib.client.common_lib import error
+from autotest_lib.client.bin import utils
+import kvm_vm
+
+
+def run_enospc(test, params, env):
+ """
+ ENOSPC test
+
+ 1) Create a virtual disk on lvm
+ 2) Boot up guest with two disks
+ 3) Continually write data to second disk
+ 4) Check images and extend second disk when no space
+ 5) Continue paused guest
+ 6) Repeat step 3~5 several times
+
+ @param test: KVM test object.
+ @param params: Dictionary with the test parameters.
+ @param env: Dictionary with test environment.
+ """
+ vm = env.get_vm(params["main_vm"])
+ vm.verify_alive()
+ login_timeout = int(params.get("login_timeout", 360))
+ session_serial = vm.wait_for_serial_login(timeout=login_timeout)
+
+ vgtest_name = params.get("vgtest_name")
+ lvtest_name = params.get("lvtest_name")
+ logical_volume = "/dev/%s/%s" % (vgtest_name, lvtest_name)
+
+ drive_format = params.get("drive_format")
+ if drive_format == "virtio":
+ devname = "/dev/vdb"
+ elif drive_format == "ide":
+ output = session_serial.cmd_output("dir /dev")
+ devname = "/dev/" + re.findall("([sh]db)\s", output)[0]
+ elif drive_format == "scsi":
+ devname = "/dev/sdb"
+ cmd = params.get("background_cmd")
+ cmd %= devname
+ logging.info("Sending background cmd '%s'", cmd)
+ session_serial.sendline(cmd)
+
+ iterations = int(params.get("repeat_time", 40))
+ i = 0
+ pause_n = 0
+ while i < iterations:
+ status = vm.monitor.cmd("info status")
+ logging.debug(status)
+ if "paused" in status:
+ pause_n += 1
+ logging.info("Checking all images in use by the VM")
+ for image_name in vm.params.objects("images"):
+ image_params = vm.params.object_params(image_name)
+ try:
+ kvm_vm.check_image(image_params, test.bindir)
+ except kvm_vm.VMError, e:
+ logging.error(e)
+ logging.info("Guest paused, extending Logical Volume size")
+ try:
+ utils.run("lvextend -L +200M %s" % logical_volume)
+ except error.CmdError, e:
+ logging.debug(e.result_obj.stdout)
+ vm.monitor.cmd("cont")
+ time.sleep(10)
+ i += 1
+
+ if pause_n == 0:
+ raise error.TestFail("Guest didn't pause during loop")
+ else:
+ logging.info("Guest paused %s times from %s iterations",
+ pause_n, iterations)
+
+ logging.info("Final %s", vm.monitor.cmd("info status"))

Powered by Google App Engine
This is Rietveld 408576698