From 2067ce544a6d9b5d1aa1f49023bd668ef3c817ef Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: Jan 28 2018 10:04:46 +0000 Subject: Add 'scenario' to identifiers in get_prev_result As @ralph pointed out, the get_prev_result logic should also use 'scenario' as one of the identifiers when deciding if a result is 'the same as' a previous one; this is explicitly what the key is intended for, and it is necessary for openQA tests, as they may have the same testcase name, arch, item and type, but be for a different firmware type, for instance. This may be preventing us from emitting fedmsgs for some openQA results. Signed-off-by: Adam Williamson --- diff --git a/resultsdb/controllers/api_v2.py b/resultsdb/controllers/api_v2.py index 9eab886..9596494 100644 --- a/resultsdb/controllers/api_v2.py +++ b/resultsdb/controllers/api_v2.py @@ -678,14 +678,14 @@ def create_result(): def get_prev_result(result): """ - Find previous result with the same testcase, item, type, and arch. - Return None if no result is found. + Find previous result with the same testcase, item, type, arch and + scenario. Return None if no result is found. """ q = db.session.query(Result).filter(Result.id != result.id) q = q.filter_by(testcase_name=result.testcase_name) for result_data in result.data: - if result_data.key in ['item', 'type', 'arch']: + if result_data.key in ['item', 'type', 'arch', 'scenario']: alias = db.aliased(ResultData) q = q.join(alias).filter( db.and_(alias.key == result_data.key, alias.value == result_data.value)) diff --git a/testing/functest_create_fedmsg.py b/testing/functest_create_fedmsg.py index 6342f39..4dfb5a5 100644 --- a/testing/functest_create_fedmsg.py +++ b/testing/functest_create_fedmsg.py @@ -88,10 +88,12 @@ class TestFuncCreateFedmsg(): self.ref_result_item = 'perl-Specio-0.25-1.fc26' self.ref_result_type = 'koji_build' self.ref_result_arch = 'x86_64' + self.ref_result_scenario = 'x86_64.efi' self.ref_result_data = { 'item': self.ref_result_item, 'type': self.ref_result_type, 'arch': self.ref_result_arch, + 'scenario': self.ref_result_scenario, 'moo': ['boo', 'woof'], } self.ref_result_ref_url = 'http://example.com/testing.result' @@ -144,6 +146,8 @@ class TestFuncCreateFedmsg(): assert result_data.value == self.ref_result_type if result_data.key == 'arch': assert result_data.value == self.ref_result_arch + if result_data.key == 'scenario': + assert result_data.value == self.ref_result_scenario self.helper_create_result() prev_result = apiv2.get_prev_result(self.ref_result_obj) @@ -158,6 +162,8 @@ class TestFuncCreateFedmsg(): assert result_data.value == self.ref_result_type if result_data.key == 'arch': assert result_data.value == self.ref_result_arch + if result_data.key == 'scenario': + assert result_data.value == self.ref_result_scenario ref_outcome = 'FAILED' if self.ref_result_outcome == ref_outcome: @@ -175,6 +181,8 @@ class TestFuncCreateFedmsg(): assert result_data.value == self.ref_result_type if result_data.key == 'arch': assert result_data.value == self.ref_result_arch + if result_data.key == 'scenario': + assert result_data.value == self.ref_result_scenario def test_get_prev_result_different_item(self): data = copy.deepcopy(self.ref_result_data) @@ -200,6 +208,14 @@ class TestFuncCreateFedmsg(): prev_result = apiv2.get_prev_result(self.ref_result_obj) assert prev_result is None + def test_get_prev_result_different_scenario(self): + data = copy.deepcopy(self.ref_result_data) + data['scenario'] = data['scenario'] + '.fake' + self.helper_create_result(data=data) + + prev_result = apiv2.get_prev_result(self.ref_result_obj) + assert prev_result is None + def test_get_prev_result_different_testcase_name(self): self.helper_create_result(testcase={'name': self.ref_testcase_name + '.fake'})