From c12d92efa41a894532eb5bde8a10b6619d96bcce Mon Sep 17 00:00:00 2001 From: Iain Lane Date: Thu, 24 Jan 2019 13:08:03 +0000 Subject: [PATCH] autopkgtest: Handle 'blacklisted' version The apt version comparison sorts 'blacklisted' greater than most version numbers, which means that we accidentally apply force hints for version 'blacklisted' to all uploads. Since this is the only case of a hacked version number, let's special case it so that 'blacklisted' hints only match packages with 'blacklisted' version. --- britney2/policies/autopkgtest.py | 4 +++- tests/test_autopkgtest.py | 24 ++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) 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)'''