summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2018-07-13 21:59:22 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-07-16 13:21:35 +0100
commita85015b109b9f9ad767f271a604af72ce1b8feec (patch)
treedf9789602c09c2cda6c439b80b88b838ec91ddd1 /meta/lib/oeqa
parent6b219f64c403361926a464925f0a32b2b3d27ffc (diff)
downloadpoky-a85015b109b9f9ad767f271a604af72ce1b8feec.tar.gz
devtool: Split tests into multiple classes
This allows better parallelism between the different tests as currently this block takes the longest time to execute. devtool tests are still all grouped into the "devtool" module for ease of exection. This also makes it easier to execute some subset of devtool tests for testing devtool changes. (From OE-Core rev: 75148c190dd4823947557e9a07f1722e817c1fea) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oeqa')
-rw-r--r--meta/lib/oeqa/selftest/cases/devtool.py113
1 files changed, 61 insertions, 52 deletions
diff --git a/meta/lib/oeqa/selftest/cases/devtool.py b/meta/lib/oeqa/selftest/cases/devtool.py
index f2b0f59677..43a66c8e28 100644
--- a/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/meta/lib/oeqa/selftest/cases/devtool.py
@@ -13,6 +13,58 @@ from oeqa.core.decorator.oeid import OETestID
13 13
14class DevtoolBase(OESelftestTestCase): 14class DevtoolBase(OESelftestTestCase):
15 15
16 @classmethod
17 def setUpClass(cls):
18 super(DevtoolBase, cls).setUpClass()
19 bb_vars = get_bb_vars(['TOPDIR', 'SSTATE_DIR'])
20 cls.original_sstate = bb_vars['SSTATE_DIR']
21 cls.devtool_sstate = os.path.join(bb_vars['TOPDIR'], 'sstate_devtool')
22 cls.sstate_conf = 'SSTATE_DIR = "%s"\n' % cls.devtool_sstate
23 cls.sstate_conf += ('SSTATE_MIRRORS += "file://.* file:///%s/PATH"\n'
24 % cls.original_sstate)
25
26 @classmethod
27 def tearDownClass(cls):
28 cls.logger.debug('Deleting devtool sstate cache on %s' % cls.devtool_sstate)
29 runCmd('rm -rf %s' % cls.devtool_sstate)
30 super(DevtoolBase, cls).tearDownClass()
31
32 def setUp(self):
33 """Test case setup function"""
34 super(DevtoolBase, self).setUp()
35 self.workspacedir = os.path.join(self.builddir, 'workspace')
36 self.assertTrue(not os.path.exists(self.workspacedir),
37 'This test cannot be run with a workspace directory '
38 'under the build directory')
39 self.append_config(self.sstate_conf)
40
41 def _check_src_repo(self, repo_dir):
42 """Check srctree git repository"""
43 self.assertTrue(os.path.isdir(os.path.join(repo_dir, '.git')),
44 'git repository for external source tree not found')
45 result = runCmd('git status --porcelain', cwd=repo_dir)
46 self.assertEqual(result.output.strip(), "",
47 'Created git repo is not clean')
48 result = runCmd('git symbolic-ref HEAD', cwd=repo_dir)
49 self.assertEqual(result.output.strip(), "refs/heads/devtool",
50 'Wrong branch in git repo')
51
52 def _check_repo_status(self, repo_dir, expected_status):
53 """Check the worktree status of a repository"""
54 result = runCmd('git status . --porcelain',
55 cwd=repo_dir)
56 for line in result.output.splitlines():
57 for ind, (f_status, fn_re) in enumerate(expected_status):
58 if re.match(fn_re, line[3:]):
59 if f_status != line[:2]:
60 self.fail('Unexpected status in line: %s' % line)
61 expected_status.pop(ind)
62 break
63 else:
64 self.fail('Unexpected modified file in line: %s' % line)
65 if expected_status:
66 self.fail('Missing file changes: %s' % expected_status)
67
16 def _test_recipe_contents(self, recipefile, checkvars, checkinherits): 68 def _test_recipe_contents(self, recipefile, checkvars, checkinherits):
17 with open(recipefile, 'r') as f: 69 with open(recipefile, 'r') as f:
18 invar = None 70 invar = None
@@ -116,58 +168,6 @@ class DevtoolBase(OESelftestTestCase):
116 168
117class DevtoolTests(DevtoolBase): 169class DevtoolTests(DevtoolBase):
118 170
119 @classmethod
120 def setUpClass(cls):
121 super(DevtoolTests, cls).setUpClass()
122 bb_vars = get_bb_vars(['TOPDIR', 'SSTATE_DIR'])
123 cls.original_sstate = bb_vars['SSTATE_DIR']
124 cls.devtool_sstate = os.path.join(bb_vars['TOPDIR'], 'sstate_devtool')
125 cls.sstate_conf = 'SSTATE_DIR = "%s"\n' % cls.devtool_sstate
126 cls.sstate_conf += ('SSTATE_MIRRORS += "file://.* file:///%s/PATH"\n'
127 % cls.original_sstate)
128
129 @classmethod
130 def tearDownClass(cls):
131 cls.logger.debug('Deleting devtool sstate cache on %s' % cls.devtool_sstate)
132 runCmd('rm -rf %s' % cls.devtool_sstate)
133 super(DevtoolTests, cls).tearDownClass()
134
135 def setUp(self):
136 """Test case setup function"""
137 super(DevtoolTests, self).setUp()
138 self.workspacedir = os.path.join(self.builddir, 'workspace')
139 self.assertTrue(not os.path.exists(self.workspacedir),
140 'This test cannot be run with a workspace directory '
141 'under the build directory')
142 self.append_config(self.sstate_conf)
143
144 def _check_src_repo(self, repo_dir):
145 """Check srctree git repository"""
146 self.assertTrue(os.path.isdir(os.path.join(repo_dir, '.git')),
147 'git repository for external source tree not found')
148 result = runCmd('git status --porcelain', cwd=repo_dir)
149 self.assertEqual(result.output.strip(), "",
150 'Created git repo is not clean')
151 result = runCmd('git symbolic-ref HEAD', cwd=repo_dir)
152 self.assertEqual(result.output.strip(), "refs/heads/devtool",
153 'Wrong branch in git repo')
154
155 def _check_repo_status(self, repo_dir, expected_status):
156 """Check the worktree status of a repository"""
157 result = runCmd('git status . --porcelain',
158 cwd=repo_dir)
159 for line in result.output.splitlines():
160 for ind, (f_status, fn_re) in enumerate(expected_status):
161 if re.match(fn_re, line[3:]):
162 if f_status != line[:2]:
163 self.fail('Unexpected status in line: %s' % line)
164 expected_status.pop(ind)
165 break
166 else:
167 self.fail('Unexpected modified file in line: %s' % line)
168 if expected_status:
169 self.fail('Missing file changes: %s' % expected_status)
170
171 @OETestID(1158) 171 @OETestID(1158)
172 def test_create_workspace(self): 172 def test_create_workspace(self):
173 # Check preconditions 173 # Check preconditions
@@ -189,6 +189,8 @@ class DevtoolTests(DevtoolBase):
189 self.assertNotIn(tempdir, result.output) 189 self.assertNotIn(tempdir, result.output)
190 self.assertIn(self.workspacedir, result.output) 190 self.assertIn(self.workspacedir, result.output)
191 191
192class DevtoolAddTests(DevtoolBase):
193
192 @OETestID(1159) 194 @OETestID(1159)
193 def test_devtool_add(self): 195 def test_devtool_add(self):
194 # Fetch source 196 # Fetch source
@@ -444,6 +446,8 @@ class DevtoolTests(DevtoolBase):
444 checkvars['SRC_URI'] = url.replace(testver, '${PV}') 446 checkvars['SRC_URI'] = url.replace(testver, '${PV}')
445 self._test_recipe_contents(recipefile, checkvars, []) 447 self._test_recipe_contents(recipefile, checkvars, [])
446 448
449class DevtoolModifyTests(DevtoolBase):
450
447 @OETestID(1164) 451 @OETestID(1164)
448 def test_devtool_modify(self): 452 def test_devtool_modify(self):
449 import oe.path 453 import oe.path
@@ -689,6 +693,7 @@ class DevtoolTests(DevtoolBase):
689 self._check_src_repo(tempdir) 693 self._check_src_repo(tempdir)
690 # This is probably sufficient 694 # This is probably sufficient
691 695
696class DevtoolUpdateTests(DevtoolBase):
692 697
693 @OETestID(1169) 698 @OETestID(1169)
694 def test_devtool_update_recipe(self): 699 def test_devtool_update_recipe(self):
@@ -1105,6 +1110,8 @@ class DevtoolTests(DevtoolBase):
1105 expected_status = [] 1110 expected_status = []
1106 self._check_repo_status(os.path.dirname(recipefile), expected_status) 1111 self._check_repo_status(os.path.dirname(recipefile), expected_status)
1107 1112
1113class DevtoolExtractTests(DevtoolBase):
1114
1108 @OETestID(1163) 1115 @OETestID(1163)
1109 def test_devtool_extract(self): 1116 def test_devtool_extract(self):
1110 tempdir = tempfile.mkdtemp(prefix='devtoolqa') 1117 tempdir = tempfile.mkdtemp(prefix='devtoolqa')
@@ -1274,6 +1281,8 @@ class DevtoolTests(DevtoolBase):
1274 if reqpkgs: 1281 if reqpkgs:
1275 self.fail('The following packages were not present in the image as expected: %s' % ', '.join(reqpkgs)) 1282 self.fail('The following packages were not present in the image as expected: %s' % ', '.join(reqpkgs))
1276 1283
1284class DevtoolUpgradeTests(DevtoolBase):
1285
1277 @OETestID(1367) 1286 @OETestID(1367)
1278 def test_devtool_upgrade(self): 1287 def test_devtool_upgrade(self):
1279 # Check preconditions 1288 # Check preconditions