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

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



On 04/03/2012 09:20 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.
---
  repos/domain/console_mutex.py |   89 +++++++++++++++++++++++++++++++++++++++++
  1 files changed, 89 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..f9df815
--- /dev/null
+++ b/repos/domain/console_mutex.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+""" A test case to test console mutual exclusivity
+    mandatory arguments: guestname
+"""
+import libvirt
+from libvirt import libvirtError
+
+from utils.Python import utils
+from utils.Python.testError import TestError

we could just use logger.error(), then close hypervisor connection, then quit.


+
+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"""
+    logger = params['logger']

           call usage() to check for mandatory options


+    guest = params['guestname']
+    if "device" not in  params:
+        device = "serial0"
+    else:
+        device = params['device']

It's ok here, guest = params.get('device', 'serial0') get better.


+
+    util = utils.Utils()
+    uri = params['uri']
+
+    ret = 1
+
+    try:
+        logger.info("Connecting to hypervisor: " + uri)
+        conn = libvirt.open(uri)
+        dom = conn.lookupByName(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");

the semicolon is optional. and same for the following appearance.

+        failed = False
+        try:
+            dom.openConsole(device, stream2, libvirt.VIR_DOMAIN_CONSOLE_SAFE);
+        except libvirtError, e:
+            logger.info("Opening failed - OK")
+            failed = True
+
+        if not failed:
+            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);
+
+    except libvirtError, e:
+        logger.error("Libvirt call failed")
+        raise e;
+
+    except TestError, e:
+        logger.error("Test failed: " + str(e));
+
+    else:
+        logger.info("All tests succeeded")
+        ret = 0
+
+    finally:
+        logger.info("Closing hypervisor connection")
+        conn.close()

I really not sure about the stream, if we need to call stream.abort() in finally to
           close the certain FD at server part.


+
+        logger.info("Done")
+
+    return ret

       The clean function is necessary for testcases.
So we need to add another function named 'console_mutex_clean' to cleanup the testing environment messed by the testcase. The params is same as main function.
       If nothing need to clean, just write like this.

def console_mutex_clean(params):
    """clean testing environment"""
     pass


       Guannan Ren


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