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

Guannan Ren gren at redhat.com
Wed Apr 4 06:32:54 UTC 2012


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




More information about the libvir-list mailing list