From 659f348cd2fe6587f5daaf91e227509b95be6d6f Mon Sep 17 00:00:00 2001 From: Michal Minar Date: Wed, 24 Oct 2012 16:38:37 +0200 Subject: modified for used under tog-pegasus Checkum property of LMI_SoftwareFileCheck had different type than in base class. This prevented registration. - Solved by renaming: Checksum -> FileChecksum ExpectedChecksum -> ExpectedFileChecksum ChecksumType -> FileChecksumType fixed filtering of found available and installed packages - search by nevra replaced with search for particular keys --- src/software/providers/LMI_SoftwareFileCheck.py | 9 +++--- src/software/providers/util/common.py | 43 +++++++++++++------------ src/software/test/test_software_file_check.py | 16 ++++----- 3 files changed, 35 insertions(+), 33 deletions(-) (limited to 'src') diff --git a/src/software/providers/LMI_SoftwareFileCheck.py b/src/software/providers/LMI_SoftwareFileCheck.py index 0058f78..7e1782c 100644 --- a/src/software/providers/LMI_SoftwareFileCheck.py +++ b/src/software/providers/LMI_SoftwareFileCheck.py @@ -70,10 +70,11 @@ class LMI_SoftwareFileCheck(CIMProvider2): logger.log_debug('Entering %s.get_instance()' \ % self.__class__.__name__) - vpkg = SoftwareFileCheck.object_path2yumcheck(env, model.path) - pkg = vpkg.po - fi = pkg.hdr.fiFromHeader() - return filecheck2model(vpkg, model['Name'], env, False) + with YumDB.getInstance(env) as yb: + vpkg = SoftwareFileCheck.object_path2yumcheck(env, model.path) + pkg = vpkg.po + fi = pkg.hdr.fiFromHeader() + return filecheck2model(vpkg, model['Name'], env, False) def enum_instances(self, env, model, keys_only): """Enumerate instances. diff --git a/src/software/providers/util/common.py b/src/software/providers/util/common.py index 4190d41..4c73830 100644 --- a/src/software/providers/util/common.py +++ b/src/software/providers/util/common.py @@ -354,19 +354,20 @@ class SoftwarePackage: if not m: raise pywbem.CIMError(pywbem.CIM_ERR_INVALID_PARAMETER, "SoftwareElementID could not be parsed.") - match_props['nevra'] = _get_key('SoftwareElementID') - match_props['name'] = m.group('name') + for k in ('name', 'version', 'release', 'arch'): + mk = k if k not in ('version', 'release') else k[:3] + match_props[k] = m.group(mk) + if not m.group("epoch"): + match_props["epoch"] = "0" else: - for matchattr, instattr in ( - ('name', 'name'), ('epoch', 'epoch'), ('version', 'ver'), - ('release', 'rel'), ('arch', 'arch')): - if _get_key(matchattr): - match_props[matchattr] = _get_key(matchattr) + for k in ('name', 'epoch', 'version', 'release', 'arch'): + ik = k if k != 'arch' else "architecture" + if _get_key(ik): match_props[k] = _get_key(ik) if not match_props: raise pywbem.CIMError(pywbem.CIM_ERR_FAILED, "Too few key values given (give at least a Name).") - if not 'name' in match_props and not 'nevra' in match_props: + if not 'name' in match_props: raise pywbem.CIMError(pywbem.CIM_ERR_FAILED, "Missing either Name or SoftwareElementID property.") @@ -460,7 +461,7 @@ class SoftwareFileCheck: "File Type", "File Size", "File Mode", - "Checksum", + "File Checksum", "Device major/minor number", "Symlink Target", "User Ownership", "Group Ownership", @@ -652,7 +653,7 @@ class SoftwareFileCheck: """ FileCheck = collections.namedtuple('FileCheck', 'exists, md5_checksum, file_type, file_size, file_mode, ' - 'checksum, device, link_target, user_id, group_id, ' + 'file_checksum, device, link_target, user_id, group_id, ' 'last_modification_time') @staticmethod @@ -667,14 +668,14 @@ class SoftwareFileCheck: exists = os.path.lexists(vpf.filename) md5_checksum = None expected = { - "file_type" : SoftwareFileCheck.filetype_str2pywbem(vpf.ftype), - "user_id" : pywbem.Uint32(pwd.getpwnam(vpf.user).pw_uid), - "group_id" : pywbem.Uint32(grp.getgrnam(vpf.group).gr_gid), - "file_mode" : pywbem.Uint32(vpf.mode), - "file_size" : pywbem.Uint64(vpf.size), - "link_target" : vpf.readlink if vpf.readlink else None, - "checksum" : vpf.digest[1], - "device" : (pywbem.Uint64(vpf.dev) + "file_type" : SoftwareFileCheck.filetype_str2pywbem(vpf.ftype), + "user_id" : pywbem.Uint32(pwd.getpwnam(vpf.user).pw_uid), + "group_id" : pywbem.Uint32(grp.getgrnam(vpf.group).gr_gid), + "file_mode" : pywbem.Uint32(vpf.mode), + "file_size" : pywbem.Uint64(vpf.size), + "link_target" : vpf.readlink if vpf.readlink else None, + "file_checksum" : vpf.digest[1], + "device" : (pywbem.Uint64(vpf.dev) if vpf.ftype.endswith('device') else None), "last_modification_time" : pywbem.Uint64(vpf.mtime) } @@ -697,7 +698,7 @@ class SoftwareFileCheck: if os.path.islink(vpf.filename) else None) md5_checksum, checksum = SoftwareFileCheck.compute_checksums( env, checksum_type, reality["file_type"], vpf.filename) - reality["checksum"] = checksum + reality["file_checksum"] = checksum kwargs = dict(exists=exists, md5_checksum=md5_checksum, **dict((k, (expected[k], reality[k])) for k in expected)) return SoftwareFileCheck.FileCheck(**kwargs) @@ -769,7 +770,7 @@ class SoftwareFileCheck: #model['ElementName'] = '' # TODO #model['InstanceID'] = '' # TODO model['FileName'] = os.path.basename(vpf.filename) - model['ChecksumType'] = csumt = \ + model['FileChecksumType'] = csumt = \ pywbem.Uint16(SoftwareFileCheck.pkg_checksum_type(pkg)) if fc is None: fc = SoftwareFileCheck.test_file(env, csumt, vpf) @@ -781,7 +782,7 @@ class SoftwareFileCheck: ('LastModificationTime', 'last_modification_time'), ('FileSize', 'file_size'), ('LinkTarget', 'link_target'), - ('Checksum', 'checksum')): + ('FileChecksum', 'file_checksum')): exp, rea = getattr(fc, fattr) if exp is not None: model['Expected' + mattr] = exp diff --git a/src/software/test/test_software_file_check.py b/src/software/test/test_software_file_check.py index 66b2452..a92f9a1 100755 --- a/src/software/test/test_software_file_check.py +++ b/src/software/test/test_software_file_check.py @@ -70,8 +70,8 @@ class TestSoftwareInstalledPackage(SoftwareBaseTestCase): self.assertEqual(inst["FileMode"], stats.st_mode) self.assertEqual(inst["FileSize"], stats.st_size) self.assertEqual(inst["LinkTarget"], target) - self.assertEqual(inst["Checksum"], - "0"*self.hash_num2length[inst["ChecksumType"]]) + self.assertEqual(inst["FileChecksum"], + "0"*self.hash_num2length[inst["FileChecksumType"]]) self.assertEqual(inst["LastModificationTime"], int(stats.st_mtime)) @@ -128,8 +128,8 @@ class TestSoftwareInstalledPackage(SoftwareBaseTestCase): self.assertEqual(inst["FileMode"], stats.st_mode) self.assertEqual(inst["FileSize"], stats.st_size) self.assertIs(inst["LinkTarget"], None) - self.assertEqual(inst["Checksum"], - "0"*self.hash_num2length[inst["ChecksumType"]]) + self.assertEqual(inst["FileChecksum"], + "0"*self.hash_num2length[inst["FileChecksumType"]]) self.assertEqual(inst["LastModificationTime"], int(stats.st_mtime)) @@ -142,8 +142,8 @@ class TestSoftwareInstalledPackage(SoftwareBaseTestCase): self.assertEqual(inst["FileMode"], stats.st_mode) self.assertEqual(inst["FileSize"], stats.st_size) self.assertIs(inst["LinkTarget"], None) - csum = self.make_checksum_str(inst['ChecksumType'], f) - self.assertEqual(inst["Checksum"].lower(), csum) + csum = self.make_checksum_str(inst['FileChecksumType'], f) + self.assertEqual(inst["FileChecksum"].lower(), csum) self.assertEqual(inst["ExpectedLastModificationTime"], inst["LastModificationTime"]) self.assertEqual(inst["LastModificationTime"], @@ -201,7 +201,7 @@ class TestSoftwareInstalledPackage(SoftwareBaseTestCase): self.assertNotEqual(inst["FileSize"], inst["ExpectedFileSize"]) self.assertIsNone(inst["LastModificationTime"]) self.assertIsNone(inst["FileType"]) - self.assertIsNone(inst["Checksum"]) + self.assertIsNone(inst["FileChecksum"]) self.assertIsNone(inst["FileMode"]) self.assertIsNone(inst["FileUserID"]) self.assertIsNone(inst["FileGroupID"]) @@ -240,7 +240,7 @@ class TestSoftwareInstalledPackage(SoftwareBaseTestCase): self.assertTrue(all(f is True for f in inst["PassedFlags"])) for prop in ( "FileType", "FileUserID", "FileGroupID" , "FileMode", "FileSize", "LinkTarget" - , "Checksum", "FileModeFlags"): + , "FileChecksum", "FileModeFlags"): self.assertEqual(inst["Expected"+prop], inst[prop]) if os.path.islink(f): self.do_test_symlink(op, nevra, f, inst) -- cgit