summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/selftest/cases/runqemu.py
diff options
context:
space:
mode:
authorYeoh Ee Peng <ee.peng.yeoh@intel.com>2018-04-09 18:28:32 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-04-20 08:12:17 +0100
commita0edc4917a78c6a9e820e556e544ba5630a6d07a (patch)
treeb41d6e56de31d954acee9e8d84ab8651087d7452 /meta/lib/oeqa/selftest/cases/runqemu.py
parent47651bd6aa0dea1073248e1b0eb4164d92b25d77 (diff)
downloadpoky-a0edc4917a78c6a9e820e556e544ba5630a6d07a.tar.gz
oe-selftest: runqemu: add tests for qemu boot and shutdown
QA team were testing qemu boot image and shutdown on each qemu architecture manually. Add automated test to test qemu boot on ext4 and nfs, finally check that it can shutdown properly. (From OE-Core rev: 1df5f2dff832528905ff6fcf1d324619fb3d307f) Signed-off-by: Yeoh Ee Peng <ee.peng.yeoh@intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oeqa/selftest/cases/runqemu.py')
-rw-r--r--meta/lib/oeqa/selftest/cases/runqemu.py70
1 files changed, 68 insertions, 2 deletions
diff --git a/meta/lib/oeqa/selftest/cases/runqemu.py b/meta/lib/oeqa/selftest/cases/runqemu.py
index 47d41f5218..f3ff015cba 100644
--- a/meta/lib/oeqa/selftest/cases/runqemu.py
+++ b/meta/lib/oeqa/selftest/cases/runqemu.py
@@ -3,9 +3,10 @@
3# 3#
4 4
5import re 5import re
6 6import tempfile
7import time
7from oeqa.selftest.case import OESelftestTestCase 8from oeqa.selftest.case import OESelftestTestCase
8from oeqa.utils.commands import bitbake, runqemu, get_bb_var 9from oeqa.utils.commands import bitbake, runqemu, get_bb_var, runCmd
9from oeqa.core.decorator.oeid import OETestID 10from oeqa.core.decorator.oeid import OETestID
10 11
11class RunqemuTests(OESelftestTestCase): 12class RunqemuTests(OESelftestTestCase):
@@ -136,3 +137,68 @@ SYSLINUX_TIMEOUT = "10"
136 cmd = "%s %s" % (self.cmd_common, rootfs) 137 cmd = "%s %s" % (self.cmd_common, rootfs)
137 with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu: 138 with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu:
138 self.assertTrue(qemu.runner.logged, "Failed: %s" % cmd) 139 self.assertTrue(qemu.runner.logged, "Failed: %s" % cmd)
140
141# This test was designed as a separate class to test that shutdown
142# command will shutdown qemu as expected on each qemu architecture
143# based on the MACHINE configuration inside the config file
144# (eg. local.conf).
145#
146# This was different compared to RunqemuTests, where RunqemuTests was
147# dedicated for MACHINE=qemux86-64 where it test that qemux86-64 will
148# bootup various filesystem types, including live image(iso and hddimg)
149# where live image was not supported on all qemu architecture.
150class QemuTest(OESelftestTestCase):
151
152 @classmethod
153 def setUpClass(cls):
154 super(QemuTest, cls).setUpClass()
155 cls.recipe = 'core-image-minimal'
156 cls.machine = get_bb_var('MACHINE')
157 cls.deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
158 cls.cmd_common = "runqemu nographic"
159 cls.qemuboot_conf = "%s-%s.qemuboot.conf" % (cls.recipe, cls.machine)
160 cls.qemuboot_conf = os.path.join(cls.deploy_dir_image, cls.qemuboot_conf)
161 bitbake(cls.recipe)
162
163 def _start_qemu_shutdown_check_if_shutdown_succeeded(self, qemu, timeout):
164 qemu.run_serial("shutdown -h now")
165 # Stop thread will stop the LoggingThread instance used for logging
166 # qemu through serial console, stop thread will prevent this code
167 # from facing exception (Console connection closed unexpectedly)
168 # when qemu was shutdown by the above shutdown command
169 qemu.runner.stop_thread()
170 time_track = 0
171 while True:
172 is_alive = qemu.check()
173 if not is_alive:
174 return True
175 if time_track > timeout:
176 return False
177 time.sleep(1)
178 time_track += 1
179
180 def test_qemu_can_shutdown(self):
181 self.assertExists(self.qemuboot_conf)
182 cmd = "%s %s" % (self.cmd_common, self.qemuboot_conf)
183 shutdown_timeout = 120
184 with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu:
185 qemu_shutdown_succeeded = self._start_qemu_shutdown_check_if_shutdown_succeeded(qemu, shutdown_timeout)
186 self.assertTrue(qemu_shutdown_succeeded, 'Failed: %s does not shutdown within timeout(%s)' % (self.machine, shutdown_timeout))
187
188 def test_qemu_can_boot_nfs_and_shutdown(self):
189 self.assertExists(self.qemuboot_conf)
190 bitbake('meta-ide-support')
191 rootfs_tar = "%s-%s.tar.bz2" % (self.recipe, self.machine)
192 rootfs_tar = os.path.join(self.deploy_dir_image, rootfs_tar)
193 self.assertExists(rootfs_tar)
194 tmpdir = tempfile.mkdtemp(prefix='qemu_nfs')
195 tmpdir_nfs = os.path.join(tmpdir, 'nfs')
196 cmd_extract_nfs = 'runqemu-extract-sdk %s %s' % (rootfs_tar, tmpdir_nfs)
197 result = runCmd(cmd_extract_nfs)
198 self.assertEqual(0, result.status, "runqemu-extract-sdk didn't run as expected. %s" % result.output)
199 cmd = "%s nfs %s %s" % (self.cmd_common, self.qemuboot_conf, tmpdir_nfs)
200 shutdown_timeout = 120
201 with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu:
202 qemu_shutdown_succeeded = self._start_qemu_shutdown_check_if_shutdown_succeeded(qemu, shutdown_timeout)
203 self.assertTrue(qemu_shutdown_succeeded, 'Failed: %s does not shutdown within timeout(%s)' % (self.machine, shutdown_timeout))
204 runCmd('rm -rf %s' % tmpdir)