mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-05-18 22:11:30 +00:00
autopkgtest: Make tests_for_source() arch specific
So far we've only calculated the reverse dependencies on amd64. This breaks when triggering packages which do not exist on some architectures, like bcmwl-kernel-source. It also makes it impossible to e. g. trigger DKMS tests on armhf only for an ARM-only kernel like linux-ti-omap4.
This commit is contained in:
parent
d10763c1f9
commit
76751fff88
@ -150,13 +150,11 @@ class AutoPackageTest(object):
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def tests_for_source(self, src, ver):
|
def tests_for_source(self, src, ver, arch):
|
||||||
'''Iterate over all tests that should be run for given source'''
|
'''Iterate over all tests that should be run for given source and arch'''
|
||||||
|
|
||||||
sources_info = self.britney.sources['unstable']
|
sources_info = self.britney.sources['unstable']
|
||||||
# FIXME: For now assume that amd64 has all binaries that we are
|
binaries_info = self.britney.binaries['unstable'][arch][0]
|
||||||
# interested in for reverse dependency checking
|
|
||||||
binaries_info = self.britney.binaries['unstable']['amd64'][0]
|
|
||||||
|
|
||||||
reported_pkgs = set()
|
reported_pkgs = set()
|
||||||
|
|
||||||
@ -460,8 +458,8 @@ class AutoPackageTest(object):
|
|||||||
self.log_verbose('Requested autopkgtests for %s, exclusions: %s' %
|
self.log_verbose('Requested autopkgtests for %s, exclusions: %s' %
|
||||||
(['%s/%s' % i for i in packages], str(self.excludes)))
|
(['%s/%s' % i for i in packages], str(self.excludes)))
|
||||||
for src, ver in packages:
|
for src, ver in packages:
|
||||||
for (testsrc, testver) in self.tests_for_source(src, ver):
|
for arch in self.britney.options.adt_arches.split():
|
||||||
for arch in self.britney.options.adt_arches.split():
|
for (testsrc, testver) in self.tests_for_source(src, ver, arch):
|
||||||
self.add_test_request(testsrc, testver, arch, src, ver)
|
self.add_test_request(testsrc, testver, arch, src, ver)
|
||||||
|
|
||||||
if self.britney.options.verbose:
|
if self.britney.options.verbose:
|
||||||
@ -573,12 +571,13 @@ class AutoPackageTest(object):
|
|||||||
'''Return test results for triggering package
|
'''Return test results for triggering package
|
||||||
|
|
||||||
Return (passed, src, ver, arch -> ALWAYSFAIL|PASS|FAIL|RUNNING)
|
Return (passed, src, ver, arch -> ALWAYSFAIL|PASS|FAIL|RUNNING)
|
||||||
iterator for all package tests that got triggered by trigsrc/trigver.
|
iterable for all package tests that got triggered by trigsrc/trigver.
|
||||||
'''
|
'''
|
||||||
for testsrc, testver in self.tests_for_source(trigsrc, trigver):
|
# (src, ver) -> arch -> ALWAYSFAIL|PASS|FAIL|RUNNING
|
||||||
passed = True
|
pkg_arch_result = {}
|
||||||
arch_status = {}
|
|
||||||
for arch in self.britney.options.adt_arches.split():
|
for arch in self.britney.options.adt_arches.split():
|
||||||
|
for testsrc, testver in self.tests_for_source(trigsrc, trigver, arch):
|
||||||
try:
|
try:
|
||||||
(_, ver_map, ever_passed) = self.test_results[testsrc][arch]
|
(_, ver_map, ever_passed) = self.test_results[testsrc][arch]
|
||||||
|
|
||||||
@ -597,20 +596,18 @@ class AutoPackageTest(object):
|
|||||||
if (trigsrc, trigver) not in triggers and [trigsrc, trigver] not in triggers:
|
if (trigsrc, trigver) not in triggers and [trigsrc, trigver] not in triggers:
|
||||||
raise KeyError('No result for trigger %s/%s yet' % (trigsrc, trigver))
|
raise KeyError('No result for trigger %s/%s yet' % (trigsrc, trigver))
|
||||||
if status:
|
if status:
|
||||||
arch_status[arch] = 'PASS'
|
result = 'PASS'
|
||||||
else:
|
else:
|
||||||
# test failed, check ever_passed flag for that src/arch
|
# test failed, check ever_passed flag for that src/arch
|
||||||
if ever_passed:
|
if ever_passed:
|
||||||
arch_status[arch] = 'REGRESSION'
|
result = 'REGRESSION'
|
||||||
passed = False
|
|
||||||
else:
|
else:
|
||||||
arch_status[arch] = 'ALWAYSFAIL'
|
result = 'ALWAYSFAIL'
|
||||||
except KeyError:
|
except KeyError:
|
||||||
# no result for testsrc/testver/arch; still running?
|
# no result for testsrc/testver/arch; still running?
|
||||||
try:
|
try:
|
||||||
self.pending_tests[testsrc][testver][arch]
|
self.pending_tests[testsrc][testver][arch]
|
||||||
arch_status[arch] = 'RUNNING'
|
result = 'RUNNING'
|
||||||
passed = False
|
|
||||||
except KeyError:
|
except KeyError:
|
||||||
# ignore if adt or swift results are disabled,
|
# ignore if adt or swift results are disabled,
|
||||||
# otherwise this is unexpected
|
# otherwise this is unexpected
|
||||||
@ -621,8 +618,9 @@ class AutoPackageTest(object):
|
|||||||
(testsrc, testver, arch, trigsrc, trigver))
|
(testsrc, testver, arch, trigsrc, trigver))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# disabled or ignored?
|
pkg_arch_result.setdefault((testsrc, testver), {})[arch] = result
|
||||||
if not arch_status:
|
|
||||||
continue
|
|
||||||
|
|
||||||
yield (passed, testsrc, testver, arch_status)
|
for ((testsrc, testver), arch_results) in pkg_arch_result.items():
|
||||||
|
r = arch_results.values()
|
||||||
|
passed = 'REGRESSION' not in r and 'RUNNING' not in r
|
||||||
|
yield (passed, testsrc, testver, arch_results)
|
||||||
|
@ -388,6 +388,59 @@ lightgreen 1 i386 green 2
|
|||||||
# not expecting any failures to retrieve from swift
|
# not expecting any failures to retrieve from swift
|
||||||
self.assertNotIn('Failure', out, out)
|
self.assertNotIn('Failure', out, out)
|
||||||
|
|
||||||
|
def test_multi_rdepends_arch_specific(self):
|
||||||
|
'''Multiple reverse dependencies with arch specific tests'''
|
||||||
|
|
||||||
|
self.data.add('green64', False, {'Depends': 'libc6 (>= 0.9), libgreen1',
|
||||||
|
'Architecture': 'amd64'},
|
||||||
|
testsuite='autopkgtest')
|
||||||
|
|
||||||
|
# first run requests tests and marks them as pending
|
||||||
|
self.do_test(
|
||||||
|
[('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')],
|
||||||
|
{'green': (False, {'green 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'},
|
||||||
|
'lightgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'},
|
||||||
|
'darkgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'},
|
||||||
|
'green64 1': {'amd64': 'RUNNING'},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
self.assertIn('green64 1 amd64', self.pending_requests)
|
||||||
|
self.assertNotIn('green64 1 i386', self.pending_requests)
|
||||||
|
|
||||||
|
# second run collects the results
|
||||||
|
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 1'),
|
||||||
|
'series/amd64/l/lightgreen/20150101_100101@': (0, 'lightgreen 1'),
|
||||||
|
# version in testing fails
|
||||||
|
'series/i386/g/green/20150101_020000@': (4, 'green 1'),
|
||||||
|
'series/amd64/g/green/20150101_020000@': (4, 'green 1'),
|
||||||
|
# version in unstable succeeds
|
||||||
|
'series/i386/g/green/20150101_100200@': (0, 'green 2'),
|
||||||
|
'series/amd64/g/green/20150101_100201@': (0, 'green 2'),
|
||||||
|
# only amd64 result for green64
|
||||||
|
'series/amd64/g/green64/20150101_100200@': (0, 'green64 1'),
|
||||||
|
}})
|
||||||
|
|
||||||
|
out = self.do_test(
|
||||||
|
[],
|
||||||
|
{'green': (True, {'green 2': {'amd64': 'PASS', 'i386': 'PASS'},
|
||||||
|
'lightgreen 1': {'amd64': 'PASS', 'i386': 'PASS'},
|
||||||
|
'darkgreen 1': {'amd64': 'PASS', 'i386': 'PASS'},
|
||||||
|
'green64 1': {'amd64': 'PASS'},
|
||||||
|
})
|
||||||
|
},
|
||||||
|
{'green': [('old-version', '1'), ('new-version', '2')]}
|
||||||
|
)[0]
|
||||||
|
|
||||||
|
# all tests ran, there should be no more pending ones
|
||||||
|
self.assertEqual(self.pending_requests, '')
|
||||||
|
|
||||||
|
# not expecting any failures to retrieve from swift
|
||||||
|
self.assertNotIn('Failure', out, out)
|
||||||
|
|
||||||
def test_unbuilt(self):
|
def test_unbuilt(self):
|
||||||
'''Unbuilt package should not trigger tests or get considered'''
|
'''Unbuilt package should not trigger tests or get considered'''
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user