From c3cdf957445380e8f106ebbf4041326ca1e7dab4 Mon Sep 17 00:00:00 2001 From: Giulia Naponiello Date: Mar 29 2019 09:39:11 +0000 Subject: Consider `scenario` when selecting latest results When the users asks for a decision to Greenwave specifying as parameter verbose=true, the user will get the list of latest results that will be responsible for the decision. But this API didn't take care of the `scenario` field. This commit changes that. --- diff --git a/conf/policies/fedora.yaml b/conf/policies/fedora.yaml index 2820167..3166454 100644 --- a/conf/policies/fedora.yaml +++ b/conf/policies/fedora.yaml @@ -122,3 +122,12 @@ decision_context: koji_build_push_missing_results subject_type: koji_build rules: - !PassingTestCaseRule {test_case_name: dist.rpmdeplint} +# Policy for latest scenario test +--- !Policy +id: "compose-test-scenario" +product_versions: + - fedora-29 +decision_context: compose_test_scenario +subject_type: compose +rules: + - !PassingTestCaseRule {test_case_name: testcase_name} diff --git a/functional-tests/test_api_v1.py b/functional-tests/test_api_v1.py index b625494..1e43869 100644 --- a/functional-tests/test_api_v1.py +++ b/functional-tests/test_api_v1.py @@ -36,7 +36,7 @@ def test_inspect_policies(requests_session, greenwave_server): assert r.status_code == 200 body = r.json() policies = body['policies'] - assert len(policies) == 14 + assert len(policies) == 15 assert any(p['id'] == 'taskotron_release_critical_tasks' for p in policies) assert any(p['decision_context'] == 'bodhi_update_push_stable' for p in policies) assert any(p['product_versions'] == ['fedora-26'] for p in policies) @@ -1290,3 +1290,31 @@ def test_make_a_decision_with_verbose_flag_all_results_returned( assert res_data['results'] == list(reversed(results)) assert len(res_data['waivers']) == len(expected_waivers) assert res_data['waivers'] == expected_waivers + + +def test_verbose_retrieve_latest_results_scenario(requests_session, greenwave_server, + testdatabuilder): + nvr = testdatabuilder.unique_nvr() + results = [] + for scenario in ['fedora.universal.x86_64.uefi', 'fedora.universal.x86_64.64bit']: + results.append(testdatabuilder.create_compose_result(compose_id=nvr, + testcase_name='testcase_name', outcome='PASSED', scenario=scenario)) + data = { + 'decision_context': 'compose_test_scenario', + 'product_version': 'fedora-29', + 'subject_type': 'compose', + 'subject_identifier': nvr, + 'verbose': True + } + + r = requests_session.post(greenwave_server + 'api/v1.0/decision', + headers={'Content-Type': 'application/json'}, + data=json.dumps(data)) + assert r.status_code == 200 + res_data = r.json() + assert res_data['policies_satisfied'] is True + expected_summary = 'All required tests passed' + assert res_data['summary'] == expected_summary + assert len(res_data['results']) == 2 + for result in res_data['results']: + assert result['outcome'] == 'PASSED' diff --git a/greenwave/resources.py b/greenwave/resources.py index 8248dc1..9dc0bbb 100644 --- a/greenwave/resources.py +++ b/greenwave/resources.py @@ -103,6 +103,8 @@ class ResultsRetriever(object): request_url = self.url + '/results' if latest: request_url += '/latest' + # we need to consider also the scenario + params['_distinct_on'] = 'scenario' response = requests_session.get( request_url, params=params, verify=self.verify, timeout=self.timeout) response.raise_for_status()