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

Martin Kletzander mkletzan at redhat.com
Fri Apr 6 07:51:24 UTC 2012


On 04/05/2012 01: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.)
> -- 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

Sorry for rubbing in this after it's pushed, but why do you need 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()

This is the only line using it and I believe "util" is not used
anywhere. Maybe it's copy-paste error from other tests where these were
leftover even though they are not needed anymore after the cleanup of
"get_uri()".

> +    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




More information about the libvir-list mailing list