From 9db810ebb1d7d4c7b80cb71d94b4efb942ff4725 Mon Sep 17 00:00:00 2001 From: Michal Minar Date: Sun, 30 Jun 2013 09:01:10 +0200 Subject: added tests for SoftwareIdentityChecks --- src/software/test/test_software_identity_checks.py | 144 +++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100755 src/software/test/test_software_identity_checks.py (limited to 'src') diff --git a/src/software/test/test_software_identity_checks.py b/src/software/test/test_software_identity_checks.py new file mode 100755 index 0000000..9ebd7ff --- /dev/null +++ b/src/software/test/test_software_identity_checks.py @@ -0,0 +1,144 @@ +#!/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_SoftwareIdentityChecks provider. +""" + +import pywbem +import socket +import unittest + +import base +import rpmcache + +class TestSoftwareIdentityChecks(base.SoftwareBaseTestCase): + """ + Basic cim operations test. + """ + + CLASS_NAME = "LMI_SoftwareIdentityChecks" + KEYS = ("Check", "Element") + + @classmethod + def needs_pkgdb_files(cls): + return True + + def make_op(self, pkg, filepath, newer=True): + """ + @return object path of SoftwareIdentityChecks association + """ + objpath = self.objpath.copy() + objpath["Check"] = pywbem.CIMInstanceName( + classname="LMI_SoftwareIdentityFileCheck", + namespace="root/cimv2", + keybindings=pywbem.NocaseDict({ + "CheckID" : 'LMI:LMI_SoftwareIdentityFileCheck', + "Name" : filepath, + "SoftwareElementID" : pkg.get_nevra( + newer=newer, with_epoch="ALWAYS"), + "SoftwareElementState" : pywbem.Uint16(2), #Executable + "TargetOperatingSystem" : pywbem.Uint16(36), #LINUX + "Version" : getattr(pkg, 'up_evra' if newer else 'evra') + })) + objpath["Element"] = 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: + for filepath in self.pkgdb_files[pkg.name]: + objpath = self.make_op(pkg, filepath) + inst = self.conn.GetInstance(InstanceName=objpath) + 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(inst[key], inst.path[key]) + self.assertEqual(objpath, inst.path, + "Object paths should match for package %s"%pkg) + + def test_enum_instance_names(self): + """ + Tests EnumInstances call on identity checks - should not be supported. + """ + self.assertRaisesCIM(pywbem.CIM_ERR_NOT_SUPPORTED, + self.conn.EnumerateInstanceNames, ClassName=self.CLASS_NAME) + + def test_get_identity_referents(self): + """ + Test AssociatorNames for Element(SoftwareIdentity). + """ + for pkg in self.safe_pkgs: + files = self.pkgdb_files[pkg.name] + objpath = self.make_op(pkg, files[0]) + refs = self.conn.AssociatorNames( + Role="Element", + ObjectName=objpath["Element"], + ResultRole="Check", + ResultClass="LMI_SoftwareIdentityFileCheck") + srefs = set(refs) + for ref in refs: + self.assertIsInstance(ref, pywbem.CIMInstanceName) + self.assertEqual(ref.namespace, 'root/cimv2') + self.assertEqual(ref.classname, + "LMI_SoftwareIdentityFileCheck") + self.assertIn(ref["Name"], set(r["Name"] for r in refs)) + self.assertEqual(sorted(ref.keys()), + ["CheckID", "Name", "SoftwareElementID", + "SoftwareElementState", + "TargetOperatingSystem", "Version"]) + self.assertEqual( + pkg.get_nevra(newer=True, with_epoch='ALWAYS'), + ref["SoftwareElementID"]) + + def test_get_check_referents(self): + """ + Test AssociatorNames for Check(SoftwareIdentityFileCheck). + """ + for pkg in self.safe_pkgs: + files = self.pkgdb_files[pkg.name] + for filepath in files: + objpath = self.make_op(pkg, filepath) + refs = self.conn.AssociatorNames( + ObjectName=objpath["Check"], + Role="Check", + ResultRole="Element", + ResultClass="LMI_SoftwareIdentity") + self.assertEqual(len(refs), 1) + ref = refs[0] + self.assertEqual(objpath["Element"], ref) + +def suite(): + """For unittest loaders.""" + return unittest.TestLoader().loadTestsFromTestCase( + TestSoftwareIdentityChecks) + +if __name__ == '__main__': + unittest.main() -- cgit