summaryrefslogtreecommitdiffstats
path: root/bitbake/lib
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2019-07-10 14:26:37 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-07-15 10:28:12 +0100
commit7484fb49a4fb2e84729ce11c4c8c0433a8365dc3 (patch)
tree0e481bb23c29983e597985445b01a3d296636012 /bitbake/lib
parent39ef064da5998b1bf1d47d10a9622e9fe4107796 (diff)
downloadpoky-7484fb49a4fb2e84729ce11c4c8c0433a8365dc3.tar.gz
bitbake: tests: Add initial scenario based test for runqueue
We need some tests for runqueue, its been something which has been hard to test for a long time. Add some dummy metadata to allow this, mirroring the OE structure in spirit. (Bitbake rev: 37564d7440c5d7aa05ec537f3b79026b1c83bb68) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r--bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass219
-rw-r--r--bitbake/lib/bb/tests/runqueue-tests/classes/image.bbclass5
-rw-r--r--bitbake/lib/bb/tests/runqueue-tests/classes/native.bbclass2
-rw-r--r--bitbake/lib/bb/tests/runqueue-tests/conf/bitbake.conf11
-rw-r--r--bitbake/lib/bb/tests/runqueue-tests/recipes/a1.bb0
-rw-r--r--bitbake/lib/bb/tests/runqueue-tests/recipes/b1.bb1
-rw-r--r--bitbake/lib/bb/tests/runqueue-tests/recipes/c1.bb0
-rw-r--r--bitbake/lib/bb/tests/runqueue-tests/recipes/d1.bb3
-rw-r--r--bitbake/lib/bb/tests/runqueue.py200
9 files changed, 441 insertions, 0 deletions
diff --git a/bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass b/bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass
new file mode 100644
index 0000000000..e174c02dd6
--- /dev/null
+++ b/bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass
@@ -0,0 +1,219 @@
1SLOWTASKS ??= ""
2SSTATEVALID ??= ""
3
4def stamptask(d):
5 import time
6
7 thistask = d.expand("${PN}:${BB_CURRENTTASK}")
8 if thistask in d.getVar("SLOWTASKS").split():
9 bb.note("Slowing task %s" % thistask)
10 time.sleep(0.5)
11
12 with open(d.expand("${TOPDIR}/task.log"), "a+") as f:
13 f.write(thistask + "\n")
14
15python do_fetch() {
16 stamptask(d)
17}
18python do_unpack() {
19 stamptask(d)
20}
21python do_patch() {
22 stamptask(d)
23}
24python do_populate_lic() {
25 stamptask(d)
26}
27python do_prepare_recipe_sysroot() {
28 stamptask(d)
29}
30python do_configure() {
31 stamptask(d)
32}
33python do_compile() {
34 stamptask(d)
35}
36python do_install() {
37 stamptask(d)
38}
39python do_populate_sysroot() {
40 stamptask(d)
41}
42python do_package() {
43 stamptask(d)
44}
45python do_package_write_ipk() {
46 stamptask(d)
47}
48python do_package_write_rpm() {
49 stamptask(d)
50}
51python do_packagedata() {
52 stamptask(d)
53}
54python do_package_qa() {
55 stamptask(d)
56}
57python do_build() {
58 stamptask(d)
59}
60do_prepare_recipe_sysroot[deptask] = "do_populate_sysroot"
61do_package[deptask] += "do_packagedata"
62do_build[recrdeptask] += "do_deploy"
63do_build[recrdeptask] += "do_package_write_ipk"
64do_build[recrdeptask] += "do_package_write_rpm"
65do_package_qa[rdeptask] = "do_packagedata"
66do_populate_lic_deploy[recrdeptask] += "do_populate_lic do_deploy"
67
68DEBIANRDEP = "do_packagedata"
69oo_package_write_ipk[rdeptask] = "${DEBIANRDEP}"
70do_package_write_rpm[rdeptask] = "${DEBIANRDEP}"
71
72addtask fetch
73addtask unpack after do_fetch
74addtask patch after do_unpack
75addtask prepare_recipe_sysroot after do_patch
76addtask configure after do_prepare_recipe_sysroot
77addtask compile after do_configure
78addtask install after do_compile
79addtask populate_sysroot after do_install
80addtask package after do_install
81addtask package_write_ipk after do_packagedata do_package
82addtask package_write_rpm after do_packagedata do_package
83addtask packagedata after do_package
84addtask package_qa after do_package
85addtask build after do_package_qa do_package_write_rpm do_package_write_ipk do_populate_sysroot
86
87python do_package_setscene() {
88 stamptask(d)
89}
90python do_package_qa_setscene() {
91 stamptask(d)
92}
93python do_package_write_ipk_setscene() {
94 stamptask(d)
95}
96python do_package_write_rpm_setscene() {
97 stamptask(d)
98}
99python do_packagedata_setscene() {
100 stamptask(d)
101}
102python do_populate_lic_setscene() {
103 stamptask(d)
104}
105python do_populate_sysroot_setscene() {
106 stamptask(d)
107}
108
109addtask package_setscene
110addtask package_qa_setscene
111addtask package_write_ipk_setscene
112addtask package_write_rpm_setscene
113addtask packagedata_setscene
114addtask populate_lic_setscene
115addtask populate_sysroot_setscene
116
117BB_SETSCENE_DEPVALID = "setscene_depvalid"
118
119def setscene_depvalid(task, taskdependees, notneeded, d, log=None):
120 # taskdependees is a dict of tasks which depend on task, each being a 3 item list of [PN, TASKNAME, FILENAME]
121 # task is included in taskdependees too
122 # Return - False - We need this dependency
123 # - True - We can skip this dependency
124 import re
125
126 def logit(msg, log):
127 if log is not None:
128 log.append(msg)
129 else:
130 bb.debug(2, msg)
131
132 logit("Considering setscene task: %s" % (str(taskdependees[task])), log)
133
134 def isNativeCross(x):
135 return x.endswith("-native") or "-cross-" in x or "-crosssdk" in x or x.endswith("-cross")
136
137 # We only need to trigger populate_lic through direct dependencies
138 if taskdependees[task][1] == "do_populate_lic":
139 return True
140
141 # We only need to trigger packagedata through direct dependencies
142 # but need to preserve packagedata on packagedata links
143 if taskdependees[task][1] == "do_packagedata":
144 for dep in taskdependees:
145 if taskdependees[dep][1] == "do_packagedata":
146 return False
147 return True
148
149 for dep in taskdependees:
150 logit(" considering dependency: %s" % (str(taskdependees[dep])), log)
151 if task == dep:
152 continue
153 if dep in notneeded:
154 continue
155 # do_package_write_* and do_package doesn't need do_package
156 if taskdependees[task][1] == "do_package" and taskdependees[dep][1] in ['do_package', 'do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata', 'do_package_qa']:
157 continue
158 # do_package_write_* need do_populate_sysroot as they're mainly postinstall dependencies
159 if taskdependees[task][1] == "do_populate_sysroot" and taskdependees[dep][1] in ['do_package_write_ipk', 'do_package_write_rpm']:
160 return False
161 # do_package/packagedata/package_qa don't need do_populate_sysroot
162 if taskdependees[task][1] == "do_populate_sysroot" and taskdependees[dep][1] in ['do_package', 'do_packagedata', 'do_package_qa']:
163 continue
164 # Native/Cross packages don't exist and are noexec anyway
165 if isNativeCross(taskdependees[dep][0]) and taskdependees[dep][1] in ['do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata', 'do_package', 'do_package_qa']:
166 continue
167
168 # This is due to the [depends] in useradd.bbclass complicating matters
169 # The logic *is* reversed here due to the way hard setscene dependencies are injected
170 if (taskdependees[task][1] == 'do_package' or taskdependees[task][1] == 'do_populate_sysroot') and taskdependees[dep][0].endswith(('shadow-native', 'shadow-sysroot', 'base-passwd', 'pseudo-native')) and taskdependees[dep][1] == 'do_populate_sysroot':
171 continue
172
173 # Consider sysroot depending on sysroot tasks
174 if taskdependees[task][1] == 'do_populate_sysroot' and taskdependees[dep][1] == 'do_populate_sysroot':
175 # Native/Cross populate_sysroot need their dependencies
176 if isNativeCross(taskdependees[task][0]) and isNativeCross(taskdependees[dep][0]):
177 return False
178 # Target populate_sysroot depended on by cross tools need to be installed
179 if isNativeCross(taskdependees[dep][0]):
180 return False
181 # Native/cross tools depended upon by target sysroot are not needed
182 # Add an exception for shadow-native as required by useradd.bbclass
183 if isNativeCross(taskdependees[task][0]) and taskdependees[task][0] != 'shadow-native':
184 continue
185 # Target populate_sysroot need their dependencies
186 return False
187
188
189 if taskdependees[dep][1] == "do_populate_lic":
190 continue
191
192 # Safe fallthrough default
193 logit(" Default setscene dependency fall through due to dependency: %s" % (str(taskdependees[dep])), log)
194 return False
195 return True
196
197BB_HASHCHECK_FUNCTION = "sstate_checkhashes"
198
199def sstate_checkhashes(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=False, *, sq_unihash=None):
200
201 ret = []
202 missed = []
203
204 valid = d.getVar("SSTATEVALID").split()
205
206 for task in range(len(sq_fn)):
207 n = os.path.basename(sq_fn[task]).rsplit(".", 1)[0] + ":" + sq_task[task]
208 if n in valid:
209 bb.note("SState: Found valid sstate for %s" % n)
210 ret.append(task)
211 else:
212 missed.append(task)
213 bb.note("SState: Found no valid sstate for %s" % n)
214
215 if hasattr(bb.parse.siggen, "checkhashes"):
216 bb.parse.siggen.checkhashes(missed, ret, sq_fn, sq_task, sq_hash, sq_hashfn, d)
217
218 return ret
219
diff --git a/bitbake/lib/bb/tests/runqueue-tests/classes/image.bbclass b/bitbake/lib/bb/tests/runqueue-tests/classes/image.bbclass
new file mode 100644
index 0000000000..da9ff11064
--- /dev/null
+++ b/bitbake/lib/bb/tests/runqueue-tests/classes/image.bbclass
@@ -0,0 +1,5 @@
1do_rootfs[recrdeptask] += "do_package_write_deb do_package_qa"
2do_rootfs[recrdeptask] += "do_package_write_ipk do_package_qa"
3do_rootfs[recrdeptask] += "do_package_write_rpm do_package_qa
4do_rootfs[recrdeptask] += "do_packagedata"
5do_rootfs[recrdeptask] += "do_populate_lic"
diff --git a/bitbake/lib/bb/tests/runqueue-tests/classes/native.bbclass b/bitbake/lib/bb/tests/runqueue-tests/classes/native.bbclass
new file mode 100644
index 0000000000..7eaaee54ad
--- /dev/null
+++ b/bitbake/lib/bb/tests/runqueue-tests/classes/native.bbclass
@@ -0,0 +1,2 @@
1RECIPERDEPTASK = "do_populate_sysroot"
2do_populate_sysroot[rdeptask] = "${RECIPERDEPTASK}"
diff --git a/bitbake/lib/bb/tests/runqueue-tests/conf/bitbake.conf b/bitbake/lib/bb/tests/runqueue-tests/conf/bitbake.conf
new file mode 100644
index 0000000000..8c7b754dab
--- /dev/null
+++ b/bitbake/lib/bb/tests/runqueue-tests/conf/bitbake.conf
@@ -0,0 +1,11 @@
1CACHE = "${TOPDIR}/cache"
2THISDIR = "${@os.path.dirname(d.getVar('FILE'))}"
3COREBASE := "${@os.path.normpath(os.path.dirname(d.getVar('FILE')+'/../../'))}"
4BBFILES = "${COREBASE}/recipes/*.bb"
5PROVIDES = "${PN}"
6PN = "${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[0]}"
7PF = "${BB_CURRENT_MC}:${PN}"
8export PATH
9STAMP = "${TOPDIR}/stamps/${PN}"
10T = "${TOPDIR}/workdir/${PN}/temp"
11BB_NUMBER_THREADS = "4"
diff --git a/bitbake/lib/bb/tests/runqueue-tests/recipes/a1.bb b/bitbake/lib/bb/tests/runqueue-tests/recipes/a1.bb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/bitbake/lib/bb/tests/runqueue-tests/recipes/a1.bb
diff --git a/bitbake/lib/bb/tests/runqueue-tests/recipes/b1.bb b/bitbake/lib/bb/tests/runqueue-tests/recipes/b1.bb
new file mode 100644
index 0000000000..c0b288e5bc
--- /dev/null
+++ b/bitbake/lib/bb/tests/runqueue-tests/recipes/b1.bb
@@ -0,0 +1 @@
DEPENDS = "a1" \ No newline at end of file
diff --git a/bitbake/lib/bb/tests/runqueue-tests/recipes/c1.bb b/bitbake/lib/bb/tests/runqueue-tests/recipes/c1.bb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/bitbake/lib/bb/tests/runqueue-tests/recipes/c1.bb
diff --git a/bitbake/lib/bb/tests/runqueue-tests/recipes/d1.bb b/bitbake/lib/bb/tests/runqueue-tests/recipes/d1.bb
new file mode 100644
index 0000000000..5ba197515b
--- /dev/null
+++ b/bitbake/lib/bb/tests/runqueue-tests/recipes/d1.bb
@@ -0,0 +1,3 @@
1DEPENDS = "a1"
2
3do_package_setscene[depends] = "a1:do_populate_sysroot_setscene"
diff --git a/bitbake/lib/bb/tests/runqueue.py b/bitbake/lib/bb/tests/runqueue.py
new file mode 100644
index 0000000000..4a65b5b6e7
--- /dev/null
+++ b/bitbake/lib/bb/tests/runqueue.py
@@ -0,0 +1,200 @@
1#
2# BitBake Tests for runqueue task processing
3#
4# Copyright (C) 2019 Richard Purdie
5#
6# SPDX-License-Identifier: GPL-2.0-only
7#
8
9import unittest
10import bb
11import os
12import tempfile
13import subprocess
14
15#
16# TODO:
17# Add tests on task ordering (X happens before Y after Z)
18#
19
20class RunQueueTests(unittest.TestCase):
21
22 alltasks = ['package', 'fetch', 'unpack', 'patch', 'prepare_recipe_sysroot', 'configure',
23 'compile', 'install', 'packagedata', 'package_qa', 'package_write_rpm', 'package_write_ipk',
24 'populate_sysroot', 'build']
25 a1_sstatevalid = "a1:do_package a1:do_package_qa a1:do_packagedata a1:do_package_write_ipk a1:do_package_write_rpm a1:do_populate_lic a1:do_populate_sysroot"
26 b1_sstatevalid = "b1:do_package b1:do_package_qa b1:do_packagedata b1:do_package_write_ipk b1:do_package_write_rpm b1:do_populate_lic b1:do_populate_sysroot"
27
28 def run_bitbakecmd(self, cmd, builddir, sstatevalid="", slowtasks="", extraenv=None):
29 env = os.environ.copy()
30 env["BBPATH"] = os.path.realpath(os.path.join(os.path.dirname(__file__), "runqueue-tests"))
31 env["BB_ENV_EXTRAWHITE"] = "SSTATEVALID SLOWTASKS"
32 env["SSTATEVALID"] = sstatevalid
33 env["SLOWTASKS"] = slowtasks
34 if extraenv:
35 for k in extraenv:
36 env[k] = extraenv[k]
37 env["BB_ENV_EXTRAWHITE"] = env["BB_ENV_EXTRAWHITE"] + " " + k
38 try:
39 output = subprocess.check_output(cmd, env=env, stderr=subprocess.STDOUT,universal_newlines=True, cwd=builddir)
40 except subprocess.CalledProcessError as e:
41 self.fail("Command %s failed with %s" % (cmd, e.output))
42 tasks = []
43 with open(builddir + "/task.log", "r") as f:
44 tasks = [line.rstrip() for line in f]
45 return tasks
46
47 def test_no_setscenevalid(self):
48 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
49 cmd = ["bitbake", "a1"]
50 sstatevalid = ""
51 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
52 expected = ['a1:' + x for x in self.alltasks]
53 self.assertEqual(set(tasks), set(expected))
54
55 def test_single_setscenevalid(self):
56 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
57 cmd = ["bitbake", "a1"]
58 sstatevalid = "a1:do_package"
59 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
60 expected = ['a1:package_setscene', 'a1:fetch', 'a1:unpack', 'a1:patch', 'a1:prepare_recipe_sysroot', 'a1:configure',
61 'a1:compile', 'a1:install', 'a1:packagedata', 'a1:package_qa', 'a1:package_write_rpm', 'a1:package_write_ipk',
62 'a1:populate_sysroot', 'a1:build']
63 self.assertEqual(set(tasks), set(expected))
64
65 def test_intermediate_setscenevalid(self):
66 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
67 cmd = ["bitbake", "a1"]
68 sstatevalid = "a1:do_package a1:do_populate_sysroot"
69 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
70 expected = ['a1:package_setscene', 'a1:packagedata', 'a1:package_qa', 'a1:package_write_rpm', 'a1:package_write_ipk',
71 'a1:populate_sysroot_setscene', 'a1:build']
72 self.assertEqual(set(tasks), set(expected))
73
74 def test_intermediate_notcovered(self):
75 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
76 cmd = ["bitbake", "a1"]
77 sstatevalid = "a1:do_package_qa a1:do_packagedata a1:do_package_write_ipk a1:do_package_write_rpm a1:do_populate_lic a1:do_populate_sysroot"
78 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
79 expected = ['a1:package_write_ipk_setscene', 'a1:package_write_rpm_setscene', 'a1:packagedata_setscene',
80 'a1:package_qa_setscene', 'a1:build', 'a1:populate_sysroot_setscene']
81 self.assertEqual(set(tasks), set(expected))
82
83 def test_all_setscenevalid(self):
84 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
85 cmd = ["bitbake", "a1"]
86 sstatevalid = self.a1_sstatevalid
87 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
88 expected = ['a1:package_write_ipk_setscene', 'a1:package_write_rpm_setscene', 'a1:packagedata_setscene',
89 'a1:package_qa_setscene', 'a1:build', 'a1:populate_sysroot_setscene']
90 self.assertEqual(set(tasks), set(expected))
91
92 def test_no_settasks(self):
93 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
94 cmd = ["bitbake", "a1", "-c", "patch"]
95 sstatevalid = self.a1_sstatevalid
96 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
97 expected = ['a1:fetch', 'a1:unpack', 'a1:patch']
98 self.assertEqual(set(tasks), set(expected))
99
100 # Test targets with intermediate setscene tasks alongside a target with no intermediate setscene tasks
101 def test_mixed_direct_tasks_setscene_tasks(self):
102 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
103 cmd = ["bitbake", "c1:do_patch", "a1"]
104 sstatevalid = self.a1_sstatevalid
105 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
106 expected = ['c1:fetch', 'c1:unpack', 'c1:patch', 'a1:package_write_ipk_setscene', 'a1:package_write_rpm_setscene', 'a1:packagedata_setscene',
107 'a1:package_qa_setscene', 'a1:build', 'a1:populate_sysroot_setscene']
108 self.assertEqual(set(tasks), set(expected))
109
110 # This test slows down the execution of do_package_setscene until after other real tasks have
111 # started running which tests for a bug where tasks were being lost from the buildable list of real
112 # tasks if they weren't in tasks_covered or tasks_notcovered
113 def test_slow_setscene(self):
114 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
115 cmd = ["bitbake", "a1"]
116 sstatevalid = "a1:do_package"
117 slowtasks = "a1:package_setscene"
118 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, slowtasks)
119 expected = ['a1:package_setscene', 'a1:fetch', 'a1:unpack', 'a1:patch', 'a1:prepare_recipe_sysroot', 'a1:configure',
120 'a1:compile', 'a1:install', 'a1:packagedata', 'a1:package_qa', 'a1:package_write_rpm', 'a1:package_write_ipk',
121 'a1:populate_sysroot', 'a1:build']
122 self.assertEqual(set(tasks), set(expected))
123
124 def test_setscenewhitelist(self):
125 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
126 cmd = ["bitbake", "a1"]
127 extraenv = {
128 "BB_SETSCENE_ENFORCE" : "1",
129 "BB_SETSCENE_ENFORCE_WHITELIST" : "a1:do_package_write_rpm a1:do_build"
130 }
131 sstatevalid = "a1:do_package a1:do_package_qa a1:do_packagedata a1:do_package_write_ipk a1:do_populate_lic a1:do_populate_sysroot"
132 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv)
133 expected = ['a1:packagedata_setscene', 'a1:package_qa_setscene', 'a1:package_write_ipk_setscene',
134 'a1:populate_sysroot_setscene', 'a1:package_setscene']
135 self.assertEqual(set(tasks), set(expected))
136
137 # Tests for problems with dependencies between setscene tasks
138 def test_no_setscenevalid_harddeps(self):
139 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
140 cmd = ["bitbake", "d1"]
141 sstatevalid = ""
142 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
143 expected = ['a1:package', 'a1:fetch', 'a1:unpack', 'a1:patch', 'a1:prepare_recipe_sysroot', 'a1:configure',
144 'a1:compile', 'a1:install', 'a1:packagedata', 'a1:package_write_rpm', 'a1:package_write_ipk',
145 'a1:populate_sysroot', 'd1:package', 'd1:fetch', 'd1:unpack', 'd1:patch', 'd1:prepare_recipe_sysroot', 'd1:configure',
146 'd1:compile', 'd1:install', 'd1:packagedata', 'd1:package_qa', 'd1:package_write_rpm', 'd1:package_write_ipk',
147 'd1:populate_sysroot', 'd1:build']
148 self.assertEqual(set(tasks), set(expected))
149
150 def test_no_setscenevalid_withdeps(self):
151 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
152 cmd = ["bitbake", "b1"]
153 sstatevalid = ""
154 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
155 expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks]
156 expected.remove('a1:build')
157 expected.remove('a1:package_qa')
158 self.assertEqual(set(tasks), set(expected))
159
160 def test_single_a1_setscenevalid_withdeps(self):
161 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
162 cmd = ["bitbake", "b1"]
163 sstatevalid = "a1:do_package"
164 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
165 expected = ['a1:package_setscene', 'a1:fetch', 'a1:unpack', 'a1:patch', 'a1:prepare_recipe_sysroot', 'a1:configure',
166 'a1:compile', 'a1:install', 'a1:packagedata', 'a1:package_write_rpm', 'a1:package_write_ipk',
167 'a1:populate_sysroot'] + ['b1:' + x for x in self.alltasks]
168 self.assertEqual(set(tasks), set(expected))
169
170 def test_single_b1_setscenevalid_withdeps(self):
171 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
172 cmd = ["bitbake", "b1"]
173 sstatevalid = "b1:do_package"
174 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
175 expected = ['a1:package', 'a1:fetch', 'a1:unpack', 'a1:patch', 'a1:prepare_recipe_sysroot', 'a1:configure',
176 'a1:compile', 'a1:install', 'a1:packagedata', 'a1:package_write_rpm', 'a1:package_write_ipk',
177 'a1:populate_sysroot', 'b1:package_setscene'] + ['b1:' + x for x in self.alltasks]
178 expected.remove('b1:package')
179 self.assertEqual(set(tasks), set(expected))
180
181 def test_intermediate_setscenevalid_withdeps(self):
182 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
183 cmd = ["bitbake", "b1"]
184 sstatevalid = "a1:do_package a1:do_populate_sysroot b1:do_package"
185 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
186 expected = ['a1:package_setscene', 'a1:packagedata', 'a1:package_write_rpm', 'a1:package_write_ipk',
187 'a1:populate_sysroot_setscene', 'b1:package_setscene'] + ['b1:' + x for x in self.alltasks]
188 expected.remove('b1:package')
189 self.assertEqual(set(tasks), set(expected))
190
191 def test_all_setscenevalid_withdeps(self):
192 with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
193 cmd = ["bitbake", "b1"]
194 sstatevalid = self.a1_sstatevalid + " " + self.b1_sstatevalid
195 tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid)
196 expected = ['a1:package_write_ipk_setscene', 'a1:package_write_rpm_setscene', 'a1:packagedata_setscene',
197 'b1:build', 'a1:populate_sysroot_setscene', 'b1:package_write_ipk_setscene', 'b1:package_write_rpm_setscene',
198 'b1:packagedata_setscene', 'b1:package_qa_setscene', 'b1:populate_sysroot_setscene']
199 self.assertEqual(set(tasks), set(expected))
200