* [PATCH v3 0/2] oeqa: Change the serial runner @ 2023-04-07 14:26 Louis Rannou 2023-04-07 14:26 ` [PATCH v3 1/2] oeqa/utils/qemurunner: change " Louis Rannou 2023-04-07 14:26 ` [PATCH v3 2/2] oeqa/selftest: change deprecated usage of run_serial Louis Rannou 0 siblings, 2 replies; 5+ messages in thread From: Louis Rannou @ 2023-04-07 14:26 UTC (permalink / raw) To: openembedded-core; +Cc: khilman, Louis Rannou The actual serial runner has a different usage compare to the ssh runner. The return status is different and failure are not raised as exceptions. Initially, I wanted to create a new run_serial_socket and modify the old run_serial to use the former. And there was a second patch that changed every call to run_serial to run_serial_socket. But that is not easy as each test can have a different manner to handle the exception. Therefore, the second patch only change dummy calls to the serial runner. Louis Rannou (2): oeqa/utils/qemurunner: change the serial runner oeqa/selftest: change deprecated usage of run_serial meta/lib/oeqa/selftest/cases/debuginfod.py | 3 +- meta/lib/oeqa/selftest/cases/gdbserver.py | 7 +-- meta/lib/oeqa/selftest/cases/locales.py | 8 +-- meta/lib/oeqa/selftest/cases/overlayfs.py | 42 ++++++++++------ meta/lib/oeqa/selftest/cases/package.py | 7 +-- meta/lib/oeqa/selftest/cases/runqemu.py | 2 +- meta/lib/oeqa/targetcontrol.py | 3 ++ meta/lib/oeqa/utils/qemurunner.py | 57 ++++++++++++++++++++++ 8 files changed, 103 insertions(+), 26 deletions(-) -- 2.40.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 1/2] oeqa/utils/qemurunner: change the serial runner 2023-04-07 14:26 [PATCH v3 0/2] oeqa: Change the serial runner Louis Rannou @ 2023-04-07 14:26 ` Louis Rannou 2023-04-07 14:26 ` [PATCH v3 2/2] oeqa/selftest: change deprecated usage of run_serial Louis Rannou 1 sibling, 0 replies; 5+ messages in thread From: Louis Rannou @ 2023-04-07 14:26 UTC (permalink / raw) To: openembedded-core; +Cc: khilman, Louis Rannou [YOCTO #15021] Create a new runner run_serial_socket which usage matches the traditional ssh runner. Its return status is 0 when the command succeeded or 0 when it failed. If an error is encountered, it raises an Exception. The previous serial runner is maintained and marked as deprecated. Signed-off-by: Louis Rannou <lrannou@baylibre.com> --- meta/lib/oeqa/targetcontrol.py | 3 ++ meta/lib/oeqa/utils/qemurunner.py | 57 +++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/meta/lib/oeqa/targetcontrol.py b/meta/lib/oeqa/targetcontrol.py index d686fe07ec..3707883da7 100644 --- a/meta/lib/oeqa/targetcontrol.py +++ b/meta/lib/oeqa/targetcontrol.py @@ -206,6 +206,9 @@ class QemuTarget(BaseTarget): def run_serial(self, command, timeout=60): return self.runner.run_serial(command, timeout=timeout) + def run_serial_socket(self, command, timeout=60): + return self.runner.run_serial_socket(command, timeout=timeout) + class SimpleRemoteTarget(BaseTarget): diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index 6734cee48d..7e1c7a7eac 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py @@ -637,6 +637,7 @@ class QemuRunner: return self.qmp.cmd(command) def run_serial(self, command, raw=False, timeout=60): + # Deprecated # Returns (status, output) where status is 1 on success and 0 on error # We assume target system have echo to get command status @@ -688,6 +689,62 @@ class QemuRunner: status = 1 return (status, str(data)) + def run_serial_socket(self, command, raw=False, timeout=60): + # Returns (status, output) where status is 0 on success and a negative value on error. + + # We assume target system have echo to get command status + if not raw: + command = "%s; echo $?\n" % command + + data = '' + status = 0 + self.server_socket.sendall(command.encode('utf-8')) + start = time.time() + end = start + timeout + while True: + now = time.time() + if now >= end: + data += "<<< run_serial_socket(): command timed out after %d seconds without output >>>\r\n\r\n" % timeout + break + try: + sread, _, _ = select.select([self.server_socket],[],[], end - now) + except InterruptedError: + continue + if sread: + # try to avoid reading single character at a time + time.sleep(0.1) + answer = self.server_socket.recv(1024) + if answer: + data += answer.decode('utf-8') + # Search the prompt to stop + if re.search(self.boot_patterns['search_cmd_finished'], data): + break + else: + if self.canexit: + return (1, "") + raise Exception("No data on serial console socket, connection closed?") + + if not data: + raise Exception('serial run failed: no data') + + if raw: + status = 0 + else: + # Remove first line (command line) and last line (prompt) + data = data[data.find('$?\r\n')+4:data.rfind('\r\n')] + index = data.rfind('\r\n') + if index == -1: + data = "" + raise Exception('serial run failed: no result') + else: + status_cmd = data[index+2:] + data = data[:index] + try: + status = int(status_cmd) + except ValueError as e: + raise Exception('Could not convert to integer: {}'.format(str(e))) + return (status, str(data)) + def _dump_host(self): self.host_dumper.create_dir("qemu") -- 2.40.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 2/2] oeqa/selftest: change deprecated usage of run_serial 2023-04-07 14:26 [PATCH v3 0/2] oeqa: Change the serial runner Louis Rannou 2023-04-07 14:26 ` [PATCH v3 1/2] oeqa/utils/qemurunner: change " Louis Rannou @ 2023-04-07 14:26 ` Louis Rannou 2023-04-09 9:39 ` [OE-core] " Alexandre Belloni 1 sibling, 1 reply; 5+ messages in thread From: Louis Rannou @ 2023-04-07 14:26 UTC (permalink / raw) To: openembedded-core; +Cc: khilman, Louis Rannou Prefer the new function run_serial_socket. Change calls where the modification is easy. Signed-off-by: Louis Rannou <lrannou@baylibre.com> --- meta/lib/oeqa/selftest/cases/debuginfod.py | 3 +- meta/lib/oeqa/selftest/cases/gdbserver.py | 7 ++-- meta/lib/oeqa/selftest/cases/locales.py | 8 ++--- meta/lib/oeqa/selftest/cases/overlayfs.py | 42 ++++++++++++++-------- meta/lib/oeqa/selftest/cases/package.py | 7 ++-- meta/lib/oeqa/selftest/cases/runqemu.py | 2 +- 6 files changed, 43 insertions(+), 26 deletions(-) diff --git a/meta/lib/oeqa/selftest/cases/debuginfod.py b/meta/lib/oeqa/selftest/cases/debuginfod.py index 37f51760fb..2571ce6989 100644 --- a/meta/lib/oeqa/selftest/cases/debuginfod.py +++ b/meta/lib/oeqa/selftest/cases/debuginfod.py @@ -99,7 +99,8 @@ CORE_IMAGE_EXTRA_INSTALL += "elfutils" % (qemu.server_ip, port) ) self.logger.info(f"Starting client {cmd}") - status, output = qemu.run_serial(cmd) + status, output = qemu.run_serial_socket(cmd) + self.assertEqual(0, status) # This should be more comprehensive self.assertIn("/.cache/debuginfod_client/", output) finally: diff --git a/meta/lib/oeqa/selftest/cases/gdbserver.py b/meta/lib/oeqa/selftest/cases/gdbserver.py index 9da97ae780..4f8c7d620f 100644 --- a/meta/lib/oeqa/selftest/cases/gdbserver.py +++ b/meta/lib/oeqa/selftest/cases/gdbserver.py @@ -43,7 +43,8 @@ CORE_IMAGE_EXTRA_INSTALL = "gdbserver" shutil.unpack_archive(filename, debugfs) with runqemu("core-image-minimal", runqemuparams="nographic") as qemu: - status, output = qemu.run_serial("kmod --help") + status, output = qemu.run_serial_socket("kmod --help") + self.assertEqual(status, 0) self.assertIn("modprobe", output) with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor: @@ -61,7 +62,7 @@ CORE_IMAGE_EXTRA_INSTALL = "gdbserver" self.fail("Timed out connecting to gdb") future = executor.submit(run_gdb) - status, output = qemu.run_serial("gdbserver --once :9999 kmod --help") - self.assertEqual(status, 1) + status, output = qemu.run_serial_socket("gdbserver --once :9999 kmod --help") + self.assertEqual(status, 0) # The future either returns None, or raises an exception future.result() diff --git a/meta/lib/oeqa/selftest/cases/locales.py b/meta/lib/oeqa/selftest/cases/locales.py index 4ca8ffb7aa..98026d2c80 100644 --- a/meta/lib/oeqa/selftest/cases/locales.py +++ b/meta/lib/oeqa/selftest/cases/locales.py @@ -27,15 +27,15 @@ class LocalesTest(OESelftestTestCase): with runqemu("core-image-minimal", ssh=False, runqemuparams='nographic') as qemu: cmd = "locale -a" - status, output = qemu.run_serial(cmd) + status, output = qemu.run_serial_socket(cmd) # output must includes fr_FR or fr_FR.UTF-8 - self.assertEqual(status, 1, msg='locale test command failed: output: %s' % output) + self.assertEqual(status, 0, msg='locale test command failed: output: %s' % output) self.assertIn("fr_FR", output, msg='locale -a test failed: output: %s' % output) cmd = "localedef --list-archive -v" - status, output = qemu.run_serial(cmd) + status, output = qemu.run_serial_socket(cmd) # output must includes fr_FR.utf8 - self.assertEqual(status, 1, msg='localedef test command failed: output: %s' % output) + self.assertEqual(status, 0, msg='localedef test command failed: output: %s' % output) self.assertIn("fr_FR.utf8", output, msg='localedef test failed: output: %s' % output) def test_locales_on(self): diff --git a/meta/lib/oeqa/selftest/cases/overlayfs.py b/meta/lib/oeqa/selftest/cases/overlayfs.py index b4f0663828..753821490b 100644 --- a/meta/lib/oeqa/selftest/cases/overlayfs.py +++ b/meta/lib/oeqa/selftest/cases/overlayfs.py @@ -183,20 +183,24 @@ EOT with runqemu('core-image-minimal') as qemu: # Check that application service started - status, output = qemu.run_serial("systemctl status my-application") + status, output = qemu.run_serial_socket("systemctl status my-application") + self.assertEqual(0, status) self.assertTrue("active (exited)" in output, msg=output) # Check that overlay mounts are dependencies of our application unit - status, output = qemu.run_serial("systemctl list-dependencies my-application") + status, output = qemu.run_serial_socket("systemctl list-dependencies my-application") + self.assertEqual(0, status) self.assertTrue("overlayfs-user-overlays.service" in output, msg=output) - status, output = qemu.run_serial("systemctl list-dependencies overlayfs-user-overlays") + status, output = qemu.run_serial_socket("systemctl list-dependencies overlayfs-user-overlays") + self.assertEqual(0, status) self.assertTrue("usr-share-another\\x2doverlay\\x2dmount.mount" in output, msg=output) self.assertTrue("usr-share-my\\x2dapplication.mount" in output, msg=output) # Check that we have /mnt/overlay fs mounted as tmpfs and # /usr/share/my-application as an overlay (see overlayfs-user recipe) - status, output = qemu.run_serial("/bin/mount -t tmpfs,overlay") + status, output = qemu.run_serial_socket("/bin/mount -t tmpfs,overlay") + self.assertEqual(0, status) line = getline_qemu(output, "on /mnt/overlay") self.assertTrue(line and line.startswith("tmpfs"), msg=output) @@ -360,7 +364,8 @@ OVERLAYFS_ETC_DEVICE = "/dev/sda3" bitbake('core-image-minimal') with runqemu('core-image-minimal', image_fstype='wic') as qemu: - status, output = qemu.run_serial("/bin/mount") + status, output = qemu.run_serial_socket("/bin/mount") + self.assertEqual(0, status) line = getline_qemu(output, "upperdir=/data/overlay-etc/upper") self.assertFalse(line, msg=output) @@ -393,7 +398,8 @@ OVERLAYFS_ETC_DEVICE = "/dev/sda3" testFile = "/etc/my-test-data" with runqemu('core-image-minimal', image_fstype='wic', discard_writes=False) as qemu: - status, output = qemu.run_serial("/bin/mount") + status, output = qemu.run_serial_socket("/bin/mount") + self.assertEqual(0, status) line = getline_qemu(output, "/dev/sda3") self.assertTrue("/data" in output, msg=output) @@ -402,19 +408,24 @@ OVERLAYFS_ETC_DEVICE = "/dev/sda3" self.assertTrue(line and line.startswith("/data/overlay-etc/upper on /etc type overlay"), msg=output) # check that lower layer is not available - status, output = qemu.run_serial("ls -1 /data/overlay-etc/lower") + status, output = qemu.run_serial_socket("ls -1 /data/overlay-etc/lower") + self.assertEqual(0, status) line = getline_qemu(output, "No such file or directory") self.assertTrue(line, msg=output) - status, output = qemu.run_serial("touch " + testFile) - status, output = qemu.run_serial("sync") - status, output = qemu.run_serial("ls -1 " + testFile) + status, output = qemu.run_serial_socket("touch " + testFile) + self.assertEqual(0, status) + status, output = qemu.run_serial_socket("sync") + self.assertEqual(0, status) + status, output = qemu.run_serial_socket("ls -1 " + testFile) + self.assertEqual(0, status) line = getline_qemu(output, testFile) self.assertTrue(line and line.startswith(testFile), msg=output) # Check that file exists in /etc after reboot with runqemu('core-image-minimal', image_fstype='wic') as qemu: - status, output = qemu.run_serial("ls -1 " + testFile) + status, output = qemu.run_serial_socket("ls -1 " + testFile) + self.assertEqual(0, status) line = getline_qemu(output, testFile) self.assertTrue(line and line.startswith(testFile), msg=output) @@ -446,14 +457,17 @@ IMAGE_INSTALL:append = " overlayfs-user" bitbake('core-image-minimal') with runqemu('core-image-minimal', image_fstype='wic') as qemu: - status, output = qemu.run_serial("echo \"Modified in upper\" > /etc/" + testFile) - status, output = qemu.run_serial("diff /etc/" + testFile + " /data/overlay-etc/lower/" + testFile) + status, output = qemu.run_serial_socket("echo \"Modified in upper\" > /etc/" + testFile) + self.assertEqual(0, status) + status, output = qemu.run_serial_socket("diff /etc/" + testFile + " /data/overlay-etc/lower/" + testFile) + self.assertEqual(0, status) line = getline_qemu(output, "Modified in upper") self.assertTrue(line, msg=output) line = getline_qemu(output, "Original file") self.assertTrue(line, msg=output) - status, output = qemu.run_serial("touch /data/overlay-etc/lower/ro-test.txt") + status, output = qemu.run_serial_socket("touch /data/overlay-etc/lower/ro-test.txt") + self.assertEqual(0, status) line = getline_qemu(output, "Read-only file system") self.assertTrue(line, msg=output) diff --git a/meta/lib/oeqa/selftest/cases/package.py b/meta/lib/oeqa/selftest/cases/package.py index 1aa6c03f8a..78e8a4c26b 100644 --- a/meta/lib/oeqa/selftest/cases/package.py +++ b/meta/lib/oeqa/selftest/cases/package.py @@ -135,7 +135,8 @@ class PackageTests(OESelftestTestCase): Check that gdb ``binary`` to read symbols from separated debug file """ self.logger.info("gdbtest %s" % binary) - status, output = qemu.run_serial('/usr/bin/gdb.sh %s' % binary, timeout=60) + status, output = qemu.run_serial_socket('/usr/bin/gdb.sh %s' % binary, timeout=60) + self.assertEqual(0, status) for l in output.split('\n'): # Check debugging symbols exists if '(no debugging symbols found)' in l: @@ -166,8 +167,8 @@ class PackageTests(OESelftestTestCase): def check_ownership(qemu, expected_gid, expected_uid, path): self.logger.info("Check ownership of %s", path) - status, output = qemu.run_serial('stat -c "%U %G" ' + path) - self.assertEqual(status, 1, "stat failed: " + output) + status, output = qemu.run_serial_socket('stat -c "%U %G" ' + path) + self.assertEqual(status, 0, "stat failed: " + output) try: uid, gid = output.split() self.assertEqual(uid, expected_uid) diff --git a/meta/lib/oeqa/selftest/cases/runqemu.py b/meta/lib/oeqa/selftest/cases/runqemu.py index f01e1eec66..be1481a82e 100644 --- a/meta/lib/oeqa/selftest/cases/runqemu.py +++ b/meta/lib/oeqa/selftest/cases/runqemu.py @@ -183,7 +183,7 @@ class QemuTest(OESelftestTestCase): # (such as the exception "Console connection closed unexpectedly") # as qemu will disappear when we shut it down qemu.runner.allowexit() - qemu.run_serial("shutdown -h now") + qemu.run_serial_socket("shutdown -h now") time_track = 0 try: while True: -- 2.40.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [OE-core] [PATCH v3 2/2] oeqa/selftest: change deprecated usage of run_serial 2023-04-07 14:26 ` [PATCH v3 2/2] oeqa/selftest: change deprecated usage of run_serial Louis Rannou @ 2023-04-09 9:39 ` Alexandre Belloni 2023-04-11 7:14 ` Louis Rannou 0 siblings, 1 reply; 5+ messages in thread From: Alexandre Belloni @ 2023-04-09 9:39 UTC (permalink / raw) To: Louis Rannou; +Cc: openembedded-core, khilman Hello, This breaks the overlayfs tests: https://autobuilder.yoctoproject.org/typhoon/#builders/87/builds/5075/steps/14/logs/stdio https://autobuilder.yoctoproject.org/typhoon/#builders/86/builds/5036/steps/14/logs/stdio https://autobuilder.yoctoproject.org/typhoon/#builders/80/builds/4994/steps/14/logs/stdio https://autobuilder.yoctoproject.org/typhoon/#builders/79/builds/5045/steps/15/logs/stdio On 07/04/2023 16:26:22+0200, Louis Rannou wrote: > Prefer the new function run_serial_socket. Change calls where the modification > is easy. > > Signed-off-by: Louis Rannou <lrannou@baylibre.com> > --- > meta/lib/oeqa/selftest/cases/debuginfod.py | 3 +- > meta/lib/oeqa/selftest/cases/gdbserver.py | 7 ++-- > meta/lib/oeqa/selftest/cases/locales.py | 8 ++--- > meta/lib/oeqa/selftest/cases/overlayfs.py | 42 ++++++++++++++-------- > meta/lib/oeqa/selftest/cases/package.py | 7 ++-- > meta/lib/oeqa/selftest/cases/runqemu.py | 2 +- > 6 files changed, 43 insertions(+), 26 deletions(-) > > diff --git a/meta/lib/oeqa/selftest/cases/debuginfod.py b/meta/lib/oeqa/selftest/cases/debuginfod.py > index 37f51760fb..2571ce6989 100644 > --- a/meta/lib/oeqa/selftest/cases/debuginfod.py > +++ b/meta/lib/oeqa/selftest/cases/debuginfod.py > @@ -99,7 +99,8 @@ CORE_IMAGE_EXTRA_INSTALL += "elfutils" > % (qemu.server_ip, port) > ) > self.logger.info(f"Starting client {cmd}") > - status, output = qemu.run_serial(cmd) > + status, output = qemu.run_serial_socket(cmd) > + self.assertEqual(0, status) > # This should be more comprehensive > self.assertIn("/.cache/debuginfod_client/", output) > finally: > diff --git a/meta/lib/oeqa/selftest/cases/gdbserver.py b/meta/lib/oeqa/selftest/cases/gdbserver.py > index 9da97ae780..4f8c7d620f 100644 > --- a/meta/lib/oeqa/selftest/cases/gdbserver.py > +++ b/meta/lib/oeqa/selftest/cases/gdbserver.py > @@ -43,7 +43,8 @@ CORE_IMAGE_EXTRA_INSTALL = "gdbserver" > shutil.unpack_archive(filename, debugfs) > > with runqemu("core-image-minimal", runqemuparams="nographic") as qemu: > - status, output = qemu.run_serial("kmod --help") > + status, output = qemu.run_serial_socket("kmod --help") > + self.assertEqual(status, 0) > self.assertIn("modprobe", output) > > with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor: > @@ -61,7 +62,7 @@ CORE_IMAGE_EXTRA_INSTALL = "gdbserver" > self.fail("Timed out connecting to gdb") > future = executor.submit(run_gdb) > > - status, output = qemu.run_serial("gdbserver --once :9999 kmod --help") > - self.assertEqual(status, 1) > + status, output = qemu.run_serial_socket("gdbserver --once :9999 kmod --help") > + self.assertEqual(status, 0) > # The future either returns None, or raises an exception > future.result() > diff --git a/meta/lib/oeqa/selftest/cases/locales.py b/meta/lib/oeqa/selftest/cases/locales.py > index 4ca8ffb7aa..98026d2c80 100644 > --- a/meta/lib/oeqa/selftest/cases/locales.py > +++ b/meta/lib/oeqa/selftest/cases/locales.py > @@ -27,15 +27,15 @@ class LocalesTest(OESelftestTestCase): > > with runqemu("core-image-minimal", ssh=False, runqemuparams='nographic') as qemu: > cmd = "locale -a" > - status, output = qemu.run_serial(cmd) > + status, output = qemu.run_serial_socket(cmd) > # output must includes fr_FR or fr_FR.UTF-8 > - self.assertEqual(status, 1, msg='locale test command failed: output: %s' % output) > + self.assertEqual(status, 0, msg='locale test command failed: output: %s' % output) > self.assertIn("fr_FR", output, msg='locale -a test failed: output: %s' % output) > > cmd = "localedef --list-archive -v" > - status, output = qemu.run_serial(cmd) > + status, output = qemu.run_serial_socket(cmd) > # output must includes fr_FR.utf8 > - self.assertEqual(status, 1, msg='localedef test command failed: output: %s' % output) > + self.assertEqual(status, 0, msg='localedef test command failed: output: %s' % output) > self.assertIn("fr_FR.utf8", output, msg='localedef test failed: output: %s' % output) > > def test_locales_on(self): > diff --git a/meta/lib/oeqa/selftest/cases/overlayfs.py b/meta/lib/oeqa/selftest/cases/overlayfs.py > index b4f0663828..753821490b 100644 > --- a/meta/lib/oeqa/selftest/cases/overlayfs.py > +++ b/meta/lib/oeqa/selftest/cases/overlayfs.py > @@ -183,20 +183,24 @@ EOT > > with runqemu('core-image-minimal') as qemu: > # Check that application service started > - status, output = qemu.run_serial("systemctl status my-application") > + status, output = qemu.run_serial_socket("systemctl status my-application") > + self.assertEqual(0, status) > self.assertTrue("active (exited)" in output, msg=output) > > # Check that overlay mounts are dependencies of our application unit > - status, output = qemu.run_serial("systemctl list-dependencies my-application") > + status, output = qemu.run_serial_socket("systemctl list-dependencies my-application") > + self.assertEqual(0, status) > self.assertTrue("overlayfs-user-overlays.service" in output, msg=output) > > - status, output = qemu.run_serial("systemctl list-dependencies overlayfs-user-overlays") > + status, output = qemu.run_serial_socket("systemctl list-dependencies overlayfs-user-overlays") > + self.assertEqual(0, status) > self.assertTrue("usr-share-another\\x2doverlay\\x2dmount.mount" in output, msg=output) > self.assertTrue("usr-share-my\\x2dapplication.mount" in output, msg=output) > > # Check that we have /mnt/overlay fs mounted as tmpfs and > # /usr/share/my-application as an overlay (see overlayfs-user recipe) > - status, output = qemu.run_serial("/bin/mount -t tmpfs,overlay") > + status, output = qemu.run_serial_socket("/bin/mount -t tmpfs,overlay") > + self.assertEqual(0, status) > > line = getline_qemu(output, "on /mnt/overlay") > self.assertTrue(line and line.startswith("tmpfs"), msg=output) > @@ -360,7 +364,8 @@ OVERLAYFS_ETC_DEVICE = "/dev/sda3" > bitbake('core-image-minimal') > > with runqemu('core-image-minimal', image_fstype='wic') as qemu: > - status, output = qemu.run_serial("/bin/mount") > + status, output = qemu.run_serial_socket("/bin/mount") > + self.assertEqual(0, status) > > line = getline_qemu(output, "upperdir=/data/overlay-etc/upper") > self.assertFalse(line, msg=output) > @@ -393,7 +398,8 @@ OVERLAYFS_ETC_DEVICE = "/dev/sda3" > testFile = "/etc/my-test-data" > > with runqemu('core-image-minimal', image_fstype='wic', discard_writes=False) as qemu: > - status, output = qemu.run_serial("/bin/mount") > + status, output = qemu.run_serial_socket("/bin/mount") > + self.assertEqual(0, status) > > line = getline_qemu(output, "/dev/sda3") > self.assertTrue("/data" in output, msg=output) > @@ -402,19 +408,24 @@ OVERLAYFS_ETC_DEVICE = "/dev/sda3" > self.assertTrue(line and line.startswith("/data/overlay-etc/upper on /etc type overlay"), msg=output) > > # check that lower layer is not available > - status, output = qemu.run_serial("ls -1 /data/overlay-etc/lower") > + status, output = qemu.run_serial_socket("ls -1 /data/overlay-etc/lower") > + self.assertEqual(0, status) > line = getline_qemu(output, "No such file or directory") > self.assertTrue(line, msg=output) > > - status, output = qemu.run_serial("touch " + testFile) > - status, output = qemu.run_serial("sync") > - status, output = qemu.run_serial("ls -1 " + testFile) > + status, output = qemu.run_serial_socket("touch " + testFile) > + self.assertEqual(0, status) > + status, output = qemu.run_serial_socket("sync") > + self.assertEqual(0, status) > + status, output = qemu.run_serial_socket("ls -1 " + testFile) > + self.assertEqual(0, status) > line = getline_qemu(output, testFile) > self.assertTrue(line and line.startswith(testFile), msg=output) > > # Check that file exists in /etc after reboot > with runqemu('core-image-minimal', image_fstype='wic') as qemu: > - status, output = qemu.run_serial("ls -1 " + testFile) > + status, output = qemu.run_serial_socket("ls -1 " + testFile) > + self.assertEqual(0, status) > line = getline_qemu(output, testFile) > self.assertTrue(line and line.startswith(testFile), msg=output) > > @@ -446,14 +457,17 @@ IMAGE_INSTALL:append = " overlayfs-user" > bitbake('core-image-minimal') > > with runqemu('core-image-minimal', image_fstype='wic') as qemu: > - status, output = qemu.run_serial("echo \"Modified in upper\" > /etc/" + testFile) > - status, output = qemu.run_serial("diff /etc/" + testFile + " /data/overlay-etc/lower/" + testFile) > + status, output = qemu.run_serial_socket("echo \"Modified in upper\" > /etc/" + testFile) > + self.assertEqual(0, status) > + status, output = qemu.run_serial_socket("diff /etc/" + testFile + " /data/overlay-etc/lower/" + testFile) > + self.assertEqual(0, status) > line = getline_qemu(output, "Modified in upper") > self.assertTrue(line, msg=output) > line = getline_qemu(output, "Original file") > self.assertTrue(line, msg=output) > > - status, output = qemu.run_serial("touch /data/overlay-etc/lower/ro-test.txt") > + status, output = qemu.run_serial_socket("touch /data/overlay-etc/lower/ro-test.txt") > + self.assertEqual(0, status) > line = getline_qemu(output, "Read-only file system") > self.assertTrue(line, msg=output) > > diff --git a/meta/lib/oeqa/selftest/cases/package.py b/meta/lib/oeqa/selftest/cases/package.py > index 1aa6c03f8a..78e8a4c26b 100644 > --- a/meta/lib/oeqa/selftest/cases/package.py > +++ b/meta/lib/oeqa/selftest/cases/package.py > @@ -135,7 +135,8 @@ class PackageTests(OESelftestTestCase): > Check that gdb ``binary`` to read symbols from separated debug file > """ > self.logger.info("gdbtest %s" % binary) > - status, output = qemu.run_serial('/usr/bin/gdb.sh %s' % binary, timeout=60) > + status, output = qemu.run_serial_socket('/usr/bin/gdb.sh %s' % binary, timeout=60) > + self.assertEqual(0, status) > for l in output.split('\n'): > # Check debugging symbols exists > if '(no debugging symbols found)' in l: > @@ -166,8 +167,8 @@ class PackageTests(OESelftestTestCase): > > def check_ownership(qemu, expected_gid, expected_uid, path): > self.logger.info("Check ownership of %s", path) > - status, output = qemu.run_serial('stat -c "%U %G" ' + path) > - self.assertEqual(status, 1, "stat failed: " + output) > + status, output = qemu.run_serial_socket('stat -c "%U %G" ' + path) > + self.assertEqual(status, 0, "stat failed: " + output) > try: > uid, gid = output.split() > self.assertEqual(uid, expected_uid) > diff --git a/meta/lib/oeqa/selftest/cases/runqemu.py b/meta/lib/oeqa/selftest/cases/runqemu.py > index f01e1eec66..be1481a82e 100644 > --- a/meta/lib/oeqa/selftest/cases/runqemu.py > +++ b/meta/lib/oeqa/selftest/cases/runqemu.py > @@ -183,7 +183,7 @@ class QemuTest(OESelftestTestCase): > # (such as the exception "Console connection closed unexpectedly") > # as qemu will disappear when we shut it down > qemu.runner.allowexit() > - qemu.run_serial("shutdown -h now") > + qemu.run_serial_socket("shutdown -h now") > time_track = 0 > try: > while True: > -- > 2.40.0 > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#179825): https://lists.openembedded.org/g/openembedded-core/message/179825 > Mute This Topic: https://lists.openembedded.org/mt/98125364/3617179 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com] > -=-=-=-=-=-=-=-=-=-=-=- > -- Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [OE-core] [PATCH v3 2/2] oeqa/selftest: change deprecated usage of run_serial 2023-04-09 9:39 ` [OE-core] " Alexandre Belloni @ 2023-04-11 7:14 ` Louis Rannou 0 siblings, 0 replies; 5+ messages in thread From: Louis Rannou @ 2023-04-11 7:14 UTC (permalink / raw) To: Alexandre Belloni; +Cc: openembedded-core, khilman On 09/04/2023 11:39, Alexandre Belloni wrote: > Hello, > > This breaks the overlayfs tests: > > https://autobuilder.yoctoproject.org/typhoon/#builders/87/builds/5075/steps/14/logs/stdio > https://autobuilder.yoctoproject.org/typhoon/#builders/86/builds/5036/steps/14/logs/stdio > https://autobuilder.yoctoproject.org/typhoon/#builders/80/builds/4994/steps/14/logs/stdio > https://autobuilder.yoctoproject.org/typhoon/#builders/79/builds/5045/steps/15/logs/stdio > Hello, Indeed, the overlayfs test was not supposed to remain in the commit Louis > On 07/04/2023 16:26:22+0200, Louis Rannou wrote: >> Prefer the new function run_serial_socket. Change calls where the modification >> is easy. >> >> Signed-off-by: Louis Rannou <lrannou@baylibre.com> >> --- >> meta/lib/oeqa/selftest/cases/debuginfod.py | 3 +- >> meta/lib/oeqa/selftest/cases/gdbserver.py | 7 ++-- >> meta/lib/oeqa/selftest/cases/locales.py | 8 ++--- >> meta/lib/oeqa/selftest/cases/overlayfs.py | 42 ++++++++++++++-------- >> meta/lib/oeqa/selftest/cases/package.py | 7 ++-- >> meta/lib/oeqa/selftest/cases/runqemu.py | 2 +- >> 6 files changed, 43 insertions(+), 26 deletions(-) >> >> diff --git a/meta/lib/oeqa/selftest/cases/debuginfod.py b/meta/lib/oeqa/selftest/cases/debuginfod.py >> index 37f51760fb..2571ce6989 100644 >> --- a/meta/lib/oeqa/selftest/cases/debuginfod.py >> +++ b/meta/lib/oeqa/selftest/cases/debuginfod.py >> @@ -99,7 +99,8 @@ CORE_IMAGE_EXTRA_INSTALL += "elfutils" >> % (qemu.server_ip, port) >> ) >> self.logger.info(f"Starting client {cmd}") >> - status, output = qemu.run_serial(cmd) >> + status, output = qemu.run_serial_socket(cmd) >> + self.assertEqual(0, status) >> # This should be more comprehensive >> self.assertIn("/.cache/debuginfod_client/", output) >> finally: >> diff --git a/meta/lib/oeqa/selftest/cases/gdbserver.py b/meta/lib/oeqa/selftest/cases/gdbserver.py >> index 9da97ae780..4f8c7d620f 100644 >> --- a/meta/lib/oeqa/selftest/cases/gdbserver.py >> +++ b/meta/lib/oeqa/selftest/cases/gdbserver.py >> @@ -43,7 +43,8 @@ CORE_IMAGE_EXTRA_INSTALL = "gdbserver" >> shutil.unpack_archive(filename, debugfs) >> >> with runqemu("core-image-minimal", runqemuparams="nographic") as qemu: >> - status, output = qemu.run_serial("kmod --help") >> + status, output = qemu.run_serial_socket("kmod --help") >> + self.assertEqual(status, 0) >> self.assertIn("modprobe", output) >> >> with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor: >> @@ -61,7 +62,7 @@ CORE_IMAGE_EXTRA_INSTALL = "gdbserver" >> self.fail("Timed out connecting to gdb") >> future = executor.submit(run_gdb) >> >> - status, output = qemu.run_serial("gdbserver --once :9999 kmod --help") >> - self.assertEqual(status, 1) >> + status, output = qemu.run_serial_socket("gdbserver --once :9999 kmod --help") >> + self.assertEqual(status, 0) >> # The future either returns None, or raises an exception >> future.result() >> diff --git a/meta/lib/oeqa/selftest/cases/locales.py b/meta/lib/oeqa/selftest/cases/locales.py >> index 4ca8ffb7aa..98026d2c80 100644 >> --- a/meta/lib/oeqa/selftest/cases/locales.py >> +++ b/meta/lib/oeqa/selftest/cases/locales.py >> @@ -27,15 +27,15 @@ class LocalesTest(OESelftestTestCase): >> >> with runqemu("core-image-minimal", ssh=False, runqemuparams='nographic') as qemu: >> cmd = "locale -a" >> - status, output = qemu.run_serial(cmd) >> + status, output = qemu.run_serial_socket(cmd) >> # output must includes fr_FR or fr_FR.UTF-8 >> - self.assertEqual(status, 1, msg='locale test command failed: output: %s' % output) >> + self.assertEqual(status, 0, msg='locale test command failed: output: %s' % output) >> self.assertIn("fr_FR", output, msg='locale -a test failed: output: %s' % output) >> >> cmd = "localedef --list-archive -v" >> - status, output = qemu.run_serial(cmd) >> + status, output = qemu.run_serial_socket(cmd) >> # output must includes fr_FR.utf8 >> - self.assertEqual(status, 1, msg='localedef test command failed: output: %s' % output) >> + self.assertEqual(status, 0, msg='localedef test command failed: output: %s' % output) >> self.assertIn("fr_FR.utf8", output, msg='localedef test failed: output: %s' % output) >> >> def test_locales_on(self): >> diff --git a/meta/lib/oeqa/selftest/cases/overlayfs.py b/meta/lib/oeqa/selftest/cases/overlayfs.py >> index b4f0663828..753821490b 100644 >> --- a/meta/lib/oeqa/selftest/cases/overlayfs.py >> +++ b/meta/lib/oeqa/selftest/cases/overlayfs.py >> @@ -183,20 +183,24 @@ EOT >> >> with runqemu('core-image-minimal') as qemu: >> # Check that application service started >> - status, output = qemu.run_serial("systemctl status my-application") >> + status, output = qemu.run_serial_socket("systemctl status my-application") >> + self.assertEqual(0, status) >> self.assertTrue("active (exited)" in output, msg=output) >> >> # Check that overlay mounts are dependencies of our application unit >> - status, output = qemu.run_serial("systemctl list-dependencies my-application") >> + status, output = qemu.run_serial_socket("systemctl list-dependencies my-application") >> + self.assertEqual(0, status) >> self.assertTrue("overlayfs-user-overlays.service" in output, msg=output) >> >> - status, output = qemu.run_serial("systemctl list-dependencies overlayfs-user-overlays") >> + status, output = qemu.run_serial_socket("systemctl list-dependencies overlayfs-user-overlays") >> + self.assertEqual(0, status) >> self.assertTrue("usr-share-another\\x2doverlay\\x2dmount.mount" in output, msg=output) >> self.assertTrue("usr-share-my\\x2dapplication.mount" in output, msg=output) >> >> # Check that we have /mnt/overlay fs mounted as tmpfs and >> # /usr/share/my-application as an overlay (see overlayfs-user recipe) >> - status, output = qemu.run_serial("/bin/mount -t tmpfs,overlay") >> + status, output = qemu.run_serial_socket("/bin/mount -t tmpfs,overlay") >> + self.assertEqual(0, status) >> >> line = getline_qemu(output, "on /mnt/overlay") >> self.assertTrue(line and line.startswith("tmpfs"), msg=output) >> @@ -360,7 +364,8 @@ OVERLAYFS_ETC_DEVICE = "/dev/sda3" >> bitbake('core-image-minimal') >> >> with runqemu('core-image-minimal', image_fstype='wic') as qemu: >> - status, output = qemu.run_serial("/bin/mount") >> + status, output = qemu.run_serial_socket("/bin/mount") >> + self.assertEqual(0, status) >> >> line = getline_qemu(output, "upperdir=/data/overlay-etc/upper") >> self.assertFalse(line, msg=output) >> @@ -393,7 +398,8 @@ OVERLAYFS_ETC_DEVICE = "/dev/sda3" >> testFile = "/etc/my-test-data" >> >> with runqemu('core-image-minimal', image_fstype='wic', discard_writes=False) as qemu: >> - status, output = qemu.run_serial("/bin/mount") >> + status, output = qemu.run_serial_socket("/bin/mount") >> + self.assertEqual(0, status) >> >> line = getline_qemu(output, "/dev/sda3") >> self.assertTrue("/data" in output, msg=output) >> @@ -402,19 +408,24 @@ OVERLAYFS_ETC_DEVICE = "/dev/sda3" >> self.assertTrue(line and line.startswith("/data/overlay-etc/upper on /etc type overlay"), msg=output) >> >> # check that lower layer is not available >> - status, output = qemu.run_serial("ls -1 /data/overlay-etc/lower") >> + status, output = qemu.run_serial_socket("ls -1 /data/overlay-etc/lower") >> + self.assertEqual(0, status) >> line = getline_qemu(output, "No such file or directory") >> self.assertTrue(line, msg=output) >> >> - status, output = qemu.run_serial("touch " + testFile) >> - status, output = qemu.run_serial("sync") >> - status, output = qemu.run_serial("ls -1 " + testFile) >> + status, output = qemu.run_serial_socket("touch " + testFile) >> + self.assertEqual(0, status) >> + status, output = qemu.run_serial_socket("sync") >> + self.assertEqual(0, status) >> + status, output = qemu.run_serial_socket("ls -1 " + testFile) >> + self.assertEqual(0, status) >> line = getline_qemu(output, testFile) >> self.assertTrue(line and line.startswith(testFile), msg=output) >> >> # Check that file exists in /etc after reboot >> with runqemu('core-image-minimal', image_fstype='wic') as qemu: >> - status, output = qemu.run_serial("ls -1 " + testFile) >> + status, output = qemu.run_serial_socket("ls -1 " + testFile) >> + self.assertEqual(0, status) >> line = getline_qemu(output, testFile) >> self.assertTrue(line and line.startswith(testFile), msg=output) >> >> @@ -446,14 +457,17 @@ IMAGE_INSTALL:append = " overlayfs-user" >> bitbake('core-image-minimal') >> >> with runqemu('core-image-minimal', image_fstype='wic') as qemu: >> - status, output = qemu.run_serial("echo \"Modified in upper\" > /etc/" + testFile) >> - status, output = qemu.run_serial("diff /etc/" + testFile + " /data/overlay-etc/lower/" + testFile) >> + status, output = qemu.run_serial_socket("echo \"Modified in upper\" > /etc/" + testFile) >> + self.assertEqual(0, status) >> + status, output = qemu.run_serial_socket("diff /etc/" + testFile + " /data/overlay-etc/lower/" + testFile) >> + self.assertEqual(0, status) >> line = getline_qemu(output, "Modified in upper") >> self.assertTrue(line, msg=output) >> line = getline_qemu(output, "Original file") >> self.assertTrue(line, msg=output) >> >> - status, output = qemu.run_serial("touch /data/overlay-etc/lower/ro-test.txt") >> + status, output = qemu.run_serial_socket("touch /data/overlay-etc/lower/ro-test.txt") >> + self.assertEqual(0, status) >> line = getline_qemu(output, "Read-only file system") >> self.assertTrue(line, msg=output) >> >> diff --git a/meta/lib/oeqa/selftest/cases/package.py b/meta/lib/oeqa/selftest/cases/package.py >> index 1aa6c03f8a..78e8a4c26b 100644 >> --- a/meta/lib/oeqa/selftest/cases/package.py >> +++ b/meta/lib/oeqa/selftest/cases/package.py >> @@ -135,7 +135,8 @@ class PackageTests(OESelftestTestCase): >> Check that gdb ``binary`` to read symbols from separated debug file >> """ >> self.logger.info("gdbtest %s" % binary) >> - status, output = qemu.run_serial('/usr/bin/gdb.sh %s' % binary, timeout=60) >> + status, output = qemu.run_serial_socket('/usr/bin/gdb.sh %s' % binary, timeout=60) >> + self.assertEqual(0, status) >> for l in output.split('\n'): >> # Check debugging symbols exists >> if '(no debugging symbols found)' in l: >> @@ -166,8 +167,8 @@ class PackageTests(OESelftestTestCase): >> >> def check_ownership(qemu, expected_gid, expected_uid, path): >> self.logger.info("Check ownership of %s", path) >> - status, output = qemu.run_serial('stat -c "%U %G" ' + path) >> - self.assertEqual(status, 1, "stat failed: " + output) >> + status, output = qemu.run_serial_socket('stat -c "%U %G" ' + path) >> + self.assertEqual(status, 0, "stat failed: " + output) >> try: >> uid, gid = output.split() >> self.assertEqual(uid, expected_uid) >> diff --git a/meta/lib/oeqa/selftest/cases/runqemu.py b/meta/lib/oeqa/selftest/cases/runqemu.py >> index f01e1eec66..be1481a82e 100644 >> --- a/meta/lib/oeqa/selftest/cases/runqemu.py >> +++ b/meta/lib/oeqa/selftest/cases/runqemu.py >> @@ -183,7 +183,7 @@ class QemuTest(OESelftestTestCase): >> # (such as the exception "Console connection closed unexpectedly") >> # as qemu will disappear when we shut it down >> qemu.runner.allowexit() >> - qemu.run_serial("shutdown -h now") >> + qemu.run_serial_socket("shutdown -h now") >> time_track = 0 >> try: >> while True: >> -- >> 2.40.0 >> > >> >> -=-=-=-=-=-=-=-=-=-=-=- >> Links: You receive all messages sent to this group. >> View/Reply Online (#179825): https://lists.openembedded.org/g/openembedded-core/message/179825 >> Mute This Topic: https://lists.openembedded.org/mt/98125364/3617179 >> Group Owner: openembedded-core+owner@lists.openembedded.org >> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com] >> -=-=-=-=-=-=-=-=-=-=-=- >> > > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-04-11 7:14 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-04-07 14:26 [PATCH v3 0/2] oeqa: Change the serial runner Louis Rannou 2023-04-07 14:26 ` [PATCH v3 1/2] oeqa/utils/qemurunner: change " Louis Rannou 2023-04-07 14:26 ` [PATCH v3 2/2] oeqa/selftest: change deprecated usage of run_serial Louis Rannou 2023-04-09 9:39 ` [OE-core] " Alexandre Belloni 2023-04-11 7:14 ` Louis Rannou
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.