[libvirt] [libvirt-test-API][PATCH 1/2] Add guest setTime and getTime testing
hujianwei
jiahu at redhat.com
Wed Mar 11 10:05:34 UTC 2015
On 10/03/15 17:29, Jincheng Miao wrote:
> Signed-off-by: Jincheng Miao <jmiao at redhat.com>
> ---
> repos/domain/guest_time.py | 98 ++++++++++++++++++++++++++++++++
> repos/domain/set_guest_time.py | 122 ++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 220 insertions(+), 0 deletions(-)
> create mode 100644 repos/domain/guest_time.py
> create mode 100644 repos/domain/set_guest_time.py
>
> diff --git a/repos/domain/guest_time.py b/repos/domain/guest_time.py
> new file mode 100644
> index 0000000..4111e99
> --- /dev/null
> +++ b/repos/domain/guest_time.py
> @@ -0,0 +1,98 @@
> +#!/usr/bin/evn python
> +# To test guest time
> +
> +import time
> +import libxml2
> +
> +import libvirt
> +from libvirt import libvirtError
> +
> +from src import sharedmod
> +from utils import utils
> +
> +required_params = ('guestname', 'username', 'userpassword')
> +optional_params = {}
> +
> +GET_TIME = 'date +%s'
> +DELTA = 3
> +
> +def get_guest_mac(dom):
> + """ get guest's MAC address by parsing XML
> + """
> + doc = libxml2.parseDoc(dom.XMLDesc())
> + cont=doc.xpathNewContext()
> + macs = cont.xpathEval("/domain/devices/interface/mac/@address")
> + if macs == None:
> + return None
> + mac = macs[0].content
> + return mac
> +
> +def check_guest_status(domobj):
> + """ check guest current status
> + """
> + state = domobj.info()[0]
> + if state == libvirt.VIR_DOMAIN_SHUTOFF or \
> + state == libvirt.VIR_DOMAIN_SHUTDOWN:
> + return False
> + else:
> + return True
> +
> +def check_guest_time(t1, t2):
> + """ check result, the acceptable error within delta
> + """
> + diff = abs(t1 - t2)
> + if diff > DELTA:
> + return False
> + else:
> + return True
> +
> +def guest_time(params):
> + """ test guest time
> + """
> + logger = params['logger']
> + guestname = params['guestname']
> + username = params['username']
> + userpassword = params['userpassword']
> +
> + conn = sharedmod.libvirtobj['conn']
> +
> + domobj = conn.lookupByName(guestname)
> +
> + # Check domain status
> + if check_guest_status(domobj):
> + pass
> + else:
> + domobj.create()
> + time.sleep(90)
> +
> + # get guest MAC
> + mac = get_guest_mac(domobj)
> + if mac == None:
> + logger.error("Failed to get guest's MAC address")
> + return 1
> + else:
> + logger.info("guest's MAC is %s" % mac)
> +
> + ipaddr = utils.mac_to_ip(mac, 180)
> + if mac == None:
> + logger.error("Failed to get guest's IP address")
> + return 1
> + else:
> + logger.info("guest's IP is %s" % ipaddr)
> +
> + try:
> + t1 = utils.remote_exec(ipaddr, username, userpassword, GET_TIME)
> +
> + t2 = domobj.getTime()['seconds']
> + except libvirtError, e:
> + logger.error("API error message: %s, error code is %s" \
> + % (e.message, e.get_error_code()))
> + return 1
> +
> + if check_guest_time(long(t1), t2):
> + logger.info("checking guest time: %s" % t2)
> + else:
> + logger.error("checking guest time: failed")
> + return 1
> +
> + return 0
> \ No newline at end of file
> diff --git a/repos/domain/set_guest_time.py b/repos/domain/set_guest_time.py
> new file mode 100644
> index 0000000..2aee8a4
> --- /dev/null
> +++ b/repos/domain/set_guest_time.py
> @@ -0,0 +1,122 @@
> +#!/usr/bin/evn python
> +# To test setting guest time
> +
> +import time
> +import libxml2
> +
> +import libvirt
> +from libvirt import libvirtError
> +
> +from src import sharedmod
> +from utils import utils
> +
> +required_params = ('guestname', 'username', 'userpassword')
> +optional_params = {'flags' : 0}
> +
> +GET_TIME = 'date +%s'
> +DELTA = 30
> +
> +def parse_flags(flags):
> + """ parse flags
> + """
> + if flags == 'sync':
> + return 1
> + elif flags == 0:
> + return 0
> + else:
> + return -1
> +
> +def get_guest_mac(dom):
> + """ get guest's MAC address by parsing XML
> + """
> + doc = libxml2.parseDoc(dom.XMLDesc())
> + cont=doc.xpathNewContext()
> + macs = cont.xpathEval("/domain/devices/interface/mac/@address")
> + if macs == None:
> + return None
> + mac = macs[0].content
> + return mac
> +
> +def check_guest_status(domobj):
> + """ check guest current status
> + """
> + state = domobj.info()[0]
> + if state == libvirt.VIR_DOMAIN_SHUTOFF or \
> + state == libvirt.VIR_DOMAIN_SHUTDOWN:
> + return False
> + else:
> + return True
> +
> +def check_guest_time(t1, t2):
> + """ check result, the acceptable error within delta
> + """
> + diff = abs(t1 - t2)
> + if diff > DELTA:
> + return False
> + else:
> + return True
> +
> +def set_guest_time(params):
> + """ test setting guest time
> + """
> + logger = params['logger']
> + guestname = params['guestname']
> + username = params['username']
> + userpassword = params['userpassword']
> + f = params.get('flags', 0)
> + flags = parse_flags(f)
> +
> + if flags == -1:
> + logger.error("unrecongnized flags: %s" % f)
> + return 1
> +
> + conn = sharedmod.libvirtobj['conn']
> +
> + domobj = conn.lookupByName(guestname)
> +
> + # Check domain status
> + if check_guest_status(domobj):
> + pass
> + else:
> + domobj.create()
> + time.sleep(90)
> +
> + # get guest MAC
> + mac = get_guest_mac(domobj)
> + if mac == None:
> + logger.error("Failed to get guest's MAC address")
> + return 1
> + else:
> + logger.info("guest's MAC is %s" % mac)
> +
> + ipaddr = utils.mac_to_ip(mac, 180)
> + if mac == None:
> + logger.error("Failed to get guest's IP address")
> + return 1
> + else:
> + logger.info("guest's IP is %s" % ipaddr)
> +
> + seconds = 100
> +
I suggest changing constant seconds as a variable, this API will get
$time from conf handily.
BR,
Jianwei
> + try:
> + domobj.setTime({'seconds': seconds, 'nseconds': 0}, flags)
> +
> + sec = long(utils.remote_exec(ipaddr, username, userpassword, GET_TIME))
> +
> + except libvirtError, e:
> + logger.error("API error message: %s, error code is %s" \
> + % (e.message, e.get_error_code()))
> + return 1
> +
> + if flags == 1:
> + logger.info("guest time is synchronized to %s" % sec)
> + return 0
> +
> + if check_guest_time(seconds, sec):
> + logger.info("guest time is set to %s: pass" % seconds)
> + else:
> + logger.error("guest time %s is not matched with what we expected %s" %
> + (sec, seconds))
> + return 1
> +
> + return 0
> \ No newline at end of file
More information about the libvir-list
mailing list