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:
parent
0e664ad779
commit
51eca7346e
6 changed files with 109 additions and 2 deletions
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
BIN
tests/data/rpms/test-deps-1-1.fc24.x86_64.rpm
Normal file
BIN
tests/data/rpms/test-deps-1-1.fc24.x86_64.rpm
Normal file
Binary file not shown.
28
tests/data/specs/test-deps.spec
Normal file
28
tests/data/specs/test-deps.spec
Normal 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
|
||||
41
tests/test_hub/test_getRPMDeps.py
Normal file
41
tests/test_hub/test_getRPMDeps.py
Normal 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])
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue