From 964e0cdacc6aac09561351b4f9290b0a16fb1690 Mon Sep 17 00:00:00 2001 From: Giulia Naponiello Date: Nov 21 2018 12:57:51 +0000 Subject: Accept a new subject_type redhat-module We are planning to gate redhat modules, for that reason Greenwave needs to accept a new subject_type == redhat-module --- diff --git a/greenwave/api_v1.py b/greenwave/api_v1.py index 4aaae81..cfb8493 100644 --- a/greenwave/api_v1.py +++ b/greenwave/api_v1.py @@ -23,7 +23,7 @@ def _decision_subject(subject): subject_identifier = subject.get('item') if subject_identifier: - if subject_type in ('bodhi_update', 'component-version', 'koji_build'): + if subject_type in ('bodhi_update', 'component-version', 'koji_build', 'redhat-module'): return (subject_type, subject_identifier) if subject_type == 'brew-build': @@ -70,14 +70,10 @@ def subject_type_identifier_to_list(subject_type, subject_identifier): Inverse of the above function. This is for backwards compatibility in emitted messages. """ - if subject_type == 'bodhi_update': - return [{'type': 'bodhi_update', 'item': subject_identifier}] - if subject_type == 'koji_build': - return [{'type': 'koji_build', 'item': subject_identifier}] + if subject_type in ['bodhi_update', 'koji_build', 'component-version', 'redhat-module']: + return [{'type': subject_type, 'item': subject_identifier}] if subject_type == 'compose': return [{'productmd.compose.id': subject_identifier}] - if subject_type == 'component-version': - return [{'type': 'component-version', 'item': subject_identifier}] raise BadRequest('Unrecognised subject type: %s' % subject_type) diff --git a/greenwave/policies.py b/greenwave/policies.py index 65a6abf..37ad011 100644 --- a/greenwave/policies.py +++ b/greenwave/policies.py @@ -45,14 +45,10 @@ def subject_type_identifier_to_item(subject_type, subject_identifier): Greenwave < 0.8 included an "item" key in the "unsatisfied_requirements". This returns a suitable value for that key, for backwards compatibility. """ - if subject_type == 'bodhi_update': - return {'type': 'bodhi_update', 'item': subject_identifier} - elif subject_type == 'koji_build': - return {'type': 'koji_build', 'item': subject_identifier} + if subject_type in ['bodhi_update', 'koji_build', 'component-version', 'redhat-module']: + return {'type': subject_type, 'item': subject_identifier} elif subject_type == 'compose': return {'productmd.compose.id': subject_identifier} - elif subject_type == 'component-version': - return {'type': 'component-version', 'item': subject_identifier} else: raise RuntimeError('Unrecognised subject type: %s' % subject_type) @@ -554,7 +550,8 @@ class Policy(SafeYAMLObject): 'decision_context': SafeYAMLString(), # TODO: Handle brew-build value better. 'subject_type': SafeYAMLChoice( - 'koji_build', 'bodhi_update', 'compose', 'brew-build', 'component-version'), + 'koji_build', 'bodhi_update', 'compose', 'brew-build', 'component-version', + 'redhat-module'), 'rules': SafeYAMLList(Rule), 'blacklist': SafeYAMLList(str, optional=True), 'relevance_key': SafeYAMLString(optional=True), diff --git a/greenwave/resources.py b/greenwave/resources.py index 37879d9..621bb44 100644 --- a/greenwave/resources.py +++ b/greenwave/resources.py @@ -125,10 +125,11 @@ class ResultsRetriever(object): params['type'] = 'compose' params['item'] = subject_identifier results.extend(self._make_request(params=params)) - elif subject_type == 'component-version': + elif subject_type == 'component-version' or subject_type == 'redhat-module': params['type'] = subject_type params['item'] = subject_identifier results = self._make_request(params=params) + else: raise RuntimeError('Unhandled subject type %r' % subject_type) diff --git a/greenwave/tests/test_policies.py b/greenwave/tests/test_policies.py index 64cad42..6e4c6ad 100644 --- a/greenwave/tests/test_policies.py +++ b/greenwave/tests/test_policies.py @@ -800,3 +800,27 @@ rules: decision = policy.check('fedora-29', nv, results, waivers) assert len(decision) == 1 assert isinstance(decision[0], RuleSatisfied) + + +def test_policy_with_subject_type_redhat_module(tmpdir): + nsvc = 'httpd:2.4:20181018085700:9edba152' + p = tmpdir.join('fedora.yaml') + p.write(""" +--- !Policy +id: "test-new-subject-type" +product_versions: +- fedora-29 +decision_context: decision_context_test_redhat_module +subject_type: redhat-module +blacklist: [] +rules: + - !PassingTestCaseRule {test_case_name: test_for_redhat_module_type} + """) + policies = load_policies(tmpdir.strpath) + policy = policies[0] + results = DummyResultsRetriever(nsvc, 'test_for_redhat_module_type', 'PASSED', + 'redhat-module') + waivers = [] + decision = policy.check('fedora-29', nsvc, results, waivers) + assert len(decision) == 1 + assert isinstance(decision[0], RuleSatisfied)