diff options
Diffstat (limited to 'src/software/test/test_member_of_software_collection.py')
-rwxr-xr-x | src/software/test/test_member_of_software_collection.py | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/src/software/test/test_member_of_software_collection.py b/src/software/test/test_member_of_software_collection.py new file mode 100755 index 0000000..4d375c4 --- /dev/null +++ b/src/software/test/test_member_of_software_collection.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python +# +# Copyright (C) 2012 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 <miminar@redhat.com> +# +""" +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:SystemSoftwareCollection" + })) + objpath["Member"] = pywbem.CIMInstanceName( + classname="LMI_SoftwareIdentity", + namespace="root/cimv2", + keybindings=pywbem.NocaseDict({ + "InstanceID" : 'LMI:PKG:' + 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:PKG:'+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:PKG:")) + nevra_set = set(i["InstanceID"] for i in refs) + # NOTE: installed packages might not be available + for pkg in self.safe_pkgs: + nevra = 'LMI:PKG:'+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() |