diff --git a/autopkgtest.py b/autopkgtest.py index dc6a4ea..7317f35 100644 --- a/autopkgtest.py +++ b/autopkgtest.py @@ -29,6 +29,8 @@ from urllib.request import urlopen import apt_pkg import amqplib.client_0_8 as amqp +from britney_util import same_source + from consts import (AUTOPKGTEST, BINARIES, DEPENDS, RDEPENDS, SOURCE, VERSION) @@ -560,7 +562,7 @@ class AutoPackageTest(object): '''Return test results for triggering package Return (passed, src, ver, arch -> - (ALWAYSFAIL|PASS|REGRESSION|RUNNING|RUNNING-ALWAYSFAIL, log_url)) + (ALWAYSFAIL|PASS|REGRESSION|IGNORE-FAIL|RUNNING|RUNNING-ALWAYSFAIL, log_url)) iterable for all package tests that got triggered by trigsrc/trigver. ''' # (src, ver) -> arch -> ALWAYSFAIL|PASS|REGRESSION|RUNNING|RUNNING-ALWAYSFAIL @@ -589,7 +591,19 @@ class AutoPackageTest(object): if trigsrc.startswith('linux-meta') or trigsrc == 'linux': ever_passed = False - result = ever_passed and 'REGRESSION' or 'ALWAYSFAIL' + if ever_passed: + # do we have a force{,-badtest} hint? + hints = self.britney.hints.search('force-badtest', package=testsrc) + hints.extend(self.britney.hints.search('force', package=testsrc)) + for h in hints: + if same_source(h.version, testver): + result = 'IGNORE-FAIL' + break + else: + result = 'REGRESSION' + else: + result = 'ALWAYSFAIL' + url = os.path.join(self.britney.options.adt_swift_url, self.swift_container, self.series, diff --git a/britney.py b/britney.py index 9a2806e..4b41b0c 100755 --- a/britney.py +++ b/britney.py @@ -1968,24 +1968,6 @@ class Britney(object): [('ppa', p) for p in self.options.adt_ppas]) e.addtest('autopkgtest', '%s %s' % (adtsrc, adtver), arch, status, log_url, **kwargs) - - # hints can override failures - if not passed: - hints = self.hints.search( - 'force-badtest', package=adtsrc) - hints.extend( - self.hints.search('force', package=adtsrc)) - forces = [ - x for x in hints - if same_source(adtver, x.version) ] - if forces: - e.force() - e.addreason('badtest %s %s' % (adtsrc, adtver)) - e.addhtml( - "Should wait for %s %s test, but forced by " - "%s" % (adtsrc, adtver, forces[0].user)) - passed = True - if not passed: adtpass = False diff --git a/excuse.py b/excuse.py index bcb1e26..1bdf274 100644 --- a/excuse.py +++ b/excuse.py @@ -21,6 +21,7 @@ EXCUSES_LABELS = { "FAIL": '<span style="background:#ff6666">Failed</span>', "ALWAYSFAIL": '<span style="background:#e5c545">Always failed</span>', "REGRESSION": '<span style="background:#ff6666">Regression</span>', + "IGNORE-FAIL": '<span style="background:#e5c545">Ignored failure</span>', "RUNNING": '<span style="background:#99ddff">Test in progress</span>', "RUNNING-ALWAYSFAIL": '<span style="background:#99ddff">Test in progress (always failed)</span>', } diff --git a/tests/test_autopkgtest.py b/tests/test_autopkgtest.py index 32e2085..94b649f 100755 --- a/tests/test_autopkgtest.py +++ b/tests/test_autopkgtest.py @@ -1255,13 +1255,11 @@ class T(TestBase): self.do_test( [('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')], {'green': (True, {'green 2': {'amd64': 'PASS', 'i386': 'PASS'}, - 'lightgreen 1': {'amd64': 'REGRESSION', 'i386': 'REGRESSION'}, + 'lightgreen 1': {'amd64': 'IGNORE-FAIL', 'i386': 'IGNORE-FAIL'}, 'darkgreen 1': {'amd64': 'PASS', 'i386': 'PASS'}, }), }, - {'green': [('old-version', '1'), ('new-version', '2'), - ('forced-reason', 'badtest lightgreen 1'), - ('excuses', 'Should wait for lightgreen 1 test, but forced by pitti')] + {'green': [('old-version', '1'), ('new-version', '2')] }) def test_hint_force_badtest_different_version(self):