From fc4ea9d15925842ecaa39905917019479e7406d3 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Fri, 4 Dec 2015 17:45:06 +0100 Subject: [PATCH] Process force-skiptest hint before requesting tests If a package has a force-skiptest hint, don't request autopkgtests for it. --- britney.py | 50 +++++++++++++++++++++++---------------- tests/test_autopkgtest.py | 9 +++---- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/britney.py b/britney.py index e19b16a..4cd35b9 100755 --- a/britney.py +++ b/britney.py @@ -1929,10 +1929,33 @@ class Britney(object): if e.ver[1] == "-": continue autopkgtest_excuses.append(e) - autopkgtest_packages.append((e.name, e.ver[1])) + + # don't request tests if we have a force-skiptest hint + hints = self.hints.search('force-skiptest', package=e.name) + hints.extend(self.hints.search('force', package=e.name)) + forces = [ + x for x in hints + if same_source(e.ver[1], x.version) ] + if not forces: + autopkgtest_packages.append((e.name, e.ver[1])) autopkgtest.request(autopkgtest_packages, autopkgtest_excludes) cloud_url = "http://autopkgtest.ubuntu.com/packages/%(h)s/%(s)s/%(r)s/%(a)s" for e in autopkgtest_excuses: + # do we skip autopkgtests altogether? + hints = self.hints.search('force-skiptest', package=e.name) + hints.extend(self.hints.search('force', package=e.name)) + forces = [ + x for x in hints + if same_source(e.ver[1], x.version) ] + if forces: + e.force() + e.addreason('skiptest') + e.addhtml( + "Should wait for tests relating to %s %s, but " + "forced by %s" % + (e.name, e.ver[1], forces[0].user)) + continue + adtpass = True for passed, adtsrc, adtver, arch_status in autopkgtest.results( e.name, e.ver[1]): @@ -1962,25 +1985,12 @@ class Britney(object): if not passed: adtpass = False - if not adtpass and e.is_valid: - hints = self.hints.search('force-skiptest', package=e.name) - hints.extend(self.hints.search('force', package=e.name)) - forces = [ - x for x in hints - if same_source(e.ver[1], x.version) ] - if forces: - e.force() - e.addreason('skiptest') - e.addhtml( - "Should wait for tests relating to %s %s, but " - "forced by %s" % - (e.name, e.ver[1], forces[0].user)) - else: - upgrade_me.remove(e.name) - unconsidered.append(e.name) - e.addhtml("Not considered") - e.addreason("autopkgtest") - e.is_valid = False + if not adtpass: + upgrade_me.remove(e.name) + unconsidered.append(e.name) + e.addhtml("Not considered") + e.addreason("autopkgtest") + e.is_valid = False if (getattr(self.options, "boottest_enable", "no") == "yes" and self.options.series): diff --git a/tests/test_autopkgtest.py b/tests/test_autopkgtest.py index d7c74fd..619d591 100755 --- a/tests/test_autopkgtest.py +++ b/tests/test_autopkgtest.py @@ -1255,16 +1255,17 @@ class TestAutoPkgTest(TestBase): self.do_test( [('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')], - {'green': (True, {'green 2': {'amd64': 'RUNNING-ALWAYSFAIL', 'i386': 'RUNNING'}, - 'lightgreen 1': {'amd64': 'RUNNING-ALWAYSFAIL', 'i386': 'RUNNING-ALWAYSFAIL'}, - 'darkgreen 1': {'amd64': 'RUNNING-ALWAYSFAIL', 'i386': 'RUNNING-ALWAYSFAIL'}, - }), + {'green': (True, {}), }, {'green': [('old-version', '1'), ('new-version', '2'), ('forced-reason', 'skiptest'), ('excuses', 'Should wait for tests relating to green 2, but forced by pitti')] }) + # should not issue test requests as it's hinted anyway + self.assertEqual(self.amqp_requests, set()) + self.assertEqual(self.pending_requests, {}) + def test_hint_force_skiptest_different_version(self): '''force-skiptest hint with non-matching version'''