Merge lp:~laney/britney/autopkgtest-no-delay-if-never-passed into lp:~ubuntu-release/britney/britney2-ubuntu
- autopkgtest-no-delay-if-never-passed
- Merge into britney2-ubuntu
Status: | Merged | ||||
---|---|---|---|---|---|
Approved by: | Martin Pitt | ||||
Approved revision: | 532 | ||||
Merged at revision: | 532 | ||||
Proposed branch: | lp:~laney/britney/autopkgtest-no-delay-if-never-passed | ||||
Merge into: | lp:~ubuntu-release/britney/britney2-ubuntu | ||||
Diff against target: |
456 lines (+160/-52) 3 files modified
autopkgtest.py (+9/-3) excuse.py (+2/-1) tests/test_autopkgtest.py (+149/-48) |
||||
To merge this branch: | bzr merge lp:~laney/britney/autopkgtest-no-delay-if-never-passed | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Martin Pitt (community) | Approve | ||
Ubuntu Package Archive Administrators | Pending | ||
Review via email: mp+277832@code.launchpad.net |
This proposal supersedes a proposal from 2015-11-17.
Commit message
Description of the change
[ resubmitting since git-remote-bzr seems to have broken the diff ]
This is an attempt at fixing bug #1501699.
With this branch, we now take into account the "ever_passed" flag to decide if a test run has passed or not. It has passed if the test is ALWAYSFAILED or RUNNING but has never passed, for all arches.
Many testcases relied on the previous behaviour, so I inserted some 'passing' test results to cause the packages to be held.
There are some delicacies around kernel triggering that I don't fully understand (this is my first venture into britney/
Iain Lane (laney) : Posted in a previous version of this proposal | # |
Martin Pitt (pitti) wrote : Posted in a previous version of this proposal | # |
Iain Lane (laney) wrote : | # |
OK, I think I have fixed most of the comments from last time - please re-review. Sorry if I still misunderstood something. I thought that adding a new status would be a huge diff but it doesn't seem that bad in the end.
There's a comment/question inline.
Martin Pitt (pitti) wrote : | # |
Thanks, this looks good now! I have one nitpick, but as I'd like to clean up this part anyway I'll leave it to you if you want to change it or not. Please push (to keep the individual commits, these are very useful now -- i. e. don't merge).
Preview Diff
1 | === modified file 'autopkgtest.py' |
2 | --- autopkgtest.py 2015-11-17 08:15:31 +0000 |
3 | +++ autopkgtest.py 2015-11-18 14:38:44 +0000 |
4 | @@ -653,10 +653,10 @@ |
5 | def results(self, trigsrc, trigver): |
6 | '''Return test results for triggering package |
7 | |
8 | - Return (passed, src, ver, arch -> ALWAYSFAIL|PASS|FAIL|RUNNING) |
9 | + Return (passed, src, ver, arch -> ALWAYSFAIL|PASS|FAIL|RUNNING|RUNNING-NEVERPASSED) |
10 | iterable for all package tests that got triggered by trigsrc/trigver. |
11 | ''' |
12 | - # (src, ver) -> arch -> ALWAYSFAIL|PASS|FAIL|RUNNING |
13 | + # (src, ver) -> arch -> ALWAYSFAIL|PASS|FAIL|RUNNING|RUNNING-NEVERPASSED |
14 | pkg_arch_result = {} |
15 | trigger = trigsrc + '/' + trigver |
16 | |
17 | @@ -702,7 +702,13 @@ |
18 | # no result for testsrc/testver/arch; still running? |
19 | try: |
20 | self.pending_tests[testsrc][testver][arch] |
21 | - result = 'RUNNING' |
22 | + # if we can't find a result, assume that it has never passed (i.e. this is the first run) |
23 | + (_, _, ever_passed) = self.test_results.get(testsrc, {}).get(arch, (None, None, False)) |
24 | + |
25 | + if ever_passed: |
26 | + result = 'RUNNING' |
27 | + else: |
28 | + result = 'RUNNING-NEVERPASSED' |
29 | except KeyError: |
30 | # ignore if adt or swift results are disabled, |
31 | # otherwise this is unexpected |
32 | |
33 | === modified file 'excuse.py' |
34 | --- excuse.py 2015-08-25 10:21:51 +0000 |
35 | +++ excuse.py 2015-11-18 14:38:44 +0000 |
36 | @@ -22,6 +22,7 @@ |
37 | "ALWAYSFAIL": '<span style="background:#e5c545">Always failed</span>', |
38 | "REGRESSION": '<span style="background:#ff6666">Regression</span>', |
39 | "RUNNING": '<span style="background:#99ddff">Test in progress</span>', |
40 | + "RUNNING-NEVERPASSED": '<span style="background:#99ddff">Test in progress (never passed)</span>', |
41 | } |
42 | |
43 | |
44 | @@ -72,7 +73,7 @@ |
45 | self.reason = {} |
46 | self.htmlline = [] |
47 | # type (e. g. "autopkgtest") -> package (e. g. "foo 2-1") -> arch -> |
48 | - # ['PASS'|'ALWAYSFAIL'|'REGRESSION'|'RUNNING', url] |
49 | + # ['PASS'|'ALWAYSFAIL'|'REGRESSION'|'RUNNING'|'RUNNING-NEVERPASSED', url] |
50 | self.tests = {} |
51 | |
52 | def sortkey(self): |
53 | |
54 | === modified file 'tests/test_autopkgtest.py' |
55 | --- tests/test_autopkgtest.py 2015-11-06 22:51:55 +0000 |
56 | +++ tests/test_autopkgtest.py 2015-11-18 14:38:44 +0000 |
57 | @@ -6,6 +6,8 @@ |
58 | # the Free Software Foundation; either version 2 of the License, or |
59 | # (at your option) any later version. |
60 | |
61 | +from textwrap import dedent |
62 | + |
63 | import apt_pkg |
64 | import os |
65 | import sys |
66 | @@ -114,7 +116,7 @@ |
67 | |
68 | for src, (is_candidate, testmap) in expect_status.items(): |
69 | self.assertEqual(excuses_dict[src]['is-candidate'], is_candidate, |
70 | - src + ': ' + str(excuses_dict[src])) |
71 | + src + ': ' + pprint.pformat(excuses_dict[src])) |
72 | for testsrc, archmap in testmap.items(): |
73 | for arch, status in archmap.items(): |
74 | self.assertEqual(excuses_dict[src]['tests']['autopkgtest'][testsrc][arch][0], |
75 | @@ -169,14 +171,54 @@ |
76 | self.assertEqual(self.pending_requests, '') |
77 | self.assertEqual(self.amqp_requests, set()) |
78 | |
79 | + def test_no_wait_for_always_failed_test(self): |
80 | + '''We do not need to wait for results for tests which have always failed''' |
81 | + |
82 | + # The package has failed before, and with a trigger too on amd64 |
83 | + self.swift.set_results({'autopkgtest-series': { |
84 | + 'series/i386/d/darkgreen/20150101_100000@': (4, 'green 1'), |
85 | + 'series/amd64/d/darkgreen/20150101_100000@': (4, 'green 1', tr('somepackage/1')), |
86 | + }}) |
87 | + |
88 | + exc = self.do_test( |
89 | + [('darkgreen', {'Version': '2'}, 'autopkgtest')], |
90 | + {'darkgreen': (True, {'darkgreen 2': {'i386': 'RUNNING-NEVERPASSED', |
91 | + 'amd64': 'RUNNING-NEVERPASSED'}})} |
92 | + )[1] |
93 | + |
94 | + # the test should stlil be triggered though |
95 | + self.assertEqual(exc['darkgreen']['tests'], {'autopkgtest': |
96 | + {'darkgreen 2': { |
97 | + 'amd64': ['RUNNING-NEVERPASSED', |
98 | + 'http://autopkgtest.ubuntu.com/packages/d/darkgreen/series/amd64'], |
99 | + 'i386': ['RUNNING-NEVERPASSED', |
100 | + 'http://autopkgtest.ubuntu.com/packages/d/darkgreen/series/i386']}}}) |
101 | + |
102 | + self.assertEqual( |
103 | + self.pending_requests, dedent('''\ |
104 | + darkgreen 2 amd64 darkgreen 2 |
105 | + darkgreen 2 i386 darkgreen 2 |
106 | + ''')) |
107 | + |
108 | + self.assertEqual( |
109 | + self.amqp_requests, |
110 | + set(['debci-series-amd64:darkgreen {"triggers": ["darkgreen/2"]}', |
111 | + 'debci-series-i386:darkgreen {"triggers": ["darkgreen/2"]}'])) |
112 | + |
113 | + |
114 | def test_multi_rdepends_with_tests_all_running(self): |
115 | '''Multiple reverse dependencies with tests (all running)''' |
116 | |
117 | + # green has passed before on i386 only, therefore NEVERPASSED on amd64 |
118 | + self.swift.set_results({'autopkgtest-series': { |
119 | + 'series/i386/g/green/20150101_100000@': (0, 'green 1'), |
120 | + }}) |
121 | + |
122 | self.do_test( |
123 | [('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')], |
124 | - {'green': (False, {'green 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
125 | - 'lightgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
126 | - 'darkgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
127 | + {'green': (False, {'green 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING'}, |
128 | + 'lightgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
129 | + 'darkgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
130 | }) |
131 | }, |
132 | {'green': [('old-version', '1'), ('new-version', '2')]}) |
133 | @@ -211,12 +253,17 @@ |
134 | def test_multi_rdepends_with_tests_all_pass(self): |
135 | '''Multiple reverse dependencies with tests (all pass)''' |
136 | |
137 | + # green has passed before on i386 only, therefore NEVERPASSED on amd64 |
138 | + self.swift.set_results({'autopkgtest-series': { |
139 | + 'series/i386/g/green/20150101_100000@': (0, 'green 1'), |
140 | + }}) |
141 | + |
142 | # first run requests tests and marks them as pending |
143 | self.do_test( |
144 | [('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')], |
145 | - {'green': (False, {'green 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
146 | - 'lightgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
147 | - 'darkgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
148 | + {'green': (False, {'green 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING'}, |
149 | + 'lightgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
150 | + 'darkgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
151 | }) |
152 | }, |
153 | {'green': [('old-version', '1'), ('new-version', '2')]}) |
154 | @@ -280,12 +327,17 @@ |
155 | def test_multi_rdepends_with_tests_mixed(self): |
156 | '''Multiple reverse dependencies with tests (mixed results)''' |
157 | |
158 | + # green has passed before on i386 only, therefore NEVERPASSED on amd64 |
159 | + self.swift.set_results({'autopkgtest-series': { |
160 | + 'series/i386/g/green/20150101_100000@': (0, 'green 1'), |
161 | + }}) |
162 | + |
163 | # first run requests tests and marks them as pending |
164 | self.do_test( |
165 | [('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')], |
166 | - {'green': (False, {'green 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
167 | - 'lightgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
168 | - 'darkgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
169 | + {'green': (False, {'green 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING'}, |
170 | + 'lightgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
171 | + 'darkgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
172 | }) |
173 | }, |
174 | {'green': [('old-version', '1'), ('new-version', '2')]}) |
175 | @@ -320,12 +372,17 @@ |
176 | def test_multi_rdepends_with_tests_mixed_no_recorded_triggers(self): |
177 | '''Multiple reverse dependencies with tests (mixed results), no recorded triggers''' |
178 | |
179 | + # green has passed before on i386 only, therefore NEVERPASSED on amd64 |
180 | + self.swift.set_results({'autopkgtest-series': { |
181 | + 'series/i386/g/green/20150101_100000@': (0, 'green 1'), |
182 | + }}) |
183 | + |
184 | # first run requests tests and marks them as pending |
185 | self.do_test( |
186 | [('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')], |
187 | - {'green': (False, {'green 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
188 | - 'lightgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
189 | - 'darkgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
190 | + {'green': (False, {'green 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING'}, |
191 | + 'lightgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
192 | + 'darkgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
193 | }) |
194 | }, |
195 | {'green': [('old-version', '1'), ('new-version', '2')]}) |
196 | @@ -342,8 +399,8 @@ |
197 | out = self.do_test( |
198 | [], |
199 | {'green': (False, {'green 2': {'amd64': 'ALWAYSFAIL', 'i386': 'PASS'}, |
200 | - 'lightgreen 1': {'amd64': 'REGRESSION', 'i386': 'RUNNING'}, |
201 | - 'darkgreen 1': {'amd64': 'RUNNING', 'i386': 'PASS'}, |
202 | + 'lightgreen 1': {'amd64': 'REGRESSION', 'i386': 'RUNNING-NEVERPASSED'}, |
203 | + 'darkgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'PASS'}, |
204 | }) |
205 | }) |
206 | |
207 | @@ -449,6 +506,11 @@ |
208 | def test_multi_rdepends_arch_specific(self): |
209 | '''Multiple reverse dependencies with arch specific tests''' |
210 | |
211 | + # green has passed before on amd64, doesn't exist on i386 |
212 | + self.swift.set_results({'autopkgtest-series': { |
213 | + 'series/amd64/g/green64/20150101_100000@': (0, 'green64 0.1'), |
214 | + }}) |
215 | + |
216 | self.data.add('green64', False, {'Depends': 'libc6 (>= 0.9), libgreen1', |
217 | 'Architecture': 'amd64'}, |
218 | testsuite='autopkgtest') |
219 | @@ -456,9 +518,9 @@ |
220 | # first run requests tests and marks them as pending |
221 | self.do_test( |
222 | [('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')], |
223 | - {'green': (False, {'green 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
224 | - 'lightgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
225 | - 'darkgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
226 | + {'green': (False, {'green 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
227 | + 'lightgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
228 | + 'darkgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
229 | 'green64 1': {'amd64': 'RUNNING'}, |
230 | }) |
231 | }) |
232 | @@ -701,13 +763,17 @@ |
233 | def test_rdepends_unbuilt_new_version_fail(self): |
234 | '''Unbuilt reverse dependency gets failure for newer version''' |
235 | |
236 | + self.swift.set_results({'autopkgtest-series': { |
237 | + 'series/i386/l/lightgreen/20150101_100101@': (0, 'lightgreen 1', tr('lightgreen/2')), |
238 | + }}) |
239 | + |
240 | # add unbuilt lightgreen; should request tests against the old version |
241 | self.data.add_src('lightgreen', True, {'Version': '2', 'Testsuite': 'autopkgtest'}) |
242 | self.do_test( |
243 | [('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')], |
244 | - {'green': (False, {'green 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
245 | - 'lightgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
246 | - 'darkgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
247 | + {'green': (False, {'green 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
248 | + 'lightgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING'}, |
249 | + 'darkgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
250 | }), |
251 | 'lightgreen': (False, {}), |
252 | }, |
253 | @@ -753,14 +819,19 @@ |
254 | def test_package_pair_running(self): |
255 | '''Two packages in unstable that need to go in together (running)''' |
256 | |
257 | + # green has passed before on i386 only, therefore NEVERPASSED on amd64 |
258 | + self.swift.set_results({'autopkgtest-series': { |
259 | + 'series/i386/g/green/20150101_100000@': (0, 'green 1'), |
260 | + }}) |
261 | + |
262 | self.do_test( |
263 | [('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest'), |
264 | ('lightgreen', {'Version': '2', 'Depends': 'libgreen1 (>= 2)'}, 'autopkgtest')], |
265 | - {'green': (False, {'green 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
266 | - 'lightgreen 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
267 | - 'darkgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
268 | + {'green': (False, {'green 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING'}, |
269 | + 'lightgreen 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
270 | + 'darkgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
271 | }), |
272 | - 'lightgreen': (False, {'lightgreen 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}}), |
273 | + 'lightgreen': (False, {'lightgreen 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}}), |
274 | }, |
275 | {'green': [('old-version', '1'), ('new-version', '2')], |
276 | 'lightgreen': [('old-version', '1'), ('new-version', '2')], |
277 | @@ -796,9 +867,9 @@ |
278 | |
279 | self.do_test( |
280 | [('libgreen1', {'Version': '2', 'Source': 'newgreen', 'Depends': 'libc6'}, 'autopkgtest')], |
281 | - {'newgreen': (False, {'newgreen 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
282 | - 'lightgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
283 | - 'darkgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
284 | + {'newgreen': (True, {'newgreen 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
285 | + 'lightgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
286 | + 'darkgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
287 | }), |
288 | }, |
289 | {'newgreen': [('old-version', '-'), ('new-version', '2')]}) |
290 | @@ -1137,13 +1208,18 @@ |
291 | def test_multiarch_dep(self): |
292 | '''multi-arch dependency''' |
293 | |
294 | + # lightgreen has passed before on i386 only, therefore NEVERPASSED on amd64 |
295 | + self.swift.set_results({'autopkgtest-series': { |
296 | + 'series/i386/l/lightgreen/20150101_100000@': (0, 'lightgreen 1'), |
297 | + }}) |
298 | + |
299 | self.data.add('rainbow', False, {'Depends': 'lightgreen:any'}, |
300 | testsuite='autopkgtest') |
301 | |
302 | self.do_test( |
303 | [('lightgreen', {'Version': '2'}, 'autopkgtest')], |
304 | - {'lightgreen': (False, {'lightgreen 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
305 | - 'rainbow 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
306 | + {'lightgreen': (False, {'lightgreen 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING'}, |
307 | + 'rainbow 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
308 | }), |
309 | }, |
310 | {'lightgreen': [('old-version', '1'), ('new-version', '2')]} |
311 | @@ -1233,11 +1309,16 @@ |
312 | |
313 | self.create_hint('pitti', 'force-skiptest green/2') |
314 | |
315 | + # green has passed before on i386 only, therefore NEVERPASSED on amd64 |
316 | + self.swift.set_results({'autopkgtest-series': { |
317 | + 'series/i386/g/green/20150101_100000@': (0, 'green 1'), |
318 | + }}) |
319 | + |
320 | self.do_test( |
321 | [('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')], |
322 | - {'green': (True, {'green 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
323 | - 'lightgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
324 | - 'darkgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
325 | + {'green': (True, {'green 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING'}, |
326 | + 'lightgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
327 | + 'darkgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
328 | }), |
329 | }, |
330 | {'green': [('old-version', '1'), ('new-version', '2'), |
331 | @@ -1248,12 +1329,17 @@ |
332 | def test_hint_force_skiptest_different_version(self): |
333 | '''force-skiptest hint with non-matching version''' |
334 | |
335 | + # green has passed before on i386 only, therefore NEVERPASSED on amd64 |
336 | + self.swift.set_results({'autopkgtest-series': { |
337 | + 'series/i386/g/green/20150101_100000@': (0, 'green 1'), |
338 | + }}) |
339 | + |
340 | self.create_hint('pitti', 'force-skiptest green/1') |
341 | exc = self.do_test( |
342 | [('libgreen1', {'Version': '2', 'Source': 'green', 'Depends': 'libc6'}, 'autopkgtest')], |
343 | - {'green': (False, {'green 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
344 | - 'lightgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
345 | - 'darkgreen 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
346 | + {'green': (False, {'green 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING'}, |
347 | + 'lightgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
348 | + 'darkgreen 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
349 | }), |
350 | }, |
351 | {'green': [('reason', 'autopkgtest')]} |
352 | @@ -1270,9 +1356,13 @@ |
353 | self.data.add('dkms', False, {}) |
354 | self.data.add('fancy-dkms', False, {'Source': 'fancy', 'Depends': 'dkms (>= 1)'}) |
355 | |
356 | + self.swift.set_results({'autopkgtest-series': { |
357 | + 'series/i386/f/fancy/20150101_100101@': (0, 'fancy 0.1') |
358 | + }}) |
359 | + |
360 | self.do_test( |
361 | [('dkms', {'Version': '2'}, None)], |
362 | - {'dkms': (False, {'fancy 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}})}, |
363 | + {'dkms': (False, {'fancy 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING'}})}, |
364 | {'dkms': [('old-version', '1'), ('new-version', '2')]}) |
365 | |
366 | def test_kernel_triggers_dkms(self): |
367 | @@ -1286,9 +1376,9 @@ |
368 | ('linux-image-grumpy-generic', {'Source': 'linux-meta-lts-grumpy'}, None), |
369 | ('linux-image-64only', {'Source': 'linux-meta-64only', 'Architecture': 'amd64'}, None), |
370 | ], |
371 | - {'linux-meta': (False, {'fancy 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}}), |
372 | - 'linux-meta-lts-grumpy': (False, {'fancy 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}}), |
373 | - 'linux-meta-64only': (False, {'fancy 1': {'amd64': 'RUNNING'}}), |
374 | + {'linux-meta': (True, {'fancy 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}}), |
375 | + 'linux-meta-lts-grumpy': (True, {'fancy 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}}), |
376 | + 'linux-meta-64only': (True, {'fancy 1': {'amd64': 'RUNNING-NEVERPASSED'}}), |
377 | }) |
378 | |
379 | # one separate test should be triggered for each kernel |
380 | @@ -1318,6 +1408,7 @@ |
381 | # works against linux-meta and -64only, fails against grumpy i386, no |
382 | # result yet for grumpy amd64 |
383 | self.swift.set_results({'autopkgtest-series': { |
384 | + 'series/amd64/f/fancy/20150101_100301@': (0, 'fancy 0.5'), |
385 | 'series/i386/f/fancy/20150101_100101@': (0, 'fancy 1', tr('linux-meta/1')), |
386 | 'series/amd64/f/fancy/20150101_100101@': (0, 'fancy 1', tr('linux-meta/1')), |
387 | 'series/amd64/f/fancy/20150101_100201@': (0, 'fancy 1', tr('linux-meta-64only/1')), |
388 | @@ -1368,7 +1459,7 @@ |
389 | |
390 | self.assertEqual(self.pending_requests, '') |
391 | |
392 | - def test_kernel_triggerered_tests(self): |
393 | + def test_kernel_triggered_tests(self): |
394 | '''linux, lxc, glibc tests get triggered by linux-meta* uploads''' |
395 | |
396 | self.data.remove_all(False) |
397 | @@ -1382,16 +1473,20 @@ |
398 | self.data.add('linux-libc-dev', False, {'Source': 'linux'}, testsuite='autopkgtest') |
399 | self.data.add('linux-image', False, {'Source': 'linux-meta', 'Depends': 'linux-image-1'}) |
400 | |
401 | + self.swift.set_results({'autopkgtest-series': { |
402 | + 'series/amd64/l/lxc/20150101_100101@': (0, 'lxc 0.1') |
403 | + }}) |
404 | + |
405 | exc = self.do_test( |
406 | [('linux-image', {'Version': '2', 'Depends': 'linux-image-2', 'Source': 'linux-meta'}, None), |
407 | ('linux-image-64only', {'Source': 'linux-meta-64only', 'Architecture': 'amd64'}, None), |
408 | ('linux-image-2', {'Version': '2', 'Source': 'linux'}, 'autopkgtest'), |
409 | ('linux-libc-dev', {'Version': '2', 'Source': 'linux'}, 'autopkgtest'), |
410 | ], |
411 | - {'linux-meta': (False, {'lxc 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
412 | - 'glibc 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
413 | - 'linux 2': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
414 | - 'systemd 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
415 | + {'linux-meta': (False, {'lxc 1': {'amd64': 'RUNNING', 'i386': 'RUNNING-NEVERPASSED'}, |
416 | + 'glibc 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
417 | + 'linux 2': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
418 | + 'systemd 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}, |
419 | }), |
420 | 'linux-meta-64only': (False, {'lxc 1': {'amd64': 'RUNNING'}}), |
421 | 'linux': (False, {}), |
422 | @@ -1410,6 +1505,7 @@ |
423 | self.data.add('linux-firmware', False, {'Source': 'linux-firmware'}, testsuite='autopkgtest') |
424 | |
425 | self.swift.set_results({'autopkgtest-series': { |
426 | + 'series/i386/f/fancy/20150101_090000@': (0, 'fancy 0.5'), |
427 | 'series/i386/l/linux/20150101_100000@': (0, 'linux 2', tr('linux-meta/0.2')), |
428 | 'series/amd64/l/linux/20150101_100000@': (0, 'linux 2', tr('linux-meta/0.2')), |
429 | 'series/i386/l/linux-firmware/20150101_100000@': (0, 'linux-firmware 2', tr('linux-firmware/2')), |
430 | @@ -1421,7 +1517,7 @@ |
431 | ('linux-image-2', {'Version': '2', 'Source': 'linux'}, 'autopkgtest'), |
432 | ('linux-firmware', {'Version': '2', 'Source': 'linux-firmware'}, 'autopkgtest'), |
433 | ], |
434 | - {'linux-meta': (False, {'fancy 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
435 | + {'linux-meta': (False, {'fancy 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING'}, |
436 | 'linux 2': {'amd64': 'PASS', 'i386': 'PASS'} |
437 | }), |
438 | # no tests, but should wait on linux-meta |
439 | @@ -1462,10 +1558,15 @@ |
440 | self.data.add('linux', False, {}, testsuite='autopkgtest') |
441 | self.data.add('notme', False, {'Depends': 'libgcc1'}, testsuite='autopkgtest') |
442 | |
443 | + # binutils has passed before on i386 only, therefore NEVERPASSED on amd64 |
444 | + self.swift.set_results({'autopkgtest-series': { |
445 | + 'series/i386/b/binutils/20150101_100000@': (0, 'binutils 1', tr('binutils/1')), |
446 | + }}) |
447 | + |
448 | exc = self.do_test( |
449 | [('libgcc1', {'Source': 'gcc-5', 'Version': '2'}, None)], |
450 | - {'gcc-5': (False, {'binutils 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}, |
451 | - 'linux 1': {'amd64': 'RUNNING', 'i386': 'RUNNING'}})})[1] |
452 | + {'gcc-5': (False, {'binutils 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING'}, |
453 | + 'linux 1': {'amd64': 'RUNNING-NEVERPASSED', 'i386': 'RUNNING-NEVERPASSED'}})})[1] |
454 | self.assertNotIn('notme 1', exc['gcc-5']['tests']['autopkgtest']) |
455 | |
456 | def test_alternative_gcc(self): |
Thanks for working on this! There's a couple of issues here, but the overall direction is sound. Looking forward to this, especially in times like these when the queues are super full.