* KVM test: use new functions in cdrom_test
@ 2012-05-30 14:43 Lukáš Doktor
2012-05-30 14:43 ` [PATCH] " Lukáš Doktor
0 siblings, 1 reply; 4+ messages in thread
From: Lukáš Doktor @ 2012-05-30 14:43 UTC (permalink / raw)
To: autotest, kvm, kvm-autotest, lmr, ldoktor, jzupka
This patch modifies cdrom_test to use new framework functions.
Also it makes tray-reporting test optional and checks for tray
reporting support.
I reworked the path problems to suit new framework functions.
Regards,
Lukáš
_______________________________________________
Autotest mailing list
Autotest@test.kernel.org
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] KVM test: use new functions in cdrom_test
2012-05-30 14:43 KVM test: use new functions in cdrom_test Lukáš Doktor
@ 2012-05-30 14:43 ` Lukáš Doktor
2012-05-30 14:51 ` Lukáš Doktor
0 siblings, 1 reply; 4+ messages in thread
From: Lukáš Doktor @ 2012-05-30 14:43 UTC (permalink / raw)
To: autotest, kvm, kvm-autotest, lmr, ldoktor, jzupka
Use get_block and other framework functions in cdrom test. Also
don't fail the whole test when tray-status reporting is not supported
by qemu and other cleanups.
Signed-off-by: Lukáš Doktor <ldoktor@redhat.com>
---
client/tests/kvm/tests/cdrom.py | 118 ++++++++++++++++-----------------------
client/virt/subtests.cfg.sample | 2 +
2 files changed, 50 insertions(+), 70 deletions(-)
diff --git a/client/tests/kvm/tests/cdrom.py b/client/tests/kvm/tests/cdrom.py
index 089150b..4390796 100644
--- a/client/tests/kvm/tests/cdrom.py
+++ b/client/tests/kvm/tests/cdrom.py
@@ -21,7 +21,7 @@ def run_cdrom(test, params, env):
3) * If cdrom_test_autounlock is set, verifies that device is unlocked
<300s after boot
4) Eject cdrom using monitor and change with another iso several times.
- 5) Eject cdrom in guest and check tray status reporting.
+ 5) * If cdrom_test_tray_status = yes, tests tray reporting.
6) Try to format cdrom and check the return string.
7) Mount cdrom device.
8) Copy file from cdrom and compare files using diff.
@@ -35,6 +35,10 @@ def run_cdrom(test, params, env):
eject CDROM directly after insert
@param cfg: cdrom_test_autounlock - Test whether guest OS unlocks cdrom
after boot (<300s after VM is booted)
+ @param cfg: cdrom_test_tray_status - Test tray reporting (eject and insert
+ CD couple of times in guest).
+
+ @warning: Check dmesg for block device failures
"""
def master_cdroms(params):
""" Creates 'new' cdrom with one file on it """
@@ -43,7 +47,7 @@ def run_cdrom(test, params, env):
cdrom_cd1 = params.get("cdrom_cd1")
if not os.path.isabs(cdrom_cd1):
cdrom_cd1 = os.path.join(test.bindir, cdrom_cd1)
- cdrom_dir = os.path.realpath(os.path.dirname(cdrom_cd1))
+ cdrom_dir = os.path.dirname(cdrom_cd1)
utils.run("dd if=/dev/urandom of=orig bs=10M count=1")
utils.run("dd if=/dev/urandom of=new bs=10M count=1")
utils.run("mkisofs -o %s/orig.iso orig" % cdrom_dir)
@@ -55,57 +59,27 @@ def run_cdrom(test, params, env):
error.context("cleaning up temp cdrom images")
os.remove("%s/new.iso" % cdrom_dir)
- def get_block_info(re_device='[^\n][^:]+'):
- """ Gets device string and file from kvm-monitor """
- blocks = vm.monitor.info("block")
- devices = []
- files = []
- if isinstance(blocks, str):
- devices = re.findall('(%s): .*' % re_device, blocks)
- if devices:
- for dev in devices:
- cdfile = re.findall('%s: .*file=(\S*) ' % dev, blocks)
- if cdfile:
- cdfile = os.path.realpath(cdfile[0])
- else:
- cdfile = None
- files.append(cdfile)
- else:
- for block in blocks:
- if re.match(re_device, block['device']):
- devices.append(block['device'])
- try:
- cdfile = block['inserted']['file']
- if cdfile:
- cdfile = os.path.realpath(cdfile)
- except KeyError:
- cdfile = None
- files.append(cdfile)
- return (devices, files)
-
- def get_cdrom_info(device):
+ def get_cdrom_file(device):
"""
@param device: qemu monitor device
@return: file associated with $device device
"""
- (_, cdfile) = get_block_info(device)
- logging.debug("Device name: %s, ISO: %s", device, cdfile[0])
- return cdfile[0]
-
- def check_cdrom_locked(cdrom):
- """ Checks whether the cdrom is locked """
blocks = vm.monitor.info("block")
+ cdfile = None
if isinstance(blocks, str):
- lock_str = "locked=1"
- for block in blocks.splitlines():
- if cdrom in block and lock_str in block:
- return True
+ cdfile = re.findall('%s: .*file=(\S*) ' % device, blocks)
+ if not cdfile:
+ return None
+ else:
+ cdfile = cdfile[0]
else:
for block in blocks:
- if ('inserted' in block.keys() and
- block['inserted']['file'] == cdrom):
- return block['locked']
- return False
+ if block['device'] == device:
+ try:
+ cdfile = block['inserted']['file']
+ except KeyError:
+ continue
+ return cdfile
def check_cdrom_tray(cdrom):
""" Checks whether the tray is opend """
@@ -121,7 +95,7 @@ def run_cdrom(test, params, env):
for block in blocks:
if block['device'] == cdrom and 'tray_open' in block.keys():
return block['tray_open']
- raise error.TestNAError('cdrom tray reporting not supported')
+ return None
def eject_cdrom(device, monitor):
""" Ejects the cdrom using kvm-monitor """
@@ -149,7 +123,6 @@ def run_cdrom(test, params, env):
cdrom_orig = params.get("cdrom_cd1")
if not os.path.isabs(cdrom_orig):
cdrom_orig = os.path.join(test.bindir, cdrom_orig)
- cdrom_orig = os.path.realpath(cdrom_orig)
cdrom = cdrom_orig
output = session.get_command_output("ls /dev/cdrom*")
cdrom_dev_list = re.findall("/dev/cdrom-\w+|/dev/cdrom\d*", output)
@@ -168,19 +141,17 @@ def run_cdrom(test, params, env):
raise error.TestFail("Could not find a valid cdrom device")
error.context("Detecting the existence of a cdrom")
- cdfile = ''
- (_device, _file) = get_block_info()
- for i in range(len(_file)):
- if _file[i] == cdrom:
- cdfile = _file[i]
- device = _device[i]
- if cdfile != cdrom:
- raise error.TestFail("Could not find a valid cdrom device")
+ cdfile = cdrom
+ device = vm.get_block({'file': cdfile})
+ if not device:
+ device = vm.get_block({'backing_file': cdfile})
+ if not device:
+ raise error.TestFail("Could not find a valid cdrom device")
session.get_command_output("umount %s" % cdrom_dev)
if params.get('cdrom_test_autounlock') == 'yes':
error.context("Trying to unlock the cdrom")
- if not virt_utils.wait_for(lambda: not check_cdrom_locked(cdfile),
+ if not virt_utils.wait_for(lambda: not vm.check_block_locked(device),
300):
raise error.TestFail("Device %s could not be unlocked" % device)
@@ -189,7 +160,7 @@ def run_cdrom(test, params, env):
for i in range(1, max_times):
session.cmd('eject %s' % cdrom_dev)
eject_cdrom(device, vm.monitor)
- if get_cdrom_info(device) is not None:
+ if get_cdrom_file(device) is not None:
raise error.TestFail("Device %s was not ejected (%s)" % (cdrom, i))
cdrom = cdrom_new
@@ -197,25 +168,32 @@ def run_cdrom(test, params, env):
if i % 2 == 0:
cdrom = cdrom_orig
change_cdrom(device, cdrom, vm.monitor)
- if get_cdrom_info(device) != cdrom:
+ if get_cdrom_file(device) != cdrom:
raise error.TestFail("It wasn't possible to change cdrom %s (%s)"
% (cdrom, i))
time.sleep(workaround_eject_time)
error.context('Eject the cdrom in guest %s times' % max_times)
- for i in range(1, max_times):
- session.cmd('eject %s' % cdrom_dev)
- if not check_cdrom_tray(device):
- raise error.TestFail("Monitor reports closed tray (%s)" % i)
- session.cmd('dd if=%s of=/dev/null count=1' % cdrom_dev)
- if check_cdrom_tray(device):
- raise error.TestFail("Monitor reports opened tray (%s)" % i)
- time.sleep(workaround_eject_time)
+ if params.get('cdrom_test_tray_status') != 'yes':
+ pass
+ elif check_cdrom_tray(device) is None:
+ logging.error("Tray reporting not supported by qemu!")
+ logging.error("cdrom_test_tray_status skipped...")
+ else:
+ for i in range(1, max_times):
+ session.cmd('eject %s' % cdrom_dev)
+ if not check_cdrom_tray(device):
+ raise error.TestFail("Monitor reports closed tray (%s)" % i)
+ session.cmd('dd if=%s of=/dev/null count=1' % cdrom_dev)
+ if check_cdrom_tray(device):
+ raise error.TestFail("Monitor reports opened tray (%s)" % i)
+ time.sleep(workaround_eject_time)
error.context("Check whether the cdrom is read-only")
try:
output = session.cmd("echo y | mkfs %s" % cdrom_dev)
- raise error.TestFail("Attempt to format cdrom %s succeeded" % cdrom_dev)
+ raise error.TestFail("Attempt to format cdrom %s succeeded" %
+ cdrom_dev)
except aexpect.ShellError:
pass
@@ -248,16 +226,16 @@ def run_cdrom(test, params, env):
error.context("Cleanup")
# Return the cdrom_orig
- cdfile = get_cdrom_info(device)
+ cdfile = get_cdrom_file(device)
if cdfile != cdrom_orig:
time.sleep(workaround_eject_time)
session.cmd('eject %s' % cdrom_dev)
eject_cdrom(device, vm.monitor)
- if get_cdrom_info(device) is not None:
+ if get_cdrom_file(device) is not None:
raise error.TestFail("Device %s was not ejected (%s)" % (cdrom, i))
change_cdrom(device, cdrom_orig, vm.monitor)
- if get_cdrom_info(device) != cdrom_orig:
+ if get_cdrom_file(device) != cdrom_orig:
raise error.TestFail("It wasn't possible to change cdrom %s (%s)"
% (cdrom, i))
diff --git a/client/virt/subtests.cfg.sample b/client/virt/subtests.cfg.sample
index cdb6722..d371f49 100644
--- a/client/virt/subtests.cfg.sample
+++ b/client/virt/subtests.cfg.sample
@@ -1767,6 +1767,8 @@ variants:
max_times = 20
# test whether cdrom is unlocked <300s after boot
cdrom_test_autounlock = no
+ # test the tray status
+ cdrom_test_tray_status = yes
# wait before eject $cdrom (let OS initialize cdrom ...)
workaround_eject_time = 0
--
1.7.7.6
_______________________________________________
Autotest mailing list
Autotest@test.kernel.org
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] KVM test: use new functions in cdrom_test
2012-05-30 14:43 ` [PATCH] " Lukáš Doktor
@ 2012-05-30 14:51 ` Lukáš Doktor
2012-05-30 22:57 ` Lucas Meneghel Rodrigues
0 siblings, 1 reply; 4+ messages in thread
From: Lukáš Doktor @ 2012-05-30 14:51 UTC (permalink / raw)
To: Lukáš Doktor; +Cc: autotest, kvm-autotest, kvm
I forgot add pull request link:
https://github.com/autotest/autotest/pull/368
Dne 30.5.2012 16:43, Lukáš Doktor napsal(a):
> Use get_block and other framework functions in cdrom test. Also
> don't fail the whole test when tray-status reporting is not supported
> by qemu and other cleanups.
>
> Signed-off-by: Lukáš Doktor<ldoktor@redhat.com>
> ---
> client/tests/kvm/tests/cdrom.py | 118 ++++++++++++++++-----------------------
> client/virt/subtests.cfg.sample | 2 +
> 2 files changed, 50 insertions(+), 70 deletions(-)
>
> diff --git a/client/tests/kvm/tests/cdrom.py b/client/tests/kvm/tests/cdrom.py
> index 089150b..4390796 100644
> --- a/client/tests/kvm/tests/cdrom.py
> +++ b/client/tests/kvm/tests/cdrom.py
> @@ -21,7 +21,7 @@ def run_cdrom(test, params, env):
> 3) * If cdrom_test_autounlock is set, verifies that device is unlocked
> <300s after boot
> 4) Eject cdrom using monitor and change with another iso several times.
> - 5) Eject cdrom in guest and check tray status reporting.
> + 5) * If cdrom_test_tray_status = yes, tests tray reporting.
> 6) Try to format cdrom and check the return string.
> 7) Mount cdrom device.
> 8) Copy file from cdrom and compare files using diff.
> @@ -35,6 +35,10 @@ def run_cdrom(test, params, env):
> eject CDROM directly after insert
> @param cfg: cdrom_test_autounlock - Test whether guest OS unlocks cdrom
> after boot (<300s after VM is booted)
> + @param cfg: cdrom_test_tray_status - Test tray reporting (eject and insert
> + CD couple of times in guest).
> +
> + @warning: Check dmesg for block device failures
> """
> def master_cdroms(params):
> """ Creates 'new' cdrom with one file on it """
> @@ -43,7 +47,7 @@ def run_cdrom(test, params, env):
> cdrom_cd1 = params.get("cdrom_cd1")
> if not os.path.isabs(cdrom_cd1):
> cdrom_cd1 = os.path.join(test.bindir, cdrom_cd1)
> - cdrom_dir = os.path.realpath(os.path.dirname(cdrom_cd1))
> + cdrom_dir = os.path.dirname(cdrom_cd1)
> utils.run("dd if=/dev/urandom of=orig bs=10M count=1")
> utils.run("dd if=/dev/urandom of=new bs=10M count=1")
> utils.run("mkisofs -o %s/orig.iso orig" % cdrom_dir)
> @@ -55,57 +59,27 @@ def run_cdrom(test, params, env):
> error.context("cleaning up temp cdrom images")
> os.remove("%s/new.iso" % cdrom_dir)
>
> - def get_block_info(re_device='[^\n][^:]+'):
> - """ Gets device string and file from kvm-monitor """
> - blocks = vm.monitor.info("block")
> - devices = []
> - files = []
> - if isinstance(blocks, str):
> - devices = re.findall('(%s): .*' % re_device, blocks)
> - if devices:
> - for dev in devices:
> - cdfile = re.findall('%s: .*file=(\S*) ' % dev, blocks)
> - if cdfile:
> - cdfile = os.path.realpath(cdfile[0])
> - else:
> - cdfile = None
> - files.append(cdfile)
> - else:
> - for block in blocks:
> - if re.match(re_device, block['device']):
> - devices.append(block['device'])
> - try:
> - cdfile = block['inserted']['file']
> - if cdfile:
> - cdfile = os.path.realpath(cdfile)
> - except KeyError:
> - cdfile = None
> - files.append(cdfile)
> - return (devices, files)
> -
> - def get_cdrom_info(device):
> + def get_cdrom_file(device):
> """
> @param device: qemu monitor device
> @return: file associated with $device device
> """
> - (_, cdfile) = get_block_info(device)
> - logging.debug("Device name: %s, ISO: %s", device, cdfile[0])
> - return cdfile[0]
> -
> - def check_cdrom_locked(cdrom):
> - """ Checks whether the cdrom is locked """
> blocks = vm.monitor.info("block")
> + cdfile = None
> if isinstance(blocks, str):
> - lock_str = "locked=1"
> - for block in blocks.splitlines():
> - if cdrom in block and lock_str in block:
> - return True
> + cdfile = re.findall('%s: .*file=(\S*) ' % device, blocks)
> + if not cdfile:
> + return None
> + else:
> + cdfile = cdfile[0]
> else:
> for block in blocks:
> - if ('inserted' in block.keys() and
> - block['inserted']['file'] == cdrom):
> - return block['locked']
> - return False
> + if block['device'] == device:
> + try:
> + cdfile = block['inserted']['file']
> + except KeyError:
> + continue
> + return cdfile
>
> def check_cdrom_tray(cdrom):
> """ Checks whether the tray is opend """
> @@ -121,7 +95,7 @@ def run_cdrom(test, params, env):
> for block in blocks:
> if block['device'] == cdrom and 'tray_open' in block.keys():
> return block['tray_open']
> - raise error.TestNAError('cdrom tray reporting not supported')
> + return None
>
> def eject_cdrom(device, monitor):
> """ Ejects the cdrom using kvm-monitor """
> @@ -149,7 +123,6 @@ def run_cdrom(test, params, env):
> cdrom_orig = params.get("cdrom_cd1")
> if not os.path.isabs(cdrom_orig):
> cdrom_orig = os.path.join(test.bindir, cdrom_orig)
> - cdrom_orig = os.path.realpath(cdrom_orig)
> cdrom = cdrom_orig
> output = session.get_command_output("ls /dev/cdrom*")
> cdrom_dev_list = re.findall("/dev/cdrom-\w+|/dev/cdrom\d*", output)
> @@ -168,19 +141,17 @@ def run_cdrom(test, params, env):
> raise error.TestFail("Could not find a valid cdrom device")
>
> error.context("Detecting the existence of a cdrom")
> - cdfile = ''
> - (_device, _file) = get_block_info()
> - for i in range(len(_file)):
> - if _file[i] == cdrom:
> - cdfile = _file[i]
> - device = _device[i]
> - if cdfile != cdrom:
> - raise error.TestFail("Could not find a valid cdrom device")
> + cdfile = cdrom
> + device = vm.get_block({'file': cdfile})
> + if not device:
> + device = vm.get_block({'backing_file': cdfile})
> + if not device:
> + raise error.TestFail("Could not find a valid cdrom device")
>
> session.get_command_output("umount %s" % cdrom_dev)
> if params.get('cdrom_test_autounlock') == 'yes':
> error.context("Trying to unlock the cdrom")
> - if not virt_utils.wait_for(lambda: not check_cdrom_locked(cdfile),
> + if not virt_utils.wait_for(lambda: not vm.check_block_locked(device),
> 300):
> raise error.TestFail("Device %s could not be unlocked" % device)
>
> @@ -189,7 +160,7 @@ def run_cdrom(test, params, env):
> for i in range(1, max_times):
> session.cmd('eject %s' % cdrom_dev)
> eject_cdrom(device, vm.monitor)
> - if get_cdrom_info(device) is not None:
> + if get_cdrom_file(device) is not None:
> raise error.TestFail("Device %s was not ejected (%s)" % (cdrom, i))
>
> cdrom = cdrom_new
> @@ -197,25 +168,32 @@ def run_cdrom(test, params, env):
> if i % 2 == 0:
> cdrom = cdrom_orig
> change_cdrom(device, cdrom, vm.monitor)
> - if get_cdrom_info(device) != cdrom:
> + if get_cdrom_file(device) != cdrom:
> raise error.TestFail("It wasn't possible to change cdrom %s (%s)"
> % (cdrom, i))
> time.sleep(workaround_eject_time)
>
> error.context('Eject the cdrom in guest %s times' % max_times)
> - for i in range(1, max_times):
> - session.cmd('eject %s' % cdrom_dev)
> - if not check_cdrom_tray(device):
> - raise error.TestFail("Monitor reports closed tray (%s)" % i)
> - session.cmd('dd if=%s of=/dev/null count=1' % cdrom_dev)
> - if check_cdrom_tray(device):
> - raise error.TestFail("Monitor reports opened tray (%s)" % i)
> - time.sleep(workaround_eject_time)
> + if params.get('cdrom_test_tray_status') != 'yes':
> + pass
> + elif check_cdrom_tray(device) is None:
> + logging.error("Tray reporting not supported by qemu!")
> + logging.error("cdrom_test_tray_status skipped...")
> + else:
> + for i in range(1, max_times):
> + session.cmd('eject %s' % cdrom_dev)
> + if not check_cdrom_tray(device):
> + raise error.TestFail("Monitor reports closed tray (%s)" % i)
> + session.cmd('dd if=%s of=/dev/null count=1' % cdrom_dev)
> + if check_cdrom_tray(device):
> + raise error.TestFail("Monitor reports opened tray (%s)" % i)
> + time.sleep(workaround_eject_time)
>
> error.context("Check whether the cdrom is read-only")
> try:
> output = session.cmd("echo y | mkfs %s" % cdrom_dev)
> - raise error.TestFail("Attempt to format cdrom %s succeeded" % cdrom_dev)
> + raise error.TestFail("Attempt to format cdrom %s succeeded" %
> + cdrom_dev)
> except aexpect.ShellError:
> pass
>
> @@ -248,16 +226,16 @@ def run_cdrom(test, params, env):
>
> error.context("Cleanup")
> # Return the cdrom_orig
> - cdfile = get_cdrom_info(device)
> + cdfile = get_cdrom_file(device)
> if cdfile != cdrom_orig:
> time.sleep(workaround_eject_time)
> session.cmd('eject %s' % cdrom_dev)
> eject_cdrom(device, vm.monitor)
> - if get_cdrom_info(device) is not None:
> + if get_cdrom_file(device) is not None:
> raise error.TestFail("Device %s was not ejected (%s)" % (cdrom, i))
>
> change_cdrom(device, cdrom_orig, vm.monitor)
> - if get_cdrom_info(device) != cdrom_orig:
> + if get_cdrom_file(device) != cdrom_orig:
> raise error.TestFail("It wasn't possible to change cdrom %s (%s)"
> % (cdrom, i))
>
> diff --git a/client/virt/subtests.cfg.sample b/client/virt/subtests.cfg.sample
> index cdb6722..d371f49 100644
> --- a/client/virt/subtests.cfg.sample
> +++ b/client/virt/subtests.cfg.sample
> @@ -1767,6 +1767,8 @@ variants:
> max_times = 20
> # test whether cdrom is unlocked<300s after boot
> cdrom_test_autounlock = no
> + # test the tray status
> + cdrom_test_tray_status = yes
> # wait before eject $cdrom (let OS initialize cdrom ...)
> workaround_eject_time = 0
>
_______________________________________________
Autotest mailing list
Autotest@test.kernel.org
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] KVM test: use new functions in cdrom_test
2012-05-30 14:51 ` Lukáš Doktor
@ 2012-05-30 22:57 ` Lucas Meneghel Rodrigues
0 siblings, 0 replies; 4+ messages in thread
From: Lucas Meneghel Rodrigues @ 2012-05-30 22:57 UTC (permalink / raw)
To: Lukáš Doktor; +Cc: autotest, kvm, kvm-autotest
By the way, looks good, applied to next.
On Wed, May 30, 2012 at 11:51 AM, Lukáš Doktor <ldoktor@redhat.com> wrote:
> I forgot add pull request link:
> https://github.com/autotest/autotest/pull/368
>
> Dne 30.5.2012 16:43, Lukáš Doktor napsal(a):
>> Use get_block and other framework functions in cdrom test. Also
>> don't fail the whole test when tray-status reporting is not supported
>> by qemu and other cleanups.
>>
>> Signed-off-by: Lukáš Doktor<ldoktor@redhat.com>
>> ---
>> client/tests/kvm/tests/cdrom.py | 118 ++++++++++++++++-----------------------
>> client/virt/subtests.cfg.sample | 2 +
>> 2 files changed, 50 insertions(+), 70 deletions(-)
>>
>> diff --git a/client/tests/kvm/tests/cdrom.py b/client/tests/kvm/tests/cdrom.py
>> index 089150b..4390796 100644
>> --- a/client/tests/kvm/tests/cdrom.py
>> +++ b/client/tests/kvm/tests/cdrom.py
>> @@ -21,7 +21,7 @@ def run_cdrom(test, params, env):
>> 3) * If cdrom_test_autounlock is set, verifies that device is unlocked
>> <300s after boot
>> 4) Eject cdrom using monitor and change with another iso several times.
>> - 5) Eject cdrom in guest and check tray status reporting.
>> + 5) * If cdrom_test_tray_status = yes, tests tray reporting.
>> 6) Try to format cdrom and check the return string.
>> 7) Mount cdrom device.
>> 8) Copy file from cdrom and compare files using diff.
>> @@ -35,6 +35,10 @@ def run_cdrom(test, params, env):
>> eject CDROM directly after insert
>> @param cfg: cdrom_test_autounlock - Test whether guest OS unlocks cdrom
>> after boot (<300s after VM is booted)
>> + @param cfg: cdrom_test_tray_status - Test tray reporting (eject and insert
>> + CD couple of times in guest).
>> +
>> + @warning: Check dmesg for block device failures
>> """
>> def master_cdroms(params):
>> """ Creates 'new' cdrom with one file on it """
>> @@ -43,7 +47,7 @@ def run_cdrom(test, params, env):
>> cdrom_cd1 = params.get("cdrom_cd1")
>> if not os.path.isabs(cdrom_cd1):
>> cdrom_cd1 = os.path.join(test.bindir, cdrom_cd1)
>> - cdrom_dir = os.path.realpath(os.path.dirname(cdrom_cd1))
>> + cdrom_dir = os.path.dirname(cdrom_cd1)
>> utils.run("dd if=/dev/urandom of=orig bs=10M count=1")
>> utils.run("dd if=/dev/urandom of=new bs=10M count=1")
>> utils.run("mkisofs -o %s/orig.iso orig" % cdrom_dir)
>> @@ -55,57 +59,27 @@ def run_cdrom(test, params, env):
>> error.context("cleaning up temp cdrom images")
>> os.remove("%s/new.iso" % cdrom_dir)
>>
>> - def get_block_info(re_device='[^\n][^:]+'):
>> - """ Gets device string and file from kvm-monitor """
>> - blocks = vm.monitor.info("block")
>> - devices = []
>> - files = []
>> - if isinstance(blocks, str):
>> - devices = re.findall('(%s): .*' % re_device, blocks)
>> - if devices:
>> - for dev in devices:
>> - cdfile = re.findall('%s: .*file=(\S*) ' % dev, blocks)
>> - if cdfile:
>> - cdfile = os.path.realpath(cdfile[0])
>> - else:
>> - cdfile = None
>> - files.append(cdfile)
>> - else:
>> - for block in blocks:
>> - if re.match(re_device, block['device']):
>> - devices.append(block['device'])
>> - try:
>> - cdfile = block['inserted']['file']
>> - if cdfile:
>> - cdfile = os.path.realpath(cdfile)
>> - except KeyError:
>> - cdfile = None
>> - files.append(cdfile)
>> - return (devices, files)
>> -
>> - def get_cdrom_info(device):
>> + def get_cdrom_file(device):
>> """
>> @param device: qemu monitor device
>> @return: file associated with $device device
>> """
>> - (_, cdfile) = get_block_info(device)
>> - logging.debug("Device name: %s, ISO: %s", device, cdfile[0])
>> - return cdfile[0]
>> -
>> - def check_cdrom_locked(cdrom):
>> - """ Checks whether the cdrom is locked """
>> blocks = vm.monitor.info("block")
>> + cdfile = None
>> if isinstance(blocks, str):
>> - lock_str = "locked=1"
>> - for block in blocks.splitlines():
>> - if cdrom in block and lock_str in block:
>> - return True
>> + cdfile = re.findall('%s: .*file=(\S*) ' % device, blocks)
>> + if not cdfile:
>> + return None
>> + else:
>> + cdfile = cdfile[0]
>> else:
>> for block in blocks:
>> - if ('inserted' in block.keys() and
>> - block['inserted']['file'] == cdrom):
>> - return block['locked']
>> - return False
>> + if block['device'] == device:
>> + try:
>> + cdfile = block['inserted']['file']
>> + except KeyError:
>> + continue
>> + return cdfile
>>
>> def check_cdrom_tray(cdrom):
>> """ Checks whether the tray is opend """
>> @@ -121,7 +95,7 @@ def run_cdrom(test, params, env):
>> for block in blocks:
>> if block['device'] == cdrom and 'tray_open' in block.keys():
>> return block['tray_open']
>> - raise error.TestNAError('cdrom tray reporting not supported')
>> + return None
>>
>> def eject_cdrom(device, monitor):
>> """ Ejects the cdrom using kvm-monitor """
>> @@ -149,7 +123,6 @@ def run_cdrom(test, params, env):
>> cdrom_orig = params.get("cdrom_cd1")
>> if not os.path.isabs(cdrom_orig):
>> cdrom_orig = os.path.join(test.bindir, cdrom_orig)
>> - cdrom_orig = os.path.realpath(cdrom_orig)
>> cdrom = cdrom_orig
>> output = session.get_command_output("ls /dev/cdrom*")
>> cdrom_dev_list = re.findall("/dev/cdrom-\w+|/dev/cdrom\d*", output)
>> @@ -168,19 +141,17 @@ def run_cdrom(test, params, env):
>> raise error.TestFail("Could not find a valid cdrom device")
>>
>> error.context("Detecting the existence of a cdrom")
>> - cdfile = ''
>> - (_device, _file) = get_block_info()
>> - for i in range(len(_file)):
>> - if _file[i] == cdrom:
>> - cdfile = _file[i]
>> - device = _device[i]
>> - if cdfile != cdrom:
>> - raise error.TestFail("Could not find a valid cdrom device")
>> + cdfile = cdrom
>> + device = vm.get_block({'file': cdfile})
>> + if not device:
>> + device = vm.get_block({'backing_file': cdfile})
>> + if not device:
>> + raise error.TestFail("Could not find a valid cdrom device")
>>
>> session.get_command_output("umount %s" % cdrom_dev)
>> if params.get('cdrom_test_autounlock') == 'yes':
>> error.context("Trying to unlock the cdrom")
>> - if not virt_utils.wait_for(lambda: not check_cdrom_locked(cdfile),
>> + if not virt_utils.wait_for(lambda: not vm.check_block_locked(device),
>> 300):
>> raise error.TestFail("Device %s could not be unlocked" % device)
>>
>> @@ -189,7 +160,7 @@ def run_cdrom(test, params, env):
>> for i in range(1, max_times):
>> session.cmd('eject %s' % cdrom_dev)
>> eject_cdrom(device, vm.monitor)
>> - if get_cdrom_info(device) is not None:
>> + if get_cdrom_file(device) is not None:
>> raise error.TestFail("Device %s was not ejected (%s)" % (cdrom, i))
>>
>> cdrom = cdrom_new
>> @@ -197,25 +168,32 @@ def run_cdrom(test, params, env):
>> if i % 2 == 0:
>> cdrom = cdrom_orig
>> change_cdrom(device, cdrom, vm.monitor)
>> - if get_cdrom_info(device) != cdrom:
>> + if get_cdrom_file(device) != cdrom:
>> raise error.TestFail("It wasn't possible to change cdrom %s (%s)"
>> % (cdrom, i))
>> time.sleep(workaround_eject_time)
>>
>> error.context('Eject the cdrom in guest %s times' % max_times)
>> - for i in range(1, max_times):
>> - session.cmd('eject %s' % cdrom_dev)
>> - if not check_cdrom_tray(device):
>> - raise error.TestFail("Monitor reports closed tray (%s)" % i)
>> - session.cmd('dd if=%s of=/dev/null count=1' % cdrom_dev)
>> - if check_cdrom_tray(device):
>> - raise error.TestFail("Monitor reports opened tray (%s)" % i)
>> - time.sleep(workaround_eject_time)
>> + if params.get('cdrom_test_tray_status') != 'yes':
>> + pass
>> + elif check_cdrom_tray(device) is None:
>> + logging.error("Tray reporting not supported by qemu!")
>> + logging.error("cdrom_test_tray_status skipped...")
>> + else:
>> + for i in range(1, max_times):
>> + session.cmd('eject %s' % cdrom_dev)
>> + if not check_cdrom_tray(device):
>> + raise error.TestFail("Monitor reports closed tray (%s)" % i)
>> + session.cmd('dd if=%s of=/dev/null count=1' % cdrom_dev)
>> + if check_cdrom_tray(device):
>> + raise error.TestFail("Monitor reports opened tray (%s)" % i)
>> + time.sleep(workaround_eject_time)
>>
>> error.context("Check whether the cdrom is read-only")
>> try:
>> output = session.cmd("echo y | mkfs %s" % cdrom_dev)
>> - raise error.TestFail("Attempt to format cdrom %s succeeded" % cdrom_dev)
>> + raise error.TestFail("Attempt to format cdrom %s succeeded" %
>> + cdrom_dev)
>> except aexpect.ShellError:
>> pass
>>
>> @@ -248,16 +226,16 @@ def run_cdrom(test, params, env):
>>
>> error.context("Cleanup")
>> # Return the cdrom_orig
>> - cdfile = get_cdrom_info(device)
>> + cdfile = get_cdrom_file(device)
>> if cdfile != cdrom_orig:
>> time.sleep(workaround_eject_time)
>> session.cmd('eject %s' % cdrom_dev)
>> eject_cdrom(device, vm.monitor)
>> - if get_cdrom_info(device) is not None:
>> + if get_cdrom_file(device) is not None:
>> raise error.TestFail("Device %s was not ejected (%s)" % (cdrom, i))
>>
>> change_cdrom(device, cdrom_orig, vm.monitor)
>> - if get_cdrom_info(device) != cdrom_orig:
>> + if get_cdrom_file(device) != cdrom_orig:
>> raise error.TestFail("It wasn't possible to change cdrom %s (%s)"
>> % (cdrom, i))
>>
>> diff --git a/client/virt/subtests.cfg.sample b/client/virt/subtests.cfg.sample
>> index cdb6722..d371f49 100644
>> --- a/client/virt/subtests.cfg.sample
>> +++ b/client/virt/subtests.cfg.sample
>> @@ -1767,6 +1767,8 @@ variants:
>> max_times = 20
>> # test whether cdrom is unlocked<300s after boot
>> cdrom_test_autounlock = no
>> + # test the tray status
>> + cdrom_test_tray_status = yes
>> # wait before eject $cdrom (let OS initialize cdrom ...)
>> workaround_eject_time = 0
>>
>
> _______________________________________________
> Autotest mailing list
> Autotest@test.kernel.org
> http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
--
Lucas
_______________________________________________
Autotest mailing list
Autotest@test.kernel.org
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-05-30 22:57 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-30 14:43 KVM test: use new functions in cdrom_test Lukáš Doktor
2012-05-30 14:43 ` [PATCH] " Lukáš Doktor
2012-05-30 14:51 ` Lukáš Doktor
2012-05-30 22:57 ` Lucas Meneghel Rodrigues
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox