blob: 2ad89490fcf177cda23a056e06146179ef44e5ea [file] [log] [blame]
Brad Bishopc342db32019-05-15 21:57:59 -04001#
2# SPDX-License-Identifier: MIT
3#
4
Brad Bishopd7bf8c12018-02-25 22:55:05 -05005from oeqa.selftest.case import OESelftestTestCase
6from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars, runqemu
Patrick Williams45852732022-04-02 08:58:32 -05007from oeqa.core.decorator import OETestTag
Brad Bishopd7bf8c12018-02-25 22:55:05 -05008import os
Brad Bishopd7bf8c12018-02-25 22:55:05 -05009import tempfile
Brad Bishop19323692019-04-05 15:28:33 -040010import oe.lsb
Andrew Geissler82c905d2020-04-13 13:39:40 -050011from oeqa.core.decorator.data import skipIfNotQemu
Brad Bishopd7bf8c12018-02-25 22:55:05 -050012
13class TestExport(OESelftestTestCase):
14
Patrick Williams45852732022-04-02 08:58:32 -050015 @OETestTag("runqemu")
Brad Bishopd7bf8c12018-02-25 22:55:05 -050016 def test_testexport_basic(self):
17 """
18 Summary: Check basic testexport functionality with only ping test enabled.
19 Expected: 1. testexport directory must be created.
20 2. runexported.py must run without any error/exception.
21 3. ping test must succeed.
22 Product: oe-core
23 Author: Mariano Lopez <mariano.lopez@intel.com>
24 """
25
26 features = 'INHERIT += "testexport"\n'
27 # These aren't the actual IP addresses but testexport class needs something defined
28 features += 'TEST_SERVER_IP = "192.168.7.1"\n'
29 features += 'TEST_TARGET_IP = "192.168.7.1"\n'
30 features += 'TEST_SUITES = "ping"\n'
31 self.write_config(features)
32
33 # Build tesexport for core-image-minimal
34 bitbake('core-image-minimal')
35 bitbake('-c testexport core-image-minimal')
36
37 testexport_dir = get_bb_var('TEST_EXPORT_DIR', 'core-image-minimal')
38
39 # Verify if TEST_EXPORT_DIR was created
40 isdir = os.path.isdir(testexport_dir)
41 self.assertEqual(True, isdir, 'Failed to create testexport dir: %s' % testexport_dir)
42
43 with runqemu('core-image-minimal') as qemu:
44 # Attempt to run runexported.py to perform ping test
45 test_path = os.path.join(testexport_dir, "oe-test")
46 data_file = os.path.join(testexport_dir, 'data', 'testdata.json')
47 manifest = os.path.join(testexport_dir, 'data', 'manifest')
48 cmd = ("%s runtime --test-data-file %s --packages-manifest %s "
49 "--target-ip %s --server-ip %s --quiet"
50 % (test_path, data_file, manifest, qemu.ip, qemu.server_ip))
51 result = runCmd(cmd)
52 # Verify ping test was succesful
53 self.assertEqual(0, result.status, 'oe-test runtime returned a non 0 status')
54
Brad Bishopd7bf8c12018-02-25 22:55:05 -050055 def test_testexport_sdk(self):
56 """
57 Summary: Check sdk functionality for testexport.
58 Expected: 1. testexport directory must be created.
59 2. SDK tarball must exists.
60 3. Uncompressing of tarball must succeed.
61 4. Check if the SDK directory is added to PATH.
62 5. Run tar from the SDK directory.
63 Product: oe-core
64 Author: Mariano Lopez <mariano.lopez@intel.com>
65 """
66
67 features = 'INHERIT += "testexport"\n'
68 # These aren't the actual IP addresses but testexport class needs something defined
69 features += 'TEST_SERVER_IP = "192.168.7.1"\n'
70 features += 'TEST_TARGET_IP = "192.168.7.1"\n'
71 features += 'TEST_SUITES = "ping"\n'
72 features += 'TEST_EXPORT_SDK_ENABLED = "1"\n'
73 features += 'TEST_EXPORT_SDK_PACKAGES = "nativesdk-tar"\n'
74 self.write_config(features)
75
76 # Build tesexport for core-image-minimal
77 bitbake('core-image-minimal')
78 bitbake('-c testexport core-image-minimal')
79
80 needed_vars = ['TEST_EXPORT_DIR', 'TEST_EXPORT_SDK_DIR', 'TEST_EXPORT_SDK_NAME']
81 bb_vars = get_bb_vars(needed_vars, 'core-image-minimal')
82 testexport_dir = bb_vars['TEST_EXPORT_DIR']
83 sdk_dir = bb_vars['TEST_EXPORT_SDK_DIR']
84 sdk_name = bb_vars['TEST_EXPORT_SDK_NAME']
85
86 # Check for SDK
87 tarball_name = "%s.sh" % sdk_name
88 tarball_path = os.path.join(testexport_dir, sdk_dir, tarball_name)
89 msg = "Couldn't find SDK tarball: %s" % tarball_path
90 self.assertEqual(os.path.isfile(tarball_path), True, msg)
91
Andrew Geissler09036742021-06-25 14:25:14 -050092 with tempfile.TemporaryDirectory() as tmpdirname:
93 # Extract SDK and run tar from SDK
94 result = runCmd("%s -y -d %s" % (tarball_path, tmpdirname))
95 self.assertEqual(0, result.status, "Couldn't extract SDK")
Brad Bishopd7bf8c12018-02-25 22:55:05 -050096
Andrew Geissler09036742021-06-25 14:25:14 -050097 env_script = result.output.split()[-1]
98 result = runCmd(". %s; which tar" % env_script, shell=True)
99 self.assertEqual(0, result.status, "Couldn't setup SDK environment")
100 is_sdk_tar = True if tmpdirname in result.output else False
101 self.assertTrue(is_sdk_tar, "Couldn't setup SDK environment")
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500102
Andrew Geissler09036742021-06-25 14:25:14 -0500103 tar_sdk = result.output
104 result = runCmd("%s --version" % tar_sdk)
105 self.assertEqual(0, result.status, "Couldn't run tar from SDK")
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500106
107
Patrick Williams45852732022-04-02 08:58:32 -0500108@OETestTag("runqemu")
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500109class TestImage(OESelftestTestCase):
110
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500111 def test_testimage_install(self):
112 """
113 Summary: Check install packages functionality for testimage/testexport.
114 Expected: 1. Import tests from a directory other than meta.
115 2. Check install/uninstall of socat.
116 Product: oe-core
117 Author: Mariano Lopez <mariano.lopez@intel.com>
118 """
119 if get_bb_var('DISTRO') == 'poky-tiny':
120 self.skipTest('core-image-full-cmdline not buildable for poky-tiny')
121
122 features = 'INHERIT += "testimage"\n'
Patrick Williams213cb262021-08-07 19:21:33 -0500123 features += 'IMAGE_INSTALL:append = " libssl"\n'
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500124 features += 'TEST_SUITES = "ping ssh selftest"\n'
125 self.write_config(features)
126
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500127 bitbake('core-image-full-cmdline socat')
128 bitbake('-c testimage core-image-full-cmdline')
129
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500130 def test_testimage_dnf(self):
131 """
132 Summary: Check package feeds functionality for dnf
133 Expected: 1. Check that remote package feeds can be accessed
134 Product: oe-core
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800135 Author: Alexander Kanavin <alex.kanavin@gmail.com>
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500136 """
137 if get_bb_var('DISTRO') == 'poky-tiny':
138 self.skipTest('core-image-full-cmdline not buildable for poky-tiny')
139
140 features = 'INHERIT += "testimage"\n'
141 features += 'TEST_SUITES = "ping ssh dnf_runtime dnf.DnfBasicTest.test_dnf_help"\n'
142 # We don't yet know what the server ip and port will be - they will be patched
143 # in at the start of the on-image test
144 features += 'PACKAGE_FEED_URIS = "http://bogus_ip:bogus_port"\n'
145 features += 'EXTRA_IMAGE_FEATURES += "package-management"\n'
146 features += 'PACKAGE_CLASSES = "package_rpm"\n'
147
Brad Bishop6f8dcde2018-10-16 10:47:12 +0800148 bitbake('gnupg-native -c addto_recipe_sysroot')
149
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500150 # Enable package feed signing
151 self.gpg_home = tempfile.mkdtemp(prefix="oeqa-feed-sign-")
Brad Bishop96ff1982019-08-19 13:50:42 -0400152 self.track_for_cleanup(self.gpg_home)
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500153 signing_key_dir = os.path.join(self.testlayer_path, 'files', 'signing')
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500154 runCmd('gpgconf --list-dirs --homedir %s; gpg -v --batch --homedir %s --import %s' % (self.gpg_home, self.gpg_home, os.path.join(signing_key_dir, 'key.secret')), native_sysroot=get_bb_var("RECIPE_SYSROOT_NATIVE", "gnupg-native"), shell=True)
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500155 features += 'INHERIT += "sign_package_feed"\n'
156 features += 'PACKAGE_FEED_GPG_NAME = "testuser"\n'
157 features += 'PACKAGE_FEED_GPG_PASSPHRASE_FILE = "%s"\n' % os.path.join(signing_key_dir, 'key.passphrase')
158 features += 'GPG_PATH = "%s"\n' % self.gpg_home
Andrew Geisslerf0343792020-11-18 10:42:21 -0600159 features += 'PSEUDO_IGNORE_PATHS .= ",%s"\n' % self.gpg_home
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500160 self.write_config(features)
161
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500162 bitbake('core-image-full-cmdline socat')
163 bitbake('-c testimage core-image-full-cmdline')
164
Andrew Geissler82c905d2020-04-13 13:39:40 -0500165 def test_testimage_virgl_gtk_sdl(self):
Brad Bishop19323692019-04-05 15:28:33 -0400166 """
Andrew Geissler82c905d2020-04-13 13:39:40 -0500167 Summary: Check host-assisted accelerate OpenGL functionality in qemu with gtk and SDL frontends
Brad Bishop19323692019-04-05 15:28:33 -0400168 Expected: 1. Check that virgl kernel driver is loaded and 3d acceleration is enabled
169 2. Check that kmscube demo runs without crashing.
170 Product: oe-core
171 Author: Alexander Kanavin <alex.kanavin@gmail.com>
172 """
173 if "DISPLAY" not in os.environ:
174 self.skipTest("virgl gtk test must be run inside a X session")
175 distro = oe.lsb.distro_identifier()
176 if distro and distro == 'debian-8':
177 self.skipTest('virgl isn\'t working with Debian 8')
Andrew Geisslerc182c622020-05-15 14:13:32 -0500178 if distro and distro == 'debian-9':
179 self.skipTest('virgl isn\'t working with Debian 9')
Brad Bishop64c979e2019-11-04 13:55:29 -0500180 if distro and distro == 'centos-7':
181 self.skipTest('virgl isn\'t working with Centos 7')
Andrew Geissler82c905d2020-04-13 13:39:40 -0500182 if distro and distro == 'opensuseleap-15.0':
183 self.skipTest('virgl isn\'t working with Opensuse 15.0')
Brad Bishop19323692019-04-05 15:28:33 -0400184
185 qemu_packageconfig = get_bb_var('PACKAGECONFIG', 'qemu-system-native')
Andrew Geissler1e34c2d2020-05-29 16:02:59 -0500186 qemu_distrofeatures = get_bb_var('DISTRO_FEATURES', 'qemu-system-native')
Brad Bishop19323692019-04-05 15:28:33 -0400187 features = 'INHERIT += "testimage"\n'
188 if 'gtk+' not in qemu_packageconfig:
Patrick Williams213cb262021-08-07 19:21:33 -0500189 features += 'PACKAGECONFIG:append:pn-qemu-system-native = " gtk+"\n'
Andrew Geissler82c905d2020-04-13 13:39:40 -0500190 if 'sdl' not in qemu_packageconfig:
Patrick Williams213cb262021-08-07 19:21:33 -0500191 features += 'PACKAGECONFIG:append:pn-qemu-system-native = " sdl"\n'
Andrew Geissler1e34c2d2020-05-29 16:02:59 -0500192 if 'opengl' not in qemu_distrofeatures:
Patrick Williams213cb262021-08-07 19:21:33 -0500193 features += 'DISTRO_FEATURES:append = " opengl"\n'
Brad Bishop19323692019-04-05 15:28:33 -0400194 features += 'TEST_SUITES = "ping ssh virgl"\n'
Patrick Williams213cb262021-08-07 19:21:33 -0500195 features += 'IMAGE_FEATURES:append = " ssh-server-dropbear"\n'
196 features += 'IMAGE_INSTALL:append = " kmscube"\n'
Andrew Geissler82c905d2020-04-13 13:39:40 -0500197 features_gtk = features + 'TEST_RUNQEMUPARAMS = "gtk gl"\n'
198 self.write_config(features_gtk)
199 bitbake('core-image-minimal')
200 bitbake('-c testimage core-image-minimal')
201 features_sdl = features + 'TEST_RUNQEMUPARAMS = "sdl gl"\n'
202 self.write_config(features_sdl)
Brad Bishop19323692019-04-05 15:28:33 -0400203 bitbake('core-image-minimal')
204 bitbake('-c testimage core-image-minimal')
205
Brad Bishop19323692019-04-05 15:28:33 -0400206 def test_testimage_virgl_headless(self):
207 """
208 Summary: Check host-assisted accelerate OpenGL functionality in qemu with egl-headless frontend
209 Expected: 1. Check that virgl kernel driver is loaded and 3d acceleration is enabled
210 2. Check that kmscube demo runs without crashing.
211 Product: oe-core
212 Author: Alexander Kanavin <alex.kanavin@gmail.com>
213 """
214 import subprocess, os
Andrew Geisslerd159c7f2021-09-02 21:05:58 -0500215
Andrew Geisslereff27472021-10-29 15:35:00 -0500216 distro = oe.lsb.distro_identifier()
Andrew Geissler595f6302022-01-24 19:11:47 +0000217 if distro and distro in ['debian-9', 'debian-10', 'centos-7', 'centos-8', 'ubuntu-16.04', 'ubuntu-18.04', 'almalinux-8.5']:
Andrew Geisslereff27472021-10-29 15:35:00 -0500218 self.skipTest('virgl headless cannot be tested with %s' %(distro))
219
Andrew Geissler9aee5002022-03-30 16:27:02 +0000220 render_hint = """If /dev/dri/renderD* is absent due to lack of suitable GPU, 'modprobe vgem' will create one suitable for mesa llvmpipe software renderer."""
Brad Bishop19323692019-04-05 15:28:33 -0400221 try:
222 content = os.listdir("/dev/dri")
223 if len([i for i in content if i.startswith('render')]) == 0:
Andrew Geisslereff27472021-10-29 15:35:00 -0500224 self.fail("No render nodes found in /dev/dri: %s. %s" %(content, render_hint))
Brad Bishop19323692019-04-05 15:28:33 -0400225 except FileNotFoundError:
Andrew Geisslereff27472021-10-29 15:35:00 -0500226 self.fail("/dev/dri directory does not exist; no render nodes available on this machine. %s" %(render_hint))
Brad Bishop19323692019-04-05 15:28:33 -0400227 try:
228 dripath = subprocess.check_output("pkg-config --variable=dridriverdir dri", shell=True)
229 except subprocess.CalledProcessError as e:
Andrew Geisslereff27472021-10-29 15:35:00 -0500230 self.fail("Could not determine the path to dri drivers on the host via pkg-config.\nPlease install Mesa development files (particularly, dri.pc) on the host machine.")
Andrew Geissler1e34c2d2020-05-29 16:02:59 -0500231 qemu_distrofeatures = get_bb_var('DISTRO_FEATURES', 'qemu-system-native')
Brad Bishop19323692019-04-05 15:28:33 -0400232 features = 'INHERIT += "testimage"\n'
Andrew Geissler1e34c2d2020-05-29 16:02:59 -0500233 if 'opengl' not in qemu_distrofeatures:
Patrick Williams213cb262021-08-07 19:21:33 -0500234 features += 'DISTRO_FEATURES:append = " opengl"\n'
Brad Bishop19323692019-04-05 15:28:33 -0400235 features += 'TEST_SUITES = "ping ssh virgl"\n'
Patrick Williams213cb262021-08-07 19:21:33 -0500236 features += 'IMAGE_FEATURES:append = " ssh-server-dropbear"\n'
237 features += 'IMAGE_INSTALL:append = " kmscube"\n'
Brad Bishop19323692019-04-05 15:28:33 -0400238 features += 'TEST_RUNQEMUPARAMS = "egl-headless"\n'
239 self.write_config(features)
240 bitbake('core-image-minimal')
241 bitbake('-c testimage core-image-minimal')
242
Patrick Williams45852732022-04-02 08:58:32 -0500243@OETestTag("runqemu")
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500244class Postinst(OESelftestTestCase):
Andrew Geissler82c905d2020-04-13 13:39:40 -0500245
246 def init_manager_loop(self, init_manager):
247 import oe.path
248
249 vars = get_bb_vars(("IMAGE_ROOTFS", "sysconfdir"), "core-image-minimal")
250 rootfs = vars["IMAGE_ROOTFS"]
251 self.assertIsNotNone(rootfs)
252 sysconfdir = vars["sysconfdir"]
253 self.assertIsNotNone(sysconfdir)
254 # Need to use oe.path here as sysconfdir starts with /
255 hosttestdir = oe.path.join(rootfs, sysconfdir, "postinst-test")
256 targettestdir = os.path.join(sysconfdir, "postinst-test")
257
258 for classes in ("package_rpm", "package_deb", "package_ipk"):
259 with self.subTest(init_manager=init_manager, package_class=classes):
260 features = 'CORE_IMAGE_EXTRA_INSTALL = "postinst-delayed-b"\n'
261 features += 'IMAGE_FEATURES += "package-management empty-root-password"\n'
262 features += 'PACKAGE_CLASSES = "%s"\n' % classes
263 if init_manager == "systemd":
Patrick Williams213cb262021-08-07 19:21:33 -0500264 features += 'DISTRO_FEATURES:append = " systemd"\n'
Andrew Geissler82c905d2020-04-13 13:39:40 -0500265 features += 'VIRTUAL-RUNTIME_init_manager = "systemd"\n'
266 features += 'DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"\n'
267 features += 'VIRTUAL-RUNTIME_initscripts = ""\n'
268 self.write_config(features)
269
270 bitbake('core-image-minimal')
271
272 self.assertTrue(os.path.isfile(os.path.join(hosttestdir, "rootfs")),
273 "rootfs state file was not created")
274
275 with runqemu('core-image-minimal') as qemu:
276 # Make the test echo a string and search for that as
277 # run_serial()'s status code is useless.'
278 for filename in ("rootfs", "delayed-a", "delayed-b"):
279 status, output = qemu.run_serial("test -f %s && echo found" % os.path.join(targettestdir, filename))
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600280 self.assertIn("found", output, "%s was not present on boot" % filename)
Andrew Geissler82c905d2020-04-13 13:39:40 -0500281
282
283
Patrick Williams45852732022-04-02 08:58:32 -0500284 @skipIfNotQemu()
Andrew Geissler82c905d2020-04-13 13:39:40 -0500285 def test_postinst_rootfs_and_boot_sysvinit(self):
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500286 """
287 Summary: The purpose of this test case is to verify Post-installation
288 scripts are called when rootfs is created and also test
289 that script can be delayed to run at first boot.
290 Dependencies: NA
291 Steps: 1. Add proper configuration to local.conf file
292 2. Build a "core-image-minimal" image
293 3. Verify that file created by postinst_rootfs recipe is
294 present on rootfs dir.
295 4. Boot the image created on qemu and verify that the file
296 created by postinst_boot recipe is present on image.
297 Expected: The files are successfully created during rootfs and boot
298 time for 3 different package managers: rpm,ipk,deb and
Andrew Geissler82c905d2020-04-13 13:39:40 -0500299 for initialization managers: sysvinit.
300
301 """
302 self.init_manager_loop("sysvinit")
303
304
Patrick Williams45852732022-04-02 08:58:32 -0500305 @skipIfNotQemu()
Andrew Geissler82c905d2020-04-13 13:39:40 -0500306 def test_postinst_rootfs_and_boot_systemd(self):
307 """
308 Summary: The purpose of this test case is to verify Post-installation
309 scripts are called when rootfs is created and also test
310 that script can be delayed to run at first boot.
311 Dependencies: NA
312 Steps: 1. Add proper configuration to local.conf file
313 2. Build a "core-image-minimal" image
314 3. Verify that file created by postinst_rootfs recipe is
315 present on rootfs dir.
316 4. Boot the image created on qemu and verify that the file
317 created by postinst_boot recipe is present on image.
318 Expected: The files are successfully created during rootfs and boot
319 time for 3 different package managers: rpm,ipk,deb and
320 for initialization managers: systemd.
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500321
322 """
Brad Bishop316dfdd2018-06-25 12:45:53 -0400323
Andrew Geissler82c905d2020-04-13 13:39:40 -0500324 self.init_manager_loop("systemd")
Brad Bishop316dfdd2018-06-25 12:45:53 -0400325
326
327 def test_failing_postinst(self):
328 """
329 Summary: The purpose of this test case is to verify that post-installation
330 scripts that contain errors are properly reported.
331 Expected: The scriptlet failure is properly reported.
332 The file that is created after the error in the scriptlet is not present.
333 Product: oe-core
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800334 Author: Alexander Kanavin <alex.kanavin@gmail.com>
Brad Bishop316dfdd2018-06-25 12:45:53 -0400335 """
336
337 import oe.path
338
339 vars = get_bb_vars(("IMAGE_ROOTFS", "sysconfdir"), "core-image-minimal")
340 rootfs = vars["IMAGE_ROOTFS"]
341 self.assertIsNotNone(rootfs)
342 sysconfdir = vars["sysconfdir"]
343 self.assertIsNotNone(sysconfdir)
344 # Need to use oe.path here as sysconfdir starts with /
345 hosttestdir = oe.path.join(rootfs, sysconfdir, "postinst-test")
346
347 for classes in ("package_rpm", "package_deb", "package_ipk"):
348 with self.subTest(package_class=classes):
349 features = 'CORE_IMAGE_EXTRA_INSTALL = "postinst-rootfs-failing"\n'
350 features += 'PACKAGE_CLASSES = "%s"\n' % classes
351 self.write_config(features)
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800352 bb_result = bitbake('core-image-minimal', ignore_status=True)
353 self.assertGreaterEqual(bb_result.output.find("Postinstall scriptlets of ['postinst-rootfs-failing'] have failed."), 0,
Brad Bishop316dfdd2018-06-25 12:45:53 -0400354 "Warning about a failed scriptlet not found in bitbake output: %s" %(bb_result.output))
355
356 self.assertTrue(os.path.isfile(os.path.join(hosttestdir, "rootfs-before-failure")),
357 "rootfs-before-failure file was not created")
358 self.assertFalse(os.path.isfile(os.path.join(hosttestdir, "rootfs-after-failure")),
359 "rootfs-after-failure file was created")
360
Patrick Williams45852732022-04-02 08:58:32 -0500361@OETestTag("runqemu")
Brad Bishop1d80a2e2019-11-15 16:35:03 -0500362class SystemTap(OESelftestTestCase):
363 """
364 Summary: The purpose of this test case is to verify native crosstap
365 works while talking to a target.
366 Expected: The script should successfully connect to the qemu machine
367 and run some systemtap examples on a qemu machine.
368 """
369
370 @classmethod
371 def setUpClass(cls):
372 super(SystemTap, cls).setUpClass()
373 cls.image = "core-image-minimal"
374
375 def default_config(self):
376 return """
377# These aren't the actual IP addresses but testexport class needs something defined
378TEST_SERVER_IP = "192.168.7.1"
379TEST_TARGET_IP = "192.168.7.2"
380
381EXTRA_IMAGE_FEATURES += "tools-profile dbg-pkgs"
Patrick Williams213cb262021-08-07 19:21:33 -0500382IMAGE_FEATURES:append = " ssh-server-dropbear"
Brad Bishop1d80a2e2019-11-15 16:35:03 -0500383
384# enables kernel debug symbols
Patrick Williams213cb262021-08-07 19:21:33 -0500385KERNEL_EXTRA_FEATURES:append = " features/debug/debug-kernel.scc"
386KERNEL_EXTRA_FEATURES:append = " features/systemtap/systemtap.scc"
Brad Bishop1d80a2e2019-11-15 16:35:03 -0500387
388# add systemtap run-time into target image if it is not there yet
Patrick Williams213cb262021-08-07 19:21:33 -0500389IMAGE_INSTALL:append = " systemtap-runtime"
Brad Bishop1d80a2e2019-11-15 16:35:03 -0500390"""
391
392 def test_crosstap_helloworld(self):
393 self.write_config(self.default_config())
394 bitbake('systemtap-native')
395 systemtap_examples = os.path.join(get_bb_var("WORKDIR","systemtap-native"), "usr/share/systemtap/examples")
396 bitbake(self.image)
397
398 with runqemu(self.image) as qemu:
399 cmd = "crosstap -r root@192.168.7.2 -s %s/general/helloworld.stp " % systemtap_examples
400 result = runCmd(cmd)
401 self.assertEqual(0, result.status, 'crosstap helloworld returned a non 0 status:%s' % result.output)
402
403 def test_crosstap_pstree(self):
404 self.write_config(self.default_config())
405
406 bitbake('systemtap-native')
407 systemtap_examples = os.path.join(get_bb_var("WORKDIR","systemtap-native"), "usr/share/systemtap/examples")
408 bitbake(self.image)
409
410 with runqemu(self.image) as qemu:
411 cmd = "crosstap -r root@192.168.7.2 -s %s/process/pstree.stp" % systemtap_examples
412 result = runCmd(cmd)
413 self.assertEqual(0, result.status, 'crosstap pstree returned a non 0 status:%s' % result.output)
414
415 def test_crosstap_syscalls_by_proc(self):
416 self.write_config(self.default_config())
417
418 bitbake('systemtap-native')
419 systemtap_examples = os.path.join(get_bb_var("WORKDIR","systemtap-native"), "usr/share/systemtap/examples")
420 bitbake(self.image)
421
422 with runqemu(self.image) as qemu:
423 cmd = "crosstap -r root@192.168.7.2 -s %s/process/ syscalls_by_proc.stp" % systemtap_examples
424 result = runCmd(cmd)
425 self.assertEqual(0, result.status, 'crosstap syscalls_by_proc returned a non 0 status:%s' % result.output)
426
427 def test_crosstap_syscalls_by_pid(self):
428 self.write_config(self.default_config())
429
430 bitbake('systemtap-native')
431 systemtap_examples = os.path.join(get_bb_var("WORKDIR","systemtap-native"), "usr/share/systemtap/examples")
432 bitbake(self.image)
433
434 with runqemu(self.image) as qemu:
435 cmd = "crosstap -r root@192.168.7.2 -s %s/process/ syscalls_by_pid.stp" % systemtap_examples
436 result = runCmd(cmd)
437 self.assertEqual(0, result.status, 'crosstap syscalls_by_pid returned a non 0 status:%s' % result.output)