diff --git a/autopkgtest.py b/autopkgtest.py index 1d012da..45e9317 100644 --- a/autopkgtest.py +++ b/autopkgtest.py @@ -278,14 +278,19 @@ class AutoPackageTest(object): previous run (i. e. not already in self.pending_tests) or there already is a result for it. ''' - try: - for (tsrc, tver) in self.test_results[src][arch][1][ver][1]: + # check for existing results for both the requested and the current + # unstable version: test runs might see newly built versions which we + # didn't see in britney yet + pkg_arch_results = self.test_results.get(src, {}).get(arch, [None, {}, None])[1] + unstable_ver = self.britney.sources['unstable'][src][VERSION] + for result_ver in [ver, unstable_ver]: + if result_ver not in pkg_arch_results or apt_pkg.version_compare(result_ver, ver) < 0: + continue + for (tsrc, tver) in pkg_arch_results[result_ver][1]: if tsrc == trigsrc and apt_pkg.version_compare(tver, trigver) >= 0: self.log_verbose('There already is a result for %s/%s/%s triggered by %s/%s' % - (src, ver, arch, tsrc, tver)) + (src, result_ver, arch, tsrc, tver)) return - except KeyError: - pass if (trigsrc, trigver) in self.pending_tests.get(src, {}).get( ver, {}).get(arch, set()): diff --git a/tests/test_autopkgtest.py b/tests/test_autopkgtest.py index dbc1bda..7f9ef71 100644 --- a/tests/test_autopkgtest.py +++ b/tests/test_autopkgtest.py @@ -509,6 +509,62 @@ lightgreen 1 i386 green 2 self.assertEqual(self.amqp_requests, set()) self.assertEqual(self.pending_requests, '') + # next run should not trigger any new requests + self.do_test([], NOT_CONSIDERED, []) + self.assertEqual(self.amqp_requests, set()) + self.assertEqual(self.pending_requests, '') + + def test_rdepends_unbuilt_new_version_fail(self): + '''Unbuilt reverse dependency gets failure for newer version''' + + # add unbuilt lightgreen; should request tests against the old version + self.data.add_src('lightgreen', True, {'Version': '2', 'Testsuite': 'autopkgtest'}) + self.do_test( + [('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')], + NOT_CONSIDERED, + [r'\bgreen\b.*>1</a> to .*>2<', + r'\blightgreen\b.*>1</a> to .*>2<', + r'autopkgtest for green 2: .*amd64.*in progress.*i386.*in progress', + r'autopkgtest for darkgreen 1: .*amd64.*in progress.*i386.*in progress', + r'autopkgtest for lightgreen 1 \(2 is unbuilt/uninstallable\): .*amd64.*in progress.*i386.*in progress', + r'lightgreen has no up-to-date binaries on any arch'], + ['Valid candidate']) + self.assertEqual( + self.amqp_requests, + set(['debci-series-i386:green', 'debci-series-amd64:green', + 'debci-series-i386:lightgreen', 'debci-series-amd64:lightgreen', + 'debci-series-i386:darkgreen', 'debci-series-amd64:darkgreen'])) + + # we only get a result for lightgreen 2, not for the requested 1 + self.swift.set_results({'autopkgtest-series': { + 'series/i386/d/darkgreen/20150101_100000@': (0, 'darkgreen 1'), + 'series/amd64/d/darkgreen/20150101_100001@': (0, 'darkgreen 1'), + 'series/i386/l/lightgreen/20150101_100100@': (0, 'lightgreen 0.5'), + 'series/amd64/l/lightgreen/20150101_100100@': (0, 'lightgreen 0.5'), + 'series/i386/l/lightgreen/20150101_100200@': (4, 'lightgreen 2'), + 'series/amd64/l/lightgreen/20150101_100200@': (4, 'lightgreen 2'), + 'series/i386/g/green/20150101_100200@': (0, 'green 2'), + 'series/amd64/g/green/20150101_100201@': (0, 'green 2'), + }}) + self.do_test( + [], + NOT_CONSIDERED, + [r'\bgreen\b.*>1</a> to .*>2<', + r'\blightgreen\b.*>1</a> to .*>2<', + r'autopkgtest for green 2: .*amd64.*Pass.*i386.*Pass', + r'autopkgtest for darkgreen 1: .*amd64.*Pass.*i386.*Pass', + r'autopkgtest for lightgreen 2 \(2 is unbuilt/uninstallable\): .*amd64.*Regression.*i386.*Regression', + r'lightgreen has no up-to-date binaries on any arch'], + ['Valid candidate']) + + self.assertEqual(self.amqp_requests, set()) + self.assertEqual(self.pending_requests, '') + + # next run should not trigger any new requests + self.do_test([], NOT_CONSIDERED, [], ['Valid candidate']) + self.assertEqual(self.pending_requests, '') + self.assertEqual(self.amqp_requests, set()) + def test_hint_force_badtest(self): '''force-badtest hint'''