getRPMDeps exposes additional deps

Adding Conflicts, Suggests, Enhances, Supplements and Recommend header fields
in addition to original Requires, Conflicts, Obsoletes and Provides

relates: https://pagure.io/koji/issue/142
This commit is contained in:
Tomas Kopecek 2016-10-03 15:35:32 +02:00 committed by Mike McLean
parent 0e664ad779
commit 51eca7346e
6 changed files with 109 additions and 2 deletions

View file

@ -9537,7 +9537,7 @@ class RootExports(object):
results = []
for dep_name in ['REQUIRE', 'PROVIDE', 'CONFLICT', 'OBSOLETE']:
for dep_name in ['REQUIRE', 'PROVIDE', 'CONFLICT', 'OBSOLETE', 'SUGGEST', 'ENHANCE', 'SUPPLEMENT', 'RECOMMEND']:
dep_id = getattr(koji, 'DEP_' + dep_name)
if depType is None or depType == dep_id:
fields = koji.get_header_fields(rpm_path, [dep_name + 'NAME',

View file

@ -181,6 +181,10 @@ DEP_REQUIRE = 0
DEP_PROVIDE = 1
DEP_OBSOLETE = 2
DEP_CONFLICT = 3
DEP_SUGGEST = 4
DEP_ENHANCE = 5
DEP_SUPPLEMENT = 6
DEP_RECOMMEND = 7
#dependency flags
RPMSENSE_LESS = 2

Binary file not shown.

View file

@ -0,0 +1,28 @@
Name: test-deps
Version: 1
Release: 1%{?dist}
Summary: Testing dependency header fields
License: none
Requires: require1
Requires: require2
Provides: provide1
Provides: provide2
Obsoletes: obsoletes1
Obsoletes: obsoletes2
Conflicts: conflicts1
Conflicts: conflicts2
Suggests: suggests1
Suggests: suggests2
Enhances: enhances1
Enhances: enhances2
Supplements: supplements1
Supplements: supplements2
Recommends: recommends1
Recommends: recommends2
%description
Testing dependency header fields
%files

View file

@ -0,0 +1,41 @@
import mock
import os
import unittest
import koji
import kojihub
class TestGetRPMDeps(unittest.TestCase):
@mock.patch('kojihub.get_rpm')
@mock.patch('kojihub.get_build')
@mock.patch('koji.pathinfo')
def test_getRPMDeps(self, pi, build, rpm):
pi.build.return_value = os.path.join(os.path.dirname(__file__), '../data/rpms')
pi.rpm.return_value = 'test-deps-1-1.fc24.x86_64.rpm'
getRPMDeps = kojihub.RootExports().getRPMDeps
res = getRPMDeps('')
self.assertEqual(len(res), 22)
types = set([x['type'] for x in res])
self.assertEqual(set([koji.DEP_REQUIRE,
koji.DEP_PROVIDE,
koji.DEP_OBSOLETE,
koji.DEP_CONFLICT,
koji.DEP_SUGGEST,
koji.DEP_ENHANCE,
koji.DEP_SUPPLEMENT,
koji.DEP_RECOMMEND,
]), types)
# test correct mapping of names
result = {}
for r in res:
result.setdefault(r['type'], set()).add(r['name'])
self.assertIn('require1', result[koji.DEP_REQUIRE])
self.assertIn('provide1', result[koji.DEP_PROVIDE])
self.assertIn('obsoletes1', result[koji.DEP_OBSOLETE])
self.assertIn('conflicts1', result[koji.DEP_CONFLICT])
self.assertIn('suggests1', result[koji.DEP_SUGGEST])
self.assertIn('enhances1', result[koji.DEP_ENHANCE])
self.assertIn('supplements1', result[koji.DEP_SUPPLEMENT])
self.assertIn('recommends1', result[koji.DEP_RECOMMEND])

View file

@ -2,9 +2,12 @@
"""Test the __init__.py module"""
import koji
import os
import rpm
import unittest
import koji
class INITTestCase(unittest.TestCase):
"""Main test case container"""
@ -107,5 +110,36 @@ class INITTestCase(unittest.TestCase):
self.assertRaises(koji.GenericError,
koji.check_NVRA, value, strict=True)
class HeaderTestCase(unittest.TestCase):
rpm_path = os.path.join(os.path.dirname(__file__), 'data/rpms/test-deps-1-1.fc24.x86_64.rpm')
def setUp(self):
self.fd = open(self.rpm_path)
def tearDown(self):
self.fd.close()
def test_get_rpm_header(self):
self.assertRaises(IOError, koji.get_rpm_header, 'nonexistent_path')
self.assertRaises(AttributeError, koji.get_rpm_header, None)
self.assertIsInstance(koji.get_rpm_header(self.rpm_path), rpm.hdr)
self.assertIsInstance(koji.get_rpm_header(self.fd), rpm.hdr)
# TODO:
# test ts
def test_get_header_fields(self):
# incorrect
self.assertRaises(IOError, koji.get_header_fields, 'nonexistent_path', [])
self.assertRaises(koji.GenericError, koji.get_header_fields, self.rpm_path, 'nonexistent_header')
self.assertEqual(koji.get_header_fields(self.rpm_path, []), {})
# correct
self.assertEqual(['REQUIRES'], koji.get_header_fields(self.rpm_path, ['REQUIRES']).keys())
self.assertEqual(['PROVIDES', 'REQUIRES'], sorted(koji.get_header_fields(self.rpm_path, ['REQUIRES', 'PROVIDES'])))
hdr = koji.get_rpm_header(self.rpm_path)
self.assertEqual(['REQUIRES'], koji.get_header_fields(hdr, ['REQUIRES']).keys())
if __name__ == '__main__':
unittest.main()