diff --git a/britney2/policies/autopkgtest.py b/britney2/policies/autopkgtest.py index 729991c..556dda7 100644 --- a/britney2/policies/autopkgtest.py +++ b/britney2/policies/autopkgtest.py @@ -744,7 +744,9 @@ class AutopkgtestPolicy(BasePolicy): self.log('Checking hints for %s/%s/%s: %s' % (src, ver, arch, [str(h) for h in hints])) for hint in hints: if [mi for mi in hint.packages if mi.architecture in ['source', arch] and - (mi.version == 'all' or apt_pkg.version_compare(ver, mi.version) <= 0)]: + (mi.version == 'all' or + (mi.version == 'blacklisted' and ver == 'blacklisted') or + (mi.version != 'blacklisted' and apt_pkg.version_compare(ver, mi.version) <= 0))]: return True return False diff --git a/tests/test_autopkgtest.py b/tests/test_autopkgtest.py index 2e48301..3fbba9d 100755 --- a/tests/test_autopkgtest.py +++ b/tests/test_autopkgtest.py @@ -1063,8 +1063,8 @@ class T(TestBase): 'brown': ['i386']}}) def test_blacklisted_force(self): - '''blacklisted packages return exit code 99 and version all, check they - are handled correctly''' + '''blacklisted packages return exit code 99 and version blacklisted, + check they can be forced over''' self.swift.set_results({'autopkgtest-series': { 'series/amd64/b/black/20150101_100000@': (0, 'black 1', tr('black/1')), @@ -1084,6 +1084,26 @@ class T(TestBase): self.assertEqual(len(self.amqp_requests), 0) + def test_blacklisted_force_mismatch(self): + '''forcing a blacklisted package doesn't mean you force other versions''' + + self.swift.set_results({'autopkgtest-series': { + 'series/amd64/b/black/20150101_100000@': (0, 'black 1', tr('black/1')), + 'series/i386/b/black/20150101_100001@': (0, 'black 1', tr('black/1')), + 'series/amd64/b/black/20150102_100000@': (4, 'black 2', tr('black/2')), + 'series/i386/b/black/20150102_100001@': (4, 'black 2', tr('black/2')) + }}) + + self.create_hint('pitti', 'force-badtest black/amd64/blacklisted') + + self.do_test( + [('black', {'Version': '2'}, 'autopkgtest')], + {'black': (False, {'black/2': {'amd64': 'REGRESSION'}}) + }, + {'black': [('old-version', '1'), ('new-version', '2')]}) + + self.assertEqual(len(self.amqp_requests), 0) + def test_binary_from_new_source_package_pass(self): '''building an existing binary for a new source package (pass)'''