public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* 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