* [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.