mirror of
https://git.yoctoproject.org/poky
synced 2026-05-30 00:20:08 +00:00
bitbake: tests/runqueue: Add further hash equivalence tests
Add some extra hash equivalence runqueue tests based on recent scenarios that caused problems during testing. (Bitbake rev: 373b085ead992a725b2230ededd992b4c61a1a05) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -40,10 +40,12 @@ class RunQueueTests(unittest.TestCase):
|
||||
except subprocess.CalledProcessError as e:
|
||||
self.fail("Command %s failed with %s" % (cmd, e.output))
|
||||
tasks = []
|
||||
with open(builddir + "/task.log", "r") as f:
|
||||
tasks = [line.rstrip() for line in f]
|
||||
if cleanup:
|
||||
os.remove(builddir + "/task.log")
|
||||
tasklog = builddir + "/task.log"
|
||||
if os.path.exists(tasklog):
|
||||
with open(tasklog, "r") as f:
|
||||
tasks = [line.rstrip() for line in f]
|
||||
if cleanup:
|
||||
os.remove(tasklog)
|
||||
return tasks
|
||||
|
||||
def test_no_setscenevalid(self):
|
||||
@@ -229,7 +231,7 @@ class RunQueueTests(unittest.TestCase):
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
|
||||
|
||||
def test_hashserv(self):
|
||||
def test_hashserv_single(self):
|
||||
with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
|
||||
extraenv = {
|
||||
"BB_HASHSERVE" : "localhost:0",
|
||||
@@ -248,6 +250,147 @@ class RunQueueTests(unittest.TestCase):
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
cmd = ["bitbake", "a1", "b1"]
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True)
|
||||
expected = ['a1:' + x for x in setscenetasks] + ['b1:' + x for x in setscenetasks] + ['a1:build', 'b1:build']
|
||||
expected = ['a1:populate_sysroot', 'a1:package', 'a1:package_write_rpm_setscene', 'a1:packagedata_setscene',
|
||||
'a1:package_write_ipk_setscene', 'a1:package_qa_setscene']
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
|
||||
def test_hashserv_double(self):
|
||||
with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
|
||||
extraenv = {
|
||||
"BB_HASHSERVE" : "localhost:0",
|
||||
"BB_SIGNATURE_HANDLER" : "TestEquivHash"
|
||||
}
|
||||
cmd = ["bitbake", "a1", "b1", "e1"]
|
||||
setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene',
|
||||
'populate_sysroot_setscene', 'package_qa_setscene']
|
||||
sstatevalid = ""
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True)
|
||||
expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks] + ['e1:' + x for x in self.alltasks]
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
cmd = ["bitbake", "a1", "b1", "-c", "install", "-fn"]
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True)
|
||||
cmd = ["bitbake", "e1"]
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True)
|
||||
expected = ['a1:package', 'a1:install', 'b1:package', 'b1:install', 'a1:populate_sysroot', 'b1:populate_sysroot',
|
||||
'a1:package_write_ipk_setscene', 'b1:packagedata_setscene', 'b1:package_write_rpm_setscene',
|
||||
'a1:package_write_rpm_setscene', 'b1:package_write_ipk_setscene', 'a1:packagedata_setscene']
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
|
||||
|
||||
def test_hashserv_multiple_setscene(self):
|
||||
# Runs e1:do_package_setscene twice
|
||||
with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
|
||||
extraenv = {
|
||||
"BB_HASHSERVE" : "localhost:0",
|
||||
"BB_SIGNATURE_HANDLER" : "TestEquivHash"
|
||||
}
|
||||
cmd = ["bitbake", "a1", "b1", "e1"]
|
||||
setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene',
|
||||
'populate_sysroot_setscene', 'package_qa_setscene']
|
||||
sstatevalid = ""
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True)
|
||||
expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks] + ['e1:' + x for x in self.alltasks]
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
cmd = ["bitbake", "a1", "b1", "-c", "install", "-fn"]
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True)
|
||||
cmd = ["bitbake", "e1"]
|
||||
sstatevalid = "e1:do_package"
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True, slowtasks="a1:populate_sysroot b1:populate_sysroot")
|
||||
expected = ['a1:package', 'a1:install', 'b1:package', 'b1:install', 'a1:populate_sysroot', 'b1:populate_sysroot',
|
||||
'a1:package_write_ipk_setscene', 'b1:packagedata_setscene', 'b1:package_write_rpm_setscene',
|
||||
'a1:package_write_rpm_setscene', 'b1:package_write_ipk_setscene', 'a1:packagedata_setscene',
|
||||
'e1:package_setscene']
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
for i in expected:
|
||||
if i in ["e1:package_setscene"]:
|
||||
self.assertEqual(tasks.count(i), 4, "%s not in task list four times" % i)
|
||||
else:
|
||||
self.assertEqual(tasks.count(i), 1, "%s not in task list once" % i)
|
||||
|
||||
def test_hashserv_partial_match(self):
|
||||
# e1:do_package matches initial built but not second hash value
|
||||
with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
|
||||
extraenv = {
|
||||
"BB_HASHSERVE" : "localhost:0",
|
||||
"BB_SIGNATURE_HANDLER" : "TestEquivHash"
|
||||
}
|
||||
cmd = ["bitbake", "a1", "b1"]
|
||||
setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene',
|
||||
'populate_sysroot_setscene', 'package_qa_setscene']
|
||||
sstatevalid = ""
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True)
|
||||
expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks]
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
with open(tempdir + "/stamps/a1.do_install.taint", "w") as f:
|
||||
f.write("d460a29e-903f-4b76-a96b-3bcc22a65994")
|
||||
with open(tempdir + "/stamps/b1.do_install.taint", "w") as f:
|
||||
f.write("ed36d46a-2977-458a-b3de-eef885bc1817")
|
||||
cmd = ["bitbake", "e1"]
|
||||
sstatevalid = "e1:do_package:cb47e017ab549d87aab614c0f49dcf969ff6414745909094f0af7e657cedc657"
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True)
|
||||
expected = ['a1:package', 'a1:install', 'b1:package', 'b1:install', 'a1:populate_sysroot', 'b1:populate_sysroot',
|
||||
'a1:package_write_ipk_setscene', 'b1:packagedata_setscene', 'b1:package_write_rpm_setscene',
|
||||
'a1:package_write_rpm_setscene', 'b1:package_write_ipk_setscene', 'a1:packagedata_setscene',
|
||||
'e1:package_setscene'] + ['e1:' + x for x in self.alltasks]
|
||||
expected.remove('e1:package')
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
|
||||
def test_hashserv_partial_match2(self):
|
||||
# e1:do_package + e1:do_populate_sysroot matches initial built but not second hash value
|
||||
with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
|
||||
extraenv = {
|
||||
"BB_HASHSERVE" : "localhost:0",
|
||||
"BB_SIGNATURE_HANDLER" : "TestEquivHash"
|
||||
}
|
||||
cmd = ["bitbake", "a1", "b1"]
|
||||
setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene',
|
||||
'populate_sysroot_setscene', 'package_qa_setscene']
|
||||
sstatevalid = ""
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True)
|
||||
expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks]
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
with open(tempdir + "/stamps/a1.do_install.taint", "w") as f:
|
||||
f.write("d460a29e-903f-4b76-a96b-3bcc22a65994")
|
||||
with open(tempdir + "/stamps/b1.do_install.taint", "w") as f:
|
||||
f.write("ed36d46a-2977-458a-b3de-eef885bc1817")
|
||||
cmd = ["bitbake", "e1"]
|
||||
sstatevalid = "e1:do_package:cb47e017ab549d87aab614c0f49dcf969ff6414745909094f0af7e657cedc657 e1:do_populate_sysroot:aa6a915229f04af429d3c6c59c303516c500650b7c48da8e07b20a53acd86c5f"
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True)
|
||||
expected = ['a1:package', 'a1:install', 'b1:package', 'b1:install', 'a1:populate_sysroot', 'b1:populate_sysroot',
|
||||
'a1:package_write_ipk_setscene', 'b1:packagedata_setscene', 'b1:package_write_rpm_setscene',
|
||||
'a1:package_write_rpm_setscene', 'b1:package_write_ipk_setscene', 'a1:packagedata_setscene',
|
||||
'e1:package_setscene', 'e1:populate_sysroot_setscene', 'e1:build', 'e1:package_qa', 'e1:package_write_rpm', 'e1:package_write_ipk', 'e1:packagedata']
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
|
||||
|
||||
def test_hashserv_partial_match3(self):
|
||||
# e1:do_package is valid for a1 but not after b1
|
||||
# In former buggy code, this triggered e1:do_fetch, then e1:do_populate_sysroot to run
|
||||
# with none of the intermediate tasks which is a serious bug
|
||||
with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
|
||||
extraenv = {
|
||||
"BB_HASHSERVE" : "localhost:0",
|
||||
"BB_SIGNATURE_HANDLER" : "TestEquivHash"
|
||||
}
|
||||
cmd = ["bitbake", "a1", "b1"]
|
||||
setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene',
|
||||
'populate_sysroot_setscene', 'package_qa_setscene']
|
||||
sstatevalid = ""
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True)
|
||||
expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks]
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
with open(tempdir + "/stamps/a1.do_install.taint", "w") as f:
|
||||
f.write("d460a29e-903f-4b76-a96b-3bcc22a65994")
|
||||
with open(tempdir + "/stamps/b1.do_install.taint", "w") as f:
|
||||
f.write("ed36d46a-2977-458a-b3de-eef885bc1817")
|
||||
cmd = ["bitbake", "e1", "-DD"]
|
||||
sstatevalid = "e1:do_package:b710f6312ffed900b4b2761cc05538645f4ff3e7e0b70d688c70c0f3bcc2e1a2"
|
||||
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True, slowtasks="e1:fetch")
|
||||
expected = ['a1:package', 'a1:install', 'b1:package', 'b1:install', 'a1:populate_sysroot', 'b1:populate_sysroot',
|
||||
'a1:package_write_ipk_setscene', 'b1:packagedata_setscene', 'b1:package_write_rpm_setscene',
|
||||
'a1:package_write_rpm_setscene', 'b1:package_write_ipk_setscene', 'a1:packagedata_setscene',
|
||||
'e1:package_setscene'] + ['e1:' + x for x in self.alltasks]
|
||||
expected.remove('e1:package')
|
||||
self.assertEqual(set(tasks), set(expected))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user