#!/usr/bin/env python # # Copyright (C) 2012-2013 Red Hat, Inc. All rights reserved. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # # Authors: Michal Minar # """ Unit tests for LMI_MemberOfSoftwareCollection provider. """ import pywbem import socket import unittest import base class TestHostedSoftwareCollection(base.SoftwareBaseTestCase): """ Basic cim operations test. """ CLASS_NAME = "LMI_HostedSoftwareCollection" KEYS = ("Antecedent", "Dependent") @classmethod def needs_pkgdb(cls): return False def make_op(self): """ @param ses SoftwareElementState property value @return object path of SoftwareIdentity """ objpath = self.objpath.copy() objpath["Antecedent"] = pywbem.CIMInstanceName( classname="Linux_ComputerSystem", namespace="root/cimv2", keybindings=pywbem.NocaseDict({ "CreationClassName" : "Linux_ComputerSystem", "Name" : socket.getfqdn() })) objpath["Dependent"] = pywbem.CIMInstanceName( classname="LMI_SystemSoftwareCollection", namespace="root/cimv2", keybindings=pywbem.NocaseDict({ "InstanceID" : "LMI:LMI_SystemSoftwareCollection" })) return objpath def test_get_instance(self): """ Tests GetInstance call on packages from our rpm cache. """ objpath = self.make_op() inst = self.conn.GetInstance(InstanceName=objpath, LocalOnly=False) self.assertIsInstance(inst, pywbem.CIMInstance) self.assertEqual(inst.path, objpath) self.assertEqual(sorted(inst.properties.keys()), sorted(self.KEYS)) self.assertEqual(objpath, inst.path) for key in self.KEYS: self.assertEqual(inst[key], inst.path[key]) # try with CIM_ prefix antecedent = objpath["Antecedent"].copy() objpath["Antecedent"].classname = "CIM_ComputerSystem" inst = self.conn.GetInstance(InstanceName=objpath, LocalOnly=False) self.assertIsInstance(inst, pywbem.CIMInstance) objpath["Antecedent"] = antecedent.copy() self.assertEqual(objpath, inst.path) self.assertEqual(sorted(inst.properties.keys()), sorted(self.KEYS)) for key in self.KEYS: self.assertEqual(inst[key], inst.path[key]) # try with CIM_ prefix also for CreationClassName objpath["Antecedent"]["CreationClassName"] = "CIM_ComputerSystem" inst = self.conn.GetInstance(InstanceName=objpath, LocalOnly=False) self.assertIsInstance(inst, pywbem.CIMInstance) objpath["Antecedent"] = antecedent.copy() self.assertEqual(objpath, inst.path) self.assertEqual(sorted(inst.properties.keys()), sorted(self.KEYS)) for key in self.KEYS: self.assertEqual(inst[key], inst.path[key]) def test_enum_instances(self): """ Tests EnumInstances call on installed packages. """ objpath = self.make_op() insts = self.conn.EnumerateInstances(ClassName=self.CLASS_NAME) self.assertEqual(1, len(insts)) self.assertEqual(objpath, insts[0].path) self.assertEqual(sorted(insts[0].properties.keys()), sorted(self.KEYS)) self.assertEqual(objpath, insts[0].path) for key in self.KEYS: self.assertEqual(insts[0][key], insts[0].path[key]) def test_enum_instance_names(self): """ Tests EnumInstanceNames call on installed packages. """ objpath = self.make_op() inames = self.conn.EnumerateInstanceNames(ClassName=self.CLASS_NAME) self.assertEqual(1, len(inames)) self.assertEqual(objpath, inames[0]) def test_get_antecedent_referents(self): """ Test ReferenceNames for ComputerSystem. """ objpath = self.make_op() refs = self.conn.AssociatorNames( AssocClass='LMI_HostedSoftwareCollection', Role="Antecedent", ObjectName=objpath["Antecedent"], ResultRole="Dependent", ResultClass='LMI_SystemSoftwareCollection') self.assertEqual(len(refs), 1) ref = refs[0] self.assertEqual(objpath["Dependent"], ref) @base.mark_dangerous def test_get_dependent_referents(self): """ Test ReferenceNames for SystemSoftwareCollection. """ objpath = self.make_op() refs = self.conn.AssociatorNames( AssocClass='LMI_HostedSoftwareCollection', ObjectName=objpath["Dependent"], Role="Dependent", ResultRole="Antecedent", ResultClass="Linux_ComputerSystem") self.assertEqual(1, len(refs)) ref = refs[0] self.assertEqual(objpath["Antecedent"], ref) def suite(): """For unittest loaders.""" return unittest.TestLoader().loadTestsFromTestCase( TestHostedSoftwareCollection) if __name__ == '__main__': unittest.main()