mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-02-13 15:37:02 +00:00
Add direct log link to excuses
If we have a result, directly link to the log file on swift in excuses.html. The architecture name still leads to the package history as before. If result is still pending, link to the "running tests" page instead.
This commit is contained in:
parent
123eb43320
commit
a4f3abacad
@ -78,6 +78,10 @@ class AutoPackageTest(object):
|
||||
self.test_results = {}
|
||||
self.results_cache_file = os.path.join(self.test_state_dir, 'results.cache')
|
||||
|
||||
self.swift_container = 'autopkgtest-' + self.series
|
||||
if self.britney.options.adt_ppas:
|
||||
self.swift_container += '-' + self.britney.options.adt_ppas[-1].replace('/', '-')
|
||||
|
||||
# read the cached results that we collected so far
|
||||
if os.path.exists(self.results_cache_file):
|
||||
with open(self.results_cache_file) as f:
|
||||
@ -321,10 +325,7 @@ class AutoPackageTest(object):
|
||||
query['marker'] = query['prefix'] + latest_run_id
|
||||
|
||||
# request new results from swift
|
||||
container = 'autopkgtest-' + self.series
|
||||
if self.britney.options.adt_ppas:
|
||||
container += '-' + self.britney.options.adt_ppas[-1].replace('/', '-')
|
||||
url = os.path.join(swift_url, container)
|
||||
url = os.path.join(swift_url, self.swift_container)
|
||||
url += '?' + urllib.parse.urlencode(query)
|
||||
try:
|
||||
f = urlopen(url)
|
||||
@ -344,7 +345,7 @@ class AutoPackageTest(object):
|
||||
|
||||
for p in result_paths:
|
||||
self.fetch_one_result(
|
||||
os.path.join(swift_url, container, p, 'result.tar'), src, arch)
|
||||
os.path.join(swift_url, self.swift_container, p, 'result.tar'), src, arch)
|
||||
|
||||
fetch_swift_results._done = set()
|
||||
|
||||
@ -542,7 +543,8 @@ class AutoPackageTest(object):
|
||||
def results(self, trigsrc, trigver):
|
||||
'''Return test results for triggering package
|
||||
|
||||
Return (passed, src, ver, arch -> ALWAYSFAIL|PASS|REGRESSION|RUNNING|RUNNING-ALWAYSFAIL)
|
||||
Return (passed, src, ver, arch ->
|
||||
(ALWAYSFAIL|PASS|REGRESSION|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
|
||||
@ -552,12 +554,14 @@ class AutoPackageTest(object):
|
||||
for arch in self.britney.options.adt_arches:
|
||||
for testsrc, testver in self.tests_for_source(trigsrc, trigver, arch):
|
||||
ever_passed = self.check_ever_passed(testsrc, arch)
|
||||
url = None
|
||||
|
||||
# Do we have a result already? (possibly for an older or newer
|
||||
# version, that's okay)
|
||||
try:
|
||||
r = self.test_results[trigger][testsrc][arch]
|
||||
testver = r[1]
|
||||
run_id = r[2]
|
||||
if r[0]:
|
||||
result = 'PASS'
|
||||
else:
|
||||
@ -570,10 +574,19 @@ class AutoPackageTest(object):
|
||||
ever_passed = False
|
||||
|
||||
result = ever_passed and 'REGRESSION' or 'ALWAYSFAIL'
|
||||
url = os.path.join(self.britney.options.adt_swift_url,
|
||||
self.swift_container,
|
||||
self.series,
|
||||
arch,
|
||||
srchash(testsrc),
|
||||
testsrc,
|
||||
run_id,
|
||||
'log.gz')
|
||||
except KeyError:
|
||||
# no result for testsrc/arch; still running?
|
||||
if arch in self.pending_tests.get(trigger, {}).get(testsrc, []):
|
||||
result = ever_passed and 'RUNNING' or 'RUNNING-ALWAYSFAIL'
|
||||
url = 'http://autopkgtest.ubuntu.com/running.shtml'
|
||||
else:
|
||||
# ignore if adt or swift results are disabled,
|
||||
# otherwise this is unexpected
|
||||
@ -582,9 +595,9 @@ class AutoPackageTest(object):
|
||||
raise RuntimeError('Result for %s/%s/%s (triggered by %s) is neither known nor pending!' %
|
||||
(testsrc, testver, arch, trigger))
|
||||
|
||||
pkg_arch_result.setdefault((testsrc, testver), {})[arch] = result
|
||||
pkg_arch_result.setdefault((testsrc, testver), {})[arch] = (result, url)
|
||||
|
||||
for ((testsrc, testver), arch_results) in pkg_arch_result.items():
|
||||
r = arch_results.values()
|
||||
r = [v[0] for v in arch_results.values()]
|
||||
passed = 'REGRESSION' not in r and 'RUNNING' not in r
|
||||
yield (passed, testsrc, testver, arch_results)
|
||||
|
@ -1962,11 +1962,11 @@ class Britney(object):
|
||||
adtpass = True
|
||||
for passed, adtsrc, adtver, arch_status in autopkgtest.results(
|
||||
e.name, e.ver[1]):
|
||||
for arch in arch_status:
|
||||
url = cloud_url % {'h': srchash(adtsrc), 's': adtsrc,
|
||||
'r': self.options.series, 'a': arch}
|
||||
for arch, (status, log_url) in arch_status.items():
|
||||
history_url = cloud_url % {'h': srchash(adtsrc), 's': adtsrc,
|
||||
'r': self.options.series, 'a': arch}
|
||||
e.addtest('autopkgtest', '%s %s' % (adtsrc, adtver),
|
||||
arch, arch_status[arch], url)
|
||||
arch, status, log_url, history_url)
|
||||
|
||||
# hints can override failures
|
||||
if not passed:
|
||||
|
12
excuse.py
12
excuse.py
@ -73,7 +73,7 @@ class Excuse(object):
|
||||
self.reason = {}
|
||||
self.htmlline = []
|
||||
# type (e. g. "autopkgtest") -> package (e. g. "foo 2-1") -> arch ->
|
||||
# ['PASS'|'ALWAYSFAIL'|'REGRESSION'|'RUNNING'|'RUNNING-ALWAYSFAIL', url]
|
||||
# ['PASS'|'ALWAYSFAIL'|'REGRESSION'|'RUNNING'|'RUNNING-ALWAYSFAIL', log_url, history_url]
|
||||
self.tests = {}
|
||||
|
||||
def sortkey(self):
|
||||
@ -182,9 +182,9 @@ class Excuse(object):
|
||||
for pkg in sorted(self.tests[testtype]):
|
||||
archmsg = []
|
||||
for arch in sorted(self.tests[testtype][pkg]):
|
||||
status, url = self.tests[testtype][pkg][arch]
|
||||
archmsg.append('<a href="%s">%s: %s</a>' %
|
||||
(url, arch, EXCUSES_LABELS[status]))
|
||||
status, log_url, history_url = self.tests[testtype][pkg][arch]
|
||||
archmsg.append('<a href="%s">%s</a>: <a href="%s">%s</a>' %
|
||||
(history_url or log_url, arch, log_url, EXCUSES_LABELS[status]))
|
||||
res = res + ("<li>%s for %s: %s</li>\n" % (testtype, pkg, ', '.join(archmsg)))
|
||||
|
||||
for x in self.htmlline:
|
||||
@ -215,9 +215,9 @@ class Excuse(object):
|
||||
""""adding reason"""
|
||||
self.reason[reason] = 1
|
||||
|
||||
def addtest(self, type_, package, arch, state, url):
|
||||
def addtest(self, type_, package, arch, state, log_url, history_url=None):
|
||||
"""Add test result"""
|
||||
self.tests.setdefault(type_, {}).setdefault(package, {})[arch] = [state, url]
|
||||
self.tests.setdefault(type_, {}).setdefault(package, {})[arch] = [state, log_url, history_url]
|
||||
|
||||
# TODO merge with html()
|
||||
def text(self):
|
||||
|
@ -188,8 +188,10 @@ class T(TestBase):
|
||||
self.assertEqual(exc['darkgreen']['tests'], {'autopkgtest':
|
||||
{'darkgreen 2': {
|
||||
'amd64': ['RUNNING-ALWAYSFAIL',
|
||||
'http://autopkgtest.ubuntu.com/running.shtml',
|
||||
'http://autopkgtest.ubuntu.com/packages/d/darkgreen/series/amd64'],
|
||||
'i386': ['RUNNING-ALWAYSFAIL',
|
||||
'http://autopkgtest.ubuntu.com/running.shtml',
|
||||
'http://autopkgtest.ubuntu.com/packages/d/darkgreen/series/i386']}}})
|
||||
|
||||
self.assertEqual(self.pending_requests,
|
||||
|
Loading…
x
Reference in New Issue
Block a user