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 | |||
