Navigation Menu

Skip to content
This repository has been archived by the owner on Jan 14, 2021. It is now read-only.

Commit

Permalink
Tests for new rpm depchain handlers.
Browse files Browse the repository at this point in the history
  • Loading branch information
ralphbean committed Sep 8, 2016
1 parent 296cbaa commit 5864fca
Show file tree
Hide file tree
Showing 2 changed files with 256 additions and 1 deletion.
26 changes: 25 additions & 1 deletion pdcupdater/tests/handler_tests/__init__.py
Expand Up @@ -33,7 +33,14 @@ def wrapper(self, pdc, *args, **kwargs):
pdc.add_endpoint('component-group-types', 'POST', 'wat')
pdc.add_endpoint('component-groups', 'POST', 'wat')
pdc.add_endpoint('global-components', 'POST', 'wat')
pdc.add_endpoint('release-components', 'POST', 'wat')
pdc.add_endpoint('release-components', 'POST', {
"id": 1,
"release": {"release_id": 'fedora-26'},
"global_component": "wat",
"name": "wat",
"type": "rpm",
})
pdc.add_endpoint('release-component-relationships', 'POST', 'wat')
pdc.add_endpoint('compose-images', 'POST', 'wat')
pdc.add_endpoint('compose-rpms', 'POST', 'wat')
pdc.add_endpoint('persons', 'POST', 'wat')
Expand All @@ -42,6 +49,8 @@ def wrapper(self, pdc, *args, **kwargs):
# Mock out GET endpoints
pdc.add_endpoint('composes/Fedora-24-20151130.n.2', 'GET', mock_404)

pdc.add_endpoint('releases/fedora-26', 'GET', {})
pdc.add_endpoint('releases/fedora-25', 'GET', {})
pdc.add_endpoint('releases/fedora-24', 'GET', {})
pdc.add_endpoint('releases/fedora-23-updates', 'GET', {})
pdc.add_endpoint('releases/fedora-22-updates', 'GET', {})
Expand Down Expand Up @@ -117,6 +126,21 @@ def wrapper(self, pdc, *args, **kwargs):
}],
})

pdc.add_endpoint('release-component-relationships', 'GET', [{
"from_component": {
"id": 1,
"name": "guake",
"release": "fedora-26"
},
"id": 1,
"to_component": {
"id": 2,
"name": "nethack",
"release": "fedora-26"
},
"type": "RPMRequires"
}])

pdc.add_endpoint('release-components', 'GET', {
'count': 11,
'next': None,
Expand Down
231 changes: 231 additions & 0 deletions pdcupdater/tests/handler_tests/test_depchain_rpms.py
@@ -0,0 +1,231 @@
import mock

import pdcupdater.utils
from pdcupdater.tests.handler_tests import (
BaseHandlerTest, mock_pdc
)


class TestBuildtimeDepIngestion(BaseHandlerTest):
maxDiff = None
handler_path = 'pdcupdater.handlers.depchain.rpms:NewRPMBuildTimeDepChainHandler'
config = {}

def test_can_handle_buildsys_tag_message(self):
idx = '2016-5af8c0c2-9acd-4cf4-afa6-c07649bb5561'
msg = pdcupdater.utils.get_fedmsg(idx)
result = self.handler.can_handle(msg)
self.assertEquals(result, True)

@mock_pdc
def test_handle_new_build(self, pdc):
idx = '2016-5af8c0c2-9acd-4cf4-afa6-c07649bb5561'
msg = pdcupdater.utils.get_fedmsg(idx)
self.handler.handle(pdc, msg)
expected_keys = [
'release-component-relationships',
'releases/fedora-26',
'release-components',
'global-components',
]
self.assertEquals(pdc.calls.keys(), expected_keys)

self.assertEqual(len(pdc.calls['global-components']), 53116)
self.assertEqual(len(pdc.calls['release-components']), 53116)
self.assertEqual(len(pdc.calls['release-component-relationships']), 17705)

@mock_pdc
@mock.patch('pdcupdater.services.koji_list_buildroot_for')
@mock.patch('pdcupdater.services.koji_rpms_from_build')
@mock.patch('pdcupdater.services.koji_builds_in_tag')
def test_audit_empty_koji(self, pdc, builds, rpms, buildroot):

# Mock out koji results
builds.return_value = [{
'build_id': 'fake_build_id',
'name': 'guake',
}]
rpms.return_value = {}, []
buildroot.return_value = 'wat2'

# Call the auditor
present, absent = self.handler.audit(pdc)

# Check the PDC calls..
self.assertDictEqual(pdc.calls, {
'release-component-relationships': [
('GET', {'page': 1, 'release': 'fedora-26', 'type': 'RPMBuildRequires'}),
('GET', {'page': 1, 'release': 'fedora-26', 'type': 'RPMBuildRoot'}),
],
'releases/fedora-26': [('GET', {})]
})

# Check the results.
self.assertSetEqual(present, set())
self.assertSetEqual(absent, set())

@mock_pdc
@mock.patch('pdcupdater.services.koji_list_buildroot_for')
@mock.patch('pdcupdater.services.koji_rpms_from_build')
@mock.patch('pdcupdater.services.koji_builds_in_tag')
def test_audit_mismatch(self, pdc, builds, rpms, buildroot):

# Mock out koji results
_build = {
'build_id': 'fake_build_id',
'name': 'guake',
}
builds.return_value = [_build]
rpms.return_value = _build, ['some rpm filename']
buildroot.return_value = [
{ 'name': 'buildtimelib1', 'is_update': True, },
{ 'name': 'buildtimelib2', 'is_update': False, },
]

# Call the auditor
present, absent = self.handler.audit(pdc)

# Check the PDC calls..
self.assertDictEqual(pdc.calls, {
'release-component-relationships': [
('GET', {'page': 1, 'release': 'fedora-26', 'type': 'RPMBuildRequires'}),
('GET', {'page': 1, 'release': 'fedora-26', 'type': 'RPMBuildRoot'}),
],
'releases/fedora-26': [('GET', {})]
})

# Check the results.
self.assertSetEqual(present, set([]))
self.assertSetEqual(absent, set([
'guake/fedora-26 RPMBuildRequires buildtimelib1/fedora-26',
'guake/fedora-26 RPMBuildRoot buildtimelib2/fedora-26',
]))


class TestRuntimeDepIngestion(BaseHandlerTest):
handler_path = 'pdcupdater.handlers.depchain.rpms:NewRPMRunTimeDepChainHandler'
config = {}

@mock_pdc
@mock.patch('pdcupdater.services.koji_yield_rpm_requires')
@mock.patch('pdcupdater.services.koji_rpms_from_build')
@mock.patch('pdcupdater.services.koji_builds_in_tag')
def test_audit_mismatch(self, pdc, builds, rpms, requires):

# Mock out koji results
_build = {
'build_id': 'fake_build_id',
'name': 'guake',
}
builds.return_value = [_build]
rpms.return_value = _build, ['some rpm filename']
requires.return_value = [
('runtimelib1', '', '',),
]

# Call the auditor
present, absent = self.handler.audit(pdc)

# Check the PDC calls..
self.assertDictEqual(pdc.calls, {
'release-component-relationships': [ ('GET', {
'page': 1, 'release': 'fedora-26', 'type': 'RPMRequires'
})],
'releases/fedora-26': [('GET', {})]
})

# Check the results.
self.assertSetEqual(present, set(['guake/fedora-26 RPMRequires nethack/fedora-26']))
self.assertSetEqual(absent, set(['guake/fedora-26 RPMRequires runtimelib1/fedora-26']))

@mock_pdc
@mock.patch('pdcupdater.services.koji_yield_rpm_requires')
@mock.patch('pdcupdater.services.koji_rpms_from_build')
@mock.patch('pdcupdater.services.koji_builds_in_tag')
def test_audit_simple_match(self, pdc, builds, rpms, requires):
# Mock out koji results
_build = {
'build_id': 'fake_build_id',
'name': 'guake',
}
builds.return_value = [_build]
rpms.return_value = _build, ['some rpm filename']
requires.return_value = [
('nethack', '', '',),
]

# Call the auditor
present, absent = self.handler.audit(pdc)

# Check the PDC calls..
self.assertDictEqual(pdc.calls, {
'release-component-relationships': [ ('GET', {
'page': 1, 'release': 'fedora-26', 'type': 'RPMRequires'
})],
'releases/fedora-26': [('GET', {})]
})

# Check the results.
self.assertSetEqual(present, set())
self.assertSetEqual(absent, set())

@mock_pdc
@mock.patch('pdcupdater.services.koji_yield_rpm_requires')
@mock.patch('pdcupdater.services.koji_rpms_from_build')
@mock.patch('pdcupdater.services.koji_builds_in_tag')
def test_initialize(self, pdc, builds, rpms, requires):
# Mock out koji results
_build = {
'build_id': 'fake_build_id',
'name': 'guake',
}
builds.return_value = [_build]
rpms.return_value = _build, ['some rpm filename']
requires.return_value = [
('nethack', '', '',),
]

# Call the initializer
self.handler.initialize(pdc)

# Check the PDC calls..

expected_calls = {
'global-components': [
('GET', {'name': 'guake'}),
('GET', {'name': 'nethack'}),
('GET', {'name': 'guake'}),
('GET', {'name': 'nethack'})
],
'release-component-relationships': [
('POST',
{'child': {'name': 'nethack',
'release': {'release_id': 'fedora-26'}},
'parent': {'name': 'guake',
'release': {'release_id': 'fedora-26'}},
'type': 'RPMRequires'})],
'release-components': [
('POST',
{'global_component': 'guake',
'name': 'guake',
'release': 'fedora-26',
'type': 'rpm'}),
('POST',
{'global_component': 'nethack',
'name': 'nethack',
'release': 'fedora-26',
'type': 'rpm'}),
('POST',
{'global_component': 'guake',
'name': 'guake',
'release': 'fedora-26',
'type': 'rpm'}),
('POST',
{'global_component': 'nethack',
'name': 'nethack',
'release': 'fedora-26',
'type': 'rpm'})],
'releases/fedora-26': [('GET', {}), ('GET', {})]
}

self.assertDictEqual(pdc.calls, expected_calls)

0 comments on commit 5864fca

Please sign in to comment.