Re: [libvirt] [libvirt-test-API][PATCH] Add connection_getDomainCapabilities test case
On 03/26/2015 05:06 PM, jiahu wrote: This case will test getDomainCapabilities API, and connection_getDomainCapabilities test case was added to test_connection.conf --- cases/test_connection.conf| 10 + repos/virconn/connection_getDomainCapabilities.py | 438 ++ 2 files changed, 448 insertions(+) create mode 100644 repos/virconn/connection_getDomainCapabilities.py diff --git a/cases/test_connection.conf b/cases/test_connection.conf index 7552024..5719937 100644 --- a/cases/test_connection.conf +++ b/cases/test_connection.conf @@ -47,3 +47,13 @@ virconn:free_pages 0 pagesize 4k,2M + +virconn:connection_getDomainCapabilities +emulatorbin +/usr/libexec/qemu-kvm +arch +x86_64 +machine +pc-i440fx-rhel7.0.0 +virttype +kvm diff --git a/repos/virconn/connection_getDomainCapabilities.py b/repos/virconn/connection_getDomainCapabilities.py new file mode 100644 index 000..f0cfa1f --- /dev/null +++ b/repos/virconn/connection_getDomainCapabilities.py @@ -0,0 +1,438 @@ +#!/usr/bin/env python +# test getDomainCapabilities() API for libvirtd + +import os +import libvirt +import hashlib +import fcntl + +from xml.dom import minidom +from libvirt import libvirtError +from src import sharedmod +from utils import utils + +required_params = ('emulatorbin','arch','machine','virttype',) +optional_params = {} + +QEMU_CAPS = "" +API_FILE = "/tmp/caps_from_api.xml" +CMD = "rm -rf %s" +OVMF = "/usr/share/OVMF/OVMF_CODE.fd" +IOMMU = "/sys/kernel/iommu_groups/" +VFIO = "/dev/vfio/vfio" +KVM = "/dev/kvm" +KVM_CHECK_EXTENSION = 44547 +KVM_CAP_IOMMU = 18 +maxcpu = 0 + +ovmf_f = False +drive = False +drive_forma = False +drive_readonly = False +blk_sg_io = False +usb_storage = False +device = False +scsi_generic = False +vfio_pci = False + +def clean_env(logger): +""" + clean testing environment +""" +status, output = utils.exec_cmd(CMD % API_FILE, shell=True) +if status != 0: +logger.error("Can not delete %s" % API_FILE) +else: +logger.debug("Deleted %s successfully" % API_FILE) + +def get_hypervisor_ver(emulatorbin,logger): +""" + Obtain qemu-kvm's version, and return a number value of version +""" +RPM = "rpm -qf %s" +status, package = utils.exec_cmd(RPM % emulatorbin, shell=True) +if not status: +logger.debug("The package is %s" % package) +else: +logger.debug("The package is %s" % package) +return 0 +package = package[0].split('-') +version = "" +for item in package: +if not item.isalnum(): +for v in item.split("."): +version = version + v.rjust(3,"0") +break +return int(version) + +def validate_caps_from_hv(emulatorbin,logger): +""" +Validate the relative caps between libvirt and qemu-kvm +""" +F1 = "%s -h| grep \"\-drive\"" +F2 = "%s -h| grep \"format=\"" +F3 = "%s -h| grep \"readonly=\"" +F4 = "%s -h| grep \"^\\-device\"" +l = [F1,F2,F3,F4] +flags = [] +for item in l: +status, temp = utils.exec_cmd(item % emulatorbin, shell=True) +if not status: +flags.append(True) +logger.debug("Got: %s from vh" % temp) +else: +flags.append(False) +logger.debug("Got: %s from vh" % temp) +if get_hypervisor_ver(emulatorbin,logger) >= 11000: + flags.append(True) +else: + flags.append(False) +libvirt_f = [drive,drive_forma,drive_readonly,device,blk_sg_io] +if flags == libvirt_f: +return True +else: +return False + +def generate_hash(emulatorbin,logger): +""" + generate file name using sha256 +""" +global QEMU_CAPS +QEMU_CAPS = "/var/cache/libvirt/qemu/capabilities/" +file_name = hashlib.sha256(emulatorbin).hexdigest() +QEMU_CAPS = QEMU_CAPS + file_name + ".xml" +logger.debug("Cache file is %s" % QEMU_CAPS) + +def get_maxcpu(machine,logger): +""" + return maxcpu for given machine type from QEMU_CAPS xml +""" +global maxcpu +xml = minidom.parse(QEMU_CAPS) +qemu = xml.getElementsByTagName('qemuCaps')[0] +for item in qemu.getElementsByTagName('machine'): +if item.getAttribute('name') == machine: +maxcpu = int(item.getAttribute('maxCpus')) +return True + +def get_os_flags(logger): +""" + Read results from QEMU_CAPS file and set three flags +""" +global drive, drive_forma, drive_readonly +xml = minidom.parse(QEMU_CAPS) +qemu = xml.getElementsByTagName('qemuCaps')[0] +for item in qemu.getElementsByTagName('flag'): +if item.getAttribute('name') == "drive": +drive = True +if item.getAttribute('name') == "drive-format": +drive_forma = True +if item.getAttribute('name') == "drive-readonly": +drive_readonly = True +logger.debug("dri
[libvirt] [libvirt-test-API][PATCH] Add connection_getDomainCapabilities test case
In the case, we will validate getDomainCapabilities API for libvirt. jiahu (1): Add connection_getDomainCapabilities test case cases/test_connection.conf| 10 + repos/virconn/connection_getDomainCapabilities.py | 438 ++ 2 files changed, 448 insertions(+) create mode 100644 repos/virconn/connection_getDomainCapabilities.py -- 1.8.1.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [libvirt-test-API][PATCH] Add connection_getDomainCapabilities test case
This case will test getDomainCapabilities API, and connection_getDomainCapabilities test case was added to test_connection.conf --- cases/test_connection.conf| 10 + repos/virconn/connection_getDomainCapabilities.py | 438 ++ 2 files changed, 448 insertions(+) create mode 100644 repos/virconn/connection_getDomainCapabilities.py diff --git a/cases/test_connection.conf b/cases/test_connection.conf index 7552024..5719937 100644 --- a/cases/test_connection.conf +++ b/cases/test_connection.conf @@ -47,3 +47,13 @@ virconn:free_pages 0 pagesize 4k,2M + +virconn:connection_getDomainCapabilities +emulatorbin +/usr/libexec/qemu-kvm +arch +x86_64 +machine +pc-i440fx-rhel7.0.0 +virttype +kvm diff --git a/repos/virconn/connection_getDomainCapabilities.py b/repos/virconn/connection_getDomainCapabilities.py new file mode 100644 index 000..f0cfa1f --- /dev/null +++ b/repos/virconn/connection_getDomainCapabilities.py @@ -0,0 +1,438 @@ +#!/usr/bin/env python +# test getDomainCapabilities() API for libvirtd + +import os +import libvirt +import hashlib +import fcntl + +from xml.dom import minidom +from libvirt import libvirtError +from src import sharedmod +from utils import utils + +required_params = ('emulatorbin','arch','machine','virttype',) +optional_params = {} + +QEMU_CAPS = "" +API_FILE = "/tmp/caps_from_api.xml" +CMD = "rm -rf %s" +OVMF = "/usr/share/OVMF/OVMF_CODE.fd" +IOMMU = "/sys/kernel/iommu_groups/" +VFIO = "/dev/vfio/vfio" +KVM = "/dev/kvm" +KVM_CHECK_EXTENSION = 44547 +KVM_CAP_IOMMU = 18 +maxcpu = 0 + +ovmf_f = False +drive = False +drive_forma = False +drive_readonly = False +blk_sg_io = False +usb_storage = False +device = False +scsi_generic = False +vfio_pci = False + +def clean_env(logger): +""" + clean testing environment +""" +status, output = utils.exec_cmd(CMD % API_FILE, shell=True) +if status != 0: +logger.error("Can not delete %s" % API_FILE) +else: +logger.debug("Deleted %s successfully" % API_FILE) + +def get_hypervisor_ver(emulatorbin,logger): +""" + Obtain qemu-kvm's version, and return a number value of version +""" +RPM = "rpm -qf %s" +status, package = utils.exec_cmd(RPM % emulatorbin, shell=True) +if not status: +logger.debug("The package is %s" % package) +else: +logger.debug("The package is %s" % package) +return 0 +package = package[0].split('-') +version = "" +for item in package: +if not item.isalnum(): +for v in item.split("."): +version = version + v.rjust(3,"0") +break +return int(version) + +def validate_caps_from_hv(emulatorbin,logger): +""" +Validate the relative caps between libvirt and qemu-kvm +""" +F1 = "%s -h| grep \"\-drive\"" +F2 = "%s -h| grep \"format=\"" +F3 = "%s -h| grep \"readonly=\"" +F4 = "%s -h| grep \"^\\-device\"" +l = [F1,F2,F3,F4] +flags = [] +for item in l: +status, temp = utils.exec_cmd(item % emulatorbin, shell=True) +if not status: +flags.append(True) +logger.debug("Got: %s from vh" % temp) +else: +flags.append(False) +logger.debug("Got: %s from vh" % temp) +if get_hypervisor_ver(emulatorbin,logger) >= 11000: + flags.append(True) +else: + flags.append(False) +libvirt_f = [drive,drive_forma,drive_readonly,device,blk_sg_io] +if flags == libvirt_f: +return True +else: +return False + +def generate_hash(emulatorbin,logger): +""" + generate file name using sha256 +""" +global QEMU_CAPS +QEMU_CAPS = "/var/cache/libvirt/qemu/capabilities/" +file_name = hashlib.sha256(emulatorbin).hexdigest() +QEMU_CAPS = QEMU_CAPS + file_name + ".xml" +logger.debug("Cache file is %s" % QEMU_CAPS) + +def get_maxcpu(machine,logger): +""" + return maxcpu for given machine type from QEMU_CAPS xml +""" +global maxcpu +xml = minidom.parse(QEMU_CAPS) +qemu = xml.getElementsByTagName('qemuCaps')[0] +for item in qemu.getElementsByTagName('machine'): +if item.getAttribute('name') == machine: +maxcpu = int(item.getAttribute('maxCpus')) +return True + +def get_os_flags(logger): +""" + Read results from QEMU_CAPS file and set three flags +""" +global drive, drive_forma, drive_readonly +xml = minidom.parse(QEMU_CAPS) +qemu = xml.getElementsByTagName('qemuCaps')[0] +for item in qemu.getElementsByTagName('flag'): +if item.getAttribute('name') == "drive": +drive = True +if item.getAttribute('name') == "drive-format": +drive_forma = True +if item.getAttribute('name') == "drive-readonly": +drive_readonly = True +logger.debug("drive = %s; drive_format = %s; drive_readonly = %s