Re: [test-API PATCHv2 2/2] repo: Add test for mutualy exclusive console access

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 04/05/2012 07:58 PM, Peter Krempa wrote:
This test case checks if the console connection code works in a safe way
that the connection don't get messed up.
---
Diff to v1:
-- removed semicolons at the end of statements (the C language left some habits :D)
-- added call to usage function (I thought it's called automaticaly. With this this could
                                  be another good function to incorporate in the class and
                                  free the test-writer from re-implementing it again and again)
-- added cleanup function (same comment as above; note: there are some tests that don't have this func.)

         the clean flag was added after some testcases.
         So...  need to update them later.


-- refactored getting of optional parameter "device"
-- added cleanup of stream objects (they'd got cleaned up automaticaly with the disconnect, but
                                     this is safer and enables testing if the stream was in a good state)

  repos/domain/console_mutex.py |  107 +++++++++++++++++++++++++++++++++++++++++
  1 files changed, 107 insertions(+), 0 deletions(-)
  create mode 100644 repos/domain/console_mutex.py

diff --git a/repos/domain/console_mutex.py b/repos/domain/console_mutex.py
new file mode 100644
index 0000000..50730e0
--- /dev/null
+++ b/repos/domain/console_mutex.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python
+""" A test case to test console mutual exclusivity
+    mandatory arguments: guestname
+"""
+import libvirt
+from libvirt import libvirtError
+from exception import TestError
+
+from utils.Python import utils
+
+def usage(params):
+    """Verify parameter dictionary"""
+    logger = params['logger']
+    keys = ['guestname']
+    for key in keys:
+        if key not in params:
+            logger.error("%s is required" %key)
+            return 1
+
+def console_mutex(params):
+    """Attach to console"""
+    usage(params);
+    logger = params['logger']
+    guest = params['guestname']
+    device = params.get('device', 'serial0')
+
+    util = utils.Utils()
+    uri = params['uri']
+
+    try:
+        logger.info("Connecting to hypervisor: '%s'" % uri)
+        conn = libvirt.open(uri)
+        dom = conn.lookupByName(guest)
+
+        if not dom.isActive():
+            raise TestError("Guest '%s' is not active" % guest)
+
+        logger.info("Creating stream object")
+        stream = conn.newStream(0)
+
+        logger.info("Forcibly open console on domain")
+        dom.openConsole(device, stream, libvirt.VIR_DOMAIN_CONSOLE_FORCE)
+
+        logger.info("Creating another stream object")
+        stream2 = conn.newStream(0)
+
+        logger.info("Open safe console connection while an existing one is open")
+        try:
+            dom.openConsole(device, stream2, libvirt.VIR_DOMAIN_CONSOLE_SAFE)
+        except libvirtError, e:
+            if e.get_error_code() == libvirt.VIR_ERR_OPERATION_FAILED:
+                logger.info("Opening failed - OK")
+            else:
+                raise e
+        else:
+            raise TestError("Opening of console succeeded although shoud fail")
+
+        logger.info("Abort the existing stream")
+        stream.abort()
+
+        logger.info("Re-try connecting to the console")
+        dom.openConsole(device, stream2, libvirt.VIR_DOMAIN_CONSOLE_SAFE)
+
+        logger.info("Re-try forcibly on already open console")
+
+        logger.info("Creating stream object")
+        stream = conn.newStream(0)
+
+        dom.openConsole(device, stream, libvirt.VIR_DOMAIN_CONSOLE_FORCE)
+
+        logger.info("Clean up streams")
+        stream.finish()
+
+        try:
+            stream2.finish()
+        except libvirtError, e:
+            if e.get_error_code() == libvirt.VIR_ERR_RPC and \
+               e.get_error_domain() == libvirt.VIR_FROM_STREAMS:
+                logger.info("Stream was aborted successfuly")
+            else:
+                raise e
+        else:
+            raise TestError("stream2 should be aborted after forced console connection")
+
+    except libvirtError, e:
+        logger.error("Libvirt call failed: " + str(e))
+        ret = 1
+
+    except TestError, e:
+        logger.error("Test failed: " + str(e))
+        ret = 1
+
+    else:
+        logger.info("All tests succeeded")
+        ret = 0
+
+    finally:
+        logger.info("Closing hypervisor connection")
+        conn.close()
+
+        logger.info("Done")
+
+    return ret
+
+def console_mutex_clean(params):
+    """clean testing environment"""
+    pass

       Thanks, pushed.

       Guannan Ren

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]