diff options
Diffstat (limited to 'bitbake/lib/bb/tests/runqueue.py')
-rw-r--r-- | bitbake/lib/bb/tests/runqueue.py | 155 |
1 files changed, 149 insertions, 6 deletions
diff --git a/bitbake/lib/bb/tests/runqueue.py b/bitbake/lib/bb/tests/runqueue.py index fbdacccfa1..1103f905f9 100644 --- a/bitbake/lib/bb/tests/runqueue.py +++ b/bitbake/lib/bb/tests/runqueue.py | |||
@@ -40,10 +40,12 @@ class RunQueueTests(unittest.TestCase): | |||
40 | except subprocess.CalledProcessError as e: | 40 | except subprocess.CalledProcessError as e: |
41 | self.fail("Command %s failed with %s" % (cmd, e.output)) | 41 | self.fail("Command %s failed with %s" % (cmd, e.output)) |
42 | tasks = [] | 42 | tasks = [] |
43 | with open(builddir + "/task.log", "r") as f: | 43 | tasklog = builddir + "/task.log" |
44 | tasks = [line.rstrip() for line in f] | 44 | if os.path.exists(tasklog): |
45 | if cleanup: | 45 | with open(tasklog, "r") as f: |
46 | os.remove(builddir + "/task.log") | 46 | tasks = [line.rstrip() for line in f] |
47 | if cleanup: | ||
48 | os.remove(tasklog) | ||
47 | return tasks | 49 | return tasks |
48 | 50 | ||
49 | def test_no_setscenevalid(self): | 51 | def test_no_setscenevalid(self): |
@@ -229,7 +231,7 @@ class RunQueueTests(unittest.TestCase): | |||
229 | self.assertEqual(set(tasks), set(expected)) | 231 | self.assertEqual(set(tasks), set(expected)) |
230 | 232 | ||
231 | 233 | ||
232 | def test_hashserv(self): | 234 | def test_hashserv_single(self): |
233 | with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: | 235 | with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: |
234 | extraenv = { | 236 | extraenv = { |
235 | "BB_HASHSERVE" : "localhost:0", | 237 | "BB_HASHSERVE" : "localhost:0", |
@@ -248,6 +250,147 @@ class RunQueueTests(unittest.TestCase): | |||
248 | self.assertEqual(set(tasks), set(expected)) | 250 | self.assertEqual(set(tasks), set(expected)) |
249 | cmd = ["bitbake", "a1", "b1"] | 251 | cmd = ["bitbake", "a1", "b1"] |
250 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) | 252 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) |
251 | expected = ['a1:' + x for x in setscenetasks] + ['b1:' + x for x in setscenetasks] + ['a1:build', 'b1:build'] | 253 | expected = ['a1:populate_sysroot', 'a1:package', 'a1:package_write_rpm_setscene', 'a1:packagedata_setscene', |
254 | 'a1:package_write_ipk_setscene', 'a1:package_qa_setscene'] | ||
252 | self.assertEqual(set(tasks), set(expected)) | 255 | self.assertEqual(set(tasks), set(expected)) |
253 | 256 | ||
257 | def test_hashserv_double(self): | ||
258 | with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: | ||
259 | extraenv = { | ||
260 | "BB_HASHSERVE" : "localhost:0", | ||
261 | "BB_SIGNATURE_HANDLER" : "TestEquivHash" | ||
262 | } | ||
263 | cmd = ["bitbake", "a1", "b1", "e1"] | ||
264 | setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene', | ||
265 | 'populate_sysroot_setscene', 'package_qa_setscene'] | ||
266 | sstatevalid = "" | ||
267 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) | ||
268 | expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks] + ['e1:' + x for x in self.alltasks] | ||
269 | self.assertEqual(set(tasks), set(expected)) | ||
270 | cmd = ["bitbake", "a1", "b1", "-c", "install", "-fn"] | ||
271 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) | ||
272 | cmd = ["bitbake", "e1"] | ||
273 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) | ||
274 | expected = ['a1:package', 'a1:install', 'b1:package', 'b1:install', 'a1:populate_sysroot', 'b1:populate_sysroot', | ||
275 | 'a1:package_write_ipk_setscene', 'b1:packagedata_setscene', 'b1:package_write_rpm_setscene', | ||
276 | 'a1:package_write_rpm_setscene', 'b1:package_write_ipk_setscene', 'a1:packagedata_setscene'] | ||
277 | self.assertEqual(set(tasks), set(expected)) | ||
278 | |||
279 | |||
280 | def test_hashserv_multiple_setscene(self): | ||
281 | # Runs e1:do_package_setscene twice | ||
282 | with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: | ||
283 | extraenv = { | ||
284 | "BB_HASHSERVE" : "localhost:0", | ||
285 | "BB_SIGNATURE_HANDLER" : "TestEquivHash" | ||
286 | } | ||
287 | cmd = ["bitbake", "a1", "b1", "e1"] | ||
288 | setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene', | ||
289 | 'populate_sysroot_setscene', 'package_qa_setscene'] | ||
290 | sstatevalid = "" | ||
291 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) | ||
292 | expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks] + ['e1:' + x for x in self.alltasks] | ||
293 | self.assertEqual(set(tasks), set(expected)) | ||
294 | cmd = ["bitbake", "a1", "b1", "-c", "install", "-fn"] | ||
295 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) | ||
296 | cmd = ["bitbake", "e1"] | ||
297 | sstatevalid = "e1:do_package" | ||
298 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True, slowtasks="a1:populate_sysroot b1:populate_sysroot") | ||
299 | expected = ['a1:package', 'a1:install', 'b1:package', 'b1:install', 'a1:populate_sysroot', 'b1:populate_sysroot', | ||
300 | 'a1:package_write_ipk_setscene', 'b1:packagedata_setscene', 'b1:package_write_rpm_setscene', | ||
301 | 'a1:package_write_rpm_setscene', 'b1:package_write_ipk_setscene', 'a1:packagedata_setscene', | ||
302 | 'e1:package_setscene'] | ||
303 | self.assertEqual(set(tasks), set(expected)) | ||
304 | for i in expected: | ||
305 | if i in ["e1:package_setscene"]: | ||
306 | self.assertEqual(tasks.count(i), 4, "%s not in task list four times" % i) | ||
307 | else: | ||
308 | self.assertEqual(tasks.count(i), 1, "%s not in task list once" % i) | ||
309 | |||
310 | def test_hashserv_partial_match(self): | ||
311 | # e1:do_package matches initial built but not second hash value | ||
312 | with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: | ||
313 | extraenv = { | ||
314 | "BB_HASHSERVE" : "localhost:0", | ||
315 | "BB_SIGNATURE_HANDLER" : "TestEquivHash" | ||
316 | } | ||
317 | cmd = ["bitbake", "a1", "b1"] | ||
318 | setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene', | ||
319 | 'populate_sysroot_setscene', 'package_qa_setscene'] | ||
320 | sstatevalid = "" | ||
321 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) | ||
322 | expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks] | ||
323 | self.assertEqual(set(tasks), set(expected)) | ||
324 | with open(tempdir + "/stamps/a1.do_install.taint", "w") as f: | ||
325 | f.write("d460a29e-903f-4b76-a96b-3bcc22a65994") | ||
326 | with open(tempdir + "/stamps/b1.do_install.taint", "w") as f: | ||
327 | f.write("ed36d46a-2977-458a-b3de-eef885bc1817") | ||
328 | cmd = ["bitbake", "e1"] | ||
329 | sstatevalid = "e1:do_package:cb47e017ab549d87aab614c0f49dcf969ff6414745909094f0af7e657cedc657" | ||
330 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) | ||
331 | expected = ['a1:package', 'a1:install', 'b1:package', 'b1:install', 'a1:populate_sysroot', 'b1:populate_sysroot', | ||
332 | 'a1:package_write_ipk_setscene', 'b1:packagedata_setscene', 'b1:package_write_rpm_setscene', | ||
333 | 'a1:package_write_rpm_setscene', 'b1:package_write_ipk_setscene', 'a1:packagedata_setscene', | ||
334 | 'e1:package_setscene'] + ['e1:' + x for x in self.alltasks] | ||
335 | expected.remove('e1:package') | ||
336 | self.assertEqual(set(tasks), set(expected)) | ||
337 | |||
338 | def test_hashserv_partial_match2(self): | ||
339 | # e1:do_package + e1:do_populate_sysroot matches initial built but not second hash value | ||
340 | with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: | ||
341 | extraenv = { | ||
342 | "BB_HASHSERVE" : "localhost:0", | ||
343 | "BB_SIGNATURE_HANDLER" : "TestEquivHash" | ||
344 | } | ||
345 | cmd = ["bitbake", "a1", "b1"] | ||
346 | setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene', | ||
347 | 'populate_sysroot_setscene', 'package_qa_setscene'] | ||
348 | sstatevalid = "" | ||
349 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) | ||
350 | expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks] | ||
351 | self.assertEqual(set(tasks), set(expected)) | ||
352 | with open(tempdir + "/stamps/a1.do_install.taint", "w") as f: | ||
353 | f.write("d460a29e-903f-4b76-a96b-3bcc22a65994") | ||
354 | with open(tempdir + "/stamps/b1.do_install.taint", "w") as f: | ||
355 | f.write("ed36d46a-2977-458a-b3de-eef885bc1817") | ||
356 | cmd = ["bitbake", "e1"] | ||
357 | sstatevalid = "e1:do_package:cb47e017ab549d87aab614c0f49dcf969ff6414745909094f0af7e657cedc657 e1:do_populate_sysroot:aa6a915229f04af429d3c6c59c303516c500650b7c48da8e07b20a53acd86c5f" | ||
358 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) | ||
359 | expected = ['a1:package', 'a1:install', 'b1:package', 'b1:install', 'a1:populate_sysroot', 'b1:populate_sysroot', | ||
360 | 'a1:package_write_ipk_setscene', 'b1:packagedata_setscene', 'b1:package_write_rpm_setscene', | ||
361 | 'a1:package_write_rpm_setscene', 'b1:package_write_ipk_setscene', 'a1:packagedata_setscene', | ||
362 | 'e1:package_setscene', 'e1:populate_sysroot_setscene', 'e1:build', 'e1:package_qa', 'e1:package_write_rpm', 'e1:package_write_ipk', 'e1:packagedata'] | ||
363 | self.assertEqual(set(tasks), set(expected)) | ||
364 | |||
365 | |||
366 | def test_hashserv_partial_match3(self): | ||
367 | # e1:do_package is valid for a1 but not after b1 | ||
368 | # In former buggy code, this triggered e1:do_fetch, then e1:do_populate_sysroot to run | ||
369 | # with none of the intermediate tasks which is a serious bug | ||
370 | with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: | ||
371 | extraenv = { | ||
372 | "BB_HASHSERVE" : "localhost:0", | ||
373 | "BB_SIGNATURE_HANDLER" : "TestEquivHash" | ||
374 | } | ||
375 | cmd = ["bitbake", "a1", "b1"] | ||
376 | setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene', | ||
377 | 'populate_sysroot_setscene', 'package_qa_setscene'] | ||
378 | sstatevalid = "" | ||
379 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) | ||
380 | expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks] | ||
381 | self.assertEqual(set(tasks), set(expected)) | ||
382 | with open(tempdir + "/stamps/a1.do_install.taint", "w") as f: | ||
383 | f.write("d460a29e-903f-4b76-a96b-3bcc22a65994") | ||
384 | with open(tempdir + "/stamps/b1.do_install.taint", "w") as f: | ||
385 | f.write("ed36d46a-2977-458a-b3de-eef885bc1817") | ||
386 | cmd = ["bitbake", "e1", "-DD"] | ||
387 | sstatevalid = "e1:do_package:b710f6312ffed900b4b2761cc05538645f4ff3e7e0b70d688c70c0f3bcc2e1a2" | ||
388 | tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True, slowtasks="e1:fetch") | ||
389 | expected = ['a1:package', 'a1:install', 'b1:package', 'b1:install', 'a1:populate_sysroot', 'b1:populate_sysroot', | ||
390 | 'a1:package_write_ipk_setscene', 'b1:packagedata_setscene', 'b1:package_write_rpm_setscene', | ||
391 | 'a1:package_write_rpm_setscene', 'b1:package_write_ipk_setscene', 'a1:packagedata_setscene', | ||
392 | 'e1:package_setscene'] + ['e1:' + x for x in self.alltasks] | ||
393 | expected.remove('e1:package') | ||
394 | self.assertEqual(set(tasks), set(expected)) | ||
395 | |||
396 | |||