| 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"))
|
|
|