[PATCH] [TEST][Addition] Add cross-provider test case 06_hs_to_vsms.py

# HG changeset patch # User Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com> # Date 1207055270 -19800 # Node ID 74a458de2c6ed158c83f0bf7e3687fc36f46b284 # Parent 60f6b8f32c9d56b163377ec6447a6d21436021aa [TEST][Addition] Add cross-provider test case 06_hs_to_vsms.py. It traverses the following path: {Hostsystem} --> [HostedService] {VirtualSystemMigrationService} --> [ElementCapabilities] {VirtualSystemMigrationCapabilities} --> [SettingsDefineCapabilities] {VirtualSystemMigrationSettingData} Verify the VirtualSystemMigrationSettingData. Signed-off-by: Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com> diff -r 60f6b8f32c9d -r 74a458de2c6e suites/libvirt-cim/cimtest/HostSystem/06_hs_to_vsms.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/suites/libvirt-cim/cimtest/HostSystem/06_hs_to_vsms.py Tue Apr 01 18:37:50 2008 +0530 @@ -0,0 +1,208 @@ +#!/usr/bin/python +# +# Copyright 2008 IBM Corp. +# +# Authors: +# Deepti B. Kalakeri <dkalaker@in.ibm.com> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# +# This is a cross-provider testcase to +# Get the MigrationSettingData properties starting from the host +# +# It traverses the following path: +# {Hostsystem} --> [HostedService] {VirtualSystemMigrationService} --> +# [ElementCapabilities] {VirtualSystemMigrationCapabilities} --> +# [SettingsDefineCapabilities] {VirtualSystemMigrationSettingData} +# Verify the VirtualSystemMigrationSettingData. +# +# Steps: +# ------ +# 1) Get the hostname by enumerating the hostsystem. +# 2) Get the various service on the host by using the HostedService association by supplying +# the inputs obtained from querying the hostsystem. +# 4) Select the VirtualSystemMigrationService from the association returned. We should get only +# one record. +# 5) Use the VirtualSystemMigrationService information to query ElementCapabilities association +# Verify that we should get only one MigrationCapabilities record from the VSMS association. +# 6) Obtain the VSMigrationSettingData values by using the MigrationCapabilities output from the +# previous query and supplying it to the SettingsDefineCapabilities association. +# 7) Check, that we obtain only one VSMigrationSettingData data. +# Verify the VSMigrationSettingData values. +# Date : 28.03.2008 + +import sys +from CimTest.Globals import do_main +from XenKvmLib.classes import get_typed_class +from XenKvmLib.assoc import Associators, AssociatorNames +from XenKvmLib.common_util import get_host_info, check_len +from CimTest.Globals import log_param, logger, CIM_ERROR_ASSOCIATORNAMES, \ +CIM_ERROR_ASSOCIATORS +from CimTest.ReturnCodes import PASS, FAIL + +sup_types = ['Xen', 'KVM', 'XenFV'] + +def print_err(err, detail, cn): + logger.error(err % cn) + logger.error("Exception: %s", detail) + +def print_field_error(fieldname, ret_value, exp_value): + logger.error("%s Mismatch", fieldname) + logger.error("Returned %s instead of %s", ret_value, exp_value) + + +def get_inst_from_list(server, cn, assoc_info, filter_name, exp_val): + status = PASS + ret = -1 + inst = [] + for rec in assoc_info: + record = rec[filter_name['key']] + if record == exp_val: + inst.append(rec) + ret = PASS + + # When no records are found. + if ret != PASS: + logger.error("%s with %s was not returned" % (cn, exp_val)) + status = FAIL + + return status, inst + +def get_assocnames_info(server, cn, an, qcn, name): + status = PASS + assoc_info = [] + try: + assoc_info = AssociatorNames(server, an, cn, virt, Name = name, CreationClassName = cn) + status = check_len(an, assoc_info, qcn, crit='lt', exp_len=3) + except Exception, detail: + print_err(CIM_ERROR_ASSOCIATORNAMES, detail, an) + status = FAIL + + return status, assoc_info + + +def get_vsms_info(): + status, host_name, classname = get_host_info(server, virt) + if status != PASS: + return status, [] + status, service_assoc_info = get_assocnames_info(server, classname, + assoc_name, req_cn, host_name) + if status != PASS or len(service_assoc_info) == 0: + return status, service_assoc_info + filter_name = {"key" : "Name"} + filter_value = 'MigrationService' + cn = 'VirtualSystemMigrationService' + status, vsms_list = get_inst_from_list(server, cn, service_assoc_info, filter_name, + filter_value) + return status, vsms_list + +def get_vsmcap_from_ec(vsms_list): + vsms_info = vsms_list[0] + cn = vsms_info['CreationClassName'] + sn = vsms_info['SystemName'] + name = vsms_info['Name'] + sccn = vsms_info['SystemCreationClassName'] + assoc_info = [] + try: + assoc_info = AssociatorNames(server, assoc_name, cn, virt, CreationClassName = cn, + SystemName = sn, Name = name, SystemCreationClassName = sccn) + status = check_len(assoc_name, assoc_info, req_cn, crit='ne', exp_len=1) + + except Exception, detail: + print_err(CIM_ERROR_ASSOCIATORNAMES, detail, assoc_name) + status = FAIL + + return status, assoc_info + +def get_vsmsd_from_sdc(vsmsd_list): + vsmsd_info = vsmsd_list[0] + cn = vsmsd_info.classname + instid = vsmsd_info['InstanceID'] + assoc_info = [] + try: + assoc_info = Associators(server, assoc_name, cn, virt, CreationClassName = cn, + InstanceID = instid) + status = check_len(assoc_name, assoc_info, req_cn, crit='ne', exp_len=1) + + except Exception, detail: + print_err(CIM_ERROR_ASSOCIATORS, detail, assoc_name) + status = FAIL + + return status, assoc_info + +def verify_vsmsd_values(vsmsd_list): + + # Values to be used for comparison + cn = get_typed_class(virt, "VirtualSystemMigrationSettingData") + instid = 'MigrationSettingData' + MType = 2 #[CIM_MIGRATE_LIVE] + priority = 0 + + verify_vsmsd = vsmsd_list[0] + if verify_vsmsd.classname != cn: + print_field_error('ClassName', verify_vsmsd.classname, cn) + return FAIL + if verify_vsmsd['InstanceID'] != instid: + print_field_error('InstanceID', verify_vsmsd['InstanceID'], instid) + return FAIL + if verify_vsmsd['MigrationType'] != MType: + print_field_error('MigrationType', verify_vsmsd['MigrationType'], MType) + return FAIL + if verify_vsmsd['Priority'] != priority: + print_field_error('Priority', verify_vsmsd['Priority'], priority) + return FAIL + return PASS + + +@do_main(sup_types) +def main(): + global virt, server + global assoc_name, class_name, req_cn + options = main.options + log_param() + server = options.ip + status = PASS + virt = options.virt + + assoc_name = get_typed_class(virt, 'HostedService') + req_cn = 'Service' + status, vsms_list = get_vsms_info() + if status != PASS or len(vsms_list) == 0: + logger.error("Did not get the expected MigrationService record") + return status + status = check_len(assoc_name, vsms_list, req_cn, crit='ne', exp_len=1) + if status != PASS: + return status + + assoc_name = get_typed_class(virt, 'ElementCapabilities') + req_cn = 'MigrationCapabilities' + status, vsmscap = get_vsmcap_from_ec(vsms_list) + if status != PASS or len(vsmscap) == 0: + logger.error("Did not get the expected MigrationCapabilities record") + return status + + assoc_name = get_typed_class(virt, 'SettingsDefineCapabilities') + req_cn = 'MigrationSettingData' + status, vsmsd = get_vsmsd_from_sdc(vsmscap) + if status != PASS or len(vsmsd) == 0: + logger.error("Did not get the expected MigrationSettingData record") + return status + + status = verify_vsmsd_values(vsmsd) + + return status +if __name__ == "__main__": + sys.exit(main())
participants (1)
-
Deepti B. Kalakeri