#!/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 unittest import base class TestMemberOfSoftwareCollection(base.SoftwareBaseTestCase): """ Basic cim operations test. """ CLASS_NAME = "LMI_MemberOfSoftwareCollection" KEYS = ("Collection", "Member") def make_op(self, pkg, newer=True): """ @return object path of MembeOfSoftwareCollection association """ objpath = self.objpath.copy() objpath["Collection"] = pywbem.CIMInstanceName( classname="LMI_SystemSoftwareCollection", namespace="root/cimv2", keybindings=pywbem.NocaseDict({ "InstanceID" : "LMI:LMI_SystemSoftwareCollection" })) objpath["Member"] = pywbem.CIMInstanceName( classname="LMI_SoftwareIdentity", namespace="root/cimv2", keybindings=pywbem.NocaseDict({ "InstanceID" : 'LMI:LMI_SoftwareIdentity:' + pkg.get_nevra(newer=newer, with_epoch="ALWAYS") })) return objpath def test_get_instance(self): """ Tests GetInstance call on packages from our rpm cache. """ for pkg in self.safe_pkgs: objpath = self.make_op(pkg) inst = self.conn.GetInstance(InstanceName=objpath, LocalOnly=False) self.assertEqual(inst.path, objpath, "Object paths should match for package %s"%pkg) for key in self.KEYS: self.assertTrue(inst.properties.has_key(key), "OP is missing \"%s\" key for package %s"%(key, pkg)) self.assertEqual(objpath, inst.path) # @base.mark_tedious # def test_enum_instance_names(self): # """ # Tests EnumInstanceNames call on installed packages. # """ # inames = self.conn.EnumerateInstanceNames(ClassName=self.CLASS_NAME) # self.assertGreater(len(inames), 0) # objpath = self.make_op(self.safe_pkgs[0]) # for iname in inames: # self.assertIsInstance(iname, pywbem.CIMInstanceName) # self.assertEqual(iname.namespace, 'root/cimv2') # self.assertEqual(iname.classname, self.CLASS_NAME) # self.assertEqual(sorted(iname.keys()), sorted(self.KEYS)) # self.assertEqual(objpath["Collection"], iname["Collection"]) # nevra_set = set(i["Member"]["InstanceID"] for i in inames) # for pkg in self.safe_pkgs: # nevra = 'LMI:LMI_SoftwareIdentity:'+pkg.get_nevra(with_epoch="ALWAYS") # self.assertTrue(nevra in nevra_set, # 'Missing nevra "%s".' % nevra) # @base.mark_tedious # def test_enum_instances(self): # """ # Tests EnumInstances call on installed packages. # """ # insts = self.conn.EnumerateInstances(ClassName=self.CLASS_NAME) # self.assertGreater(len(insts), 0) # for inst in insts: # self.assertIsInstance(inst, pywbem.CIMInstance) # self.assertEqual(inst.namespace, 'root/cimv2') # self.assertEqual(inst.classname, self.CLASS_NAME) # self.assertEqual(sorted(inst.keys()), sorted(self.KEYS)) # self.assertEqual(inst["InstanceID"], inst.path["InstanceID"]) # nevra_set = set(i["Member"]["InstanceID"] for i in insts) # for pkg in self.safe_pkgs: # self.assertIn(pkg.get_nevra(with_epoch="ALWAYS"), nevra_set) # @base.mark_tedious # def test_get_collection_referents(self): # """ # Test ReferenceNames for SystemSoftwareCollection. # """ # objpath = self.make_op(self.safe_pkgs[0]) # refs = self.conn.AssociatorNames( # Role="Collection", # ObjectName=objpath["Collection"], # ResultRole="Member", # ResultClass="LMI_SoftwareIdentity") # self.assertGreater(len(refs), 0) # for ref in refs: # self.assertIsInstance(ref, pywbem.CIMInstanceName) # self.assertEqual(ref.namespace, 'root/cimv2') # self.assertEqual(ref.classname, "LMI_SoftwareIdentity") # self.assertEqual(sorted(ref.keys()), ["InstanceID"]) # self.assertTrue(ref["InstanceID"].startswith("LMI:LMI_SoftwareIdentity:")) # nevra_set = set(i["InstanceID"] for i in refs) # # NOTE: installed packages might not be available # for pkg in self.dangerous_pkgs: # nevra = 'LMI:LMI_SoftwareIdentity:'+pkg.get_nevra(with_epoch="ALWAYS") # self.assertTrue(nevra in nevra_set, # 'Missing nevra "%s".' % nevra) # def test_get_member_referents(self): """ Test ReferenceNames for SoftwareIdentity. """ for pkg in self.safe_pkgs: objpath = self.make_op(pkg) refs = self.conn.AssociatorNames( ObjectName=objpath["Member"], Role="Member", ResultRole="Collection", ResultClass="LMI_SystemSoftwareCollection") self.assertEqual(len(refs), 1) ref = refs[0] self.assertEqual(objpath["Collection"], ref) def suite(): """For unittest loaders.""" return unittest.TestLoader().loadTestsFromTestCase( TestMemberOfSoftwareCollection) if __name__ == '__main__': unittest.main()