* [PATCH 0/2] tests/functional: Allow running TCG plugins tests on macOS
@ 2025-02-19 19:23 Philippe Mathieu-Daudé
2025-02-19 19:23 ` [PATCH 1/2] tests/functional: Introduce the dso_suffix() helper Philippe Mathieu-Daudé
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-02-19 19:23 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé, Pierrick Bouvier, Akihiko Odaki,
Philippe Mathieu-Daudé, Mahmoud Mandour, Stefan Weil,
Alex Bennée, Thomas Huth, Paolo Bonzini, Alexandre Iooss,
Yonggang Luo
Pierrick kindly helped me to resolve this issue which ended
being trivial (to him!). Not tested on Windows so far.
I'm still having some meson dependency problem, even on Linux:
$ make check-functional-aarch64
...
Traceback (most recent call last):
File "python/qemu/qmp/protocol.py", line 834, in _bh_close_stream
await wait_closed(self._writer)
File "python/qemu/qmp/util.py", line 130, in wait_closed
await writer.wait_closed()
File "/usr/lib/python3.10/asyncio/streams.py", line 343, in wait_closed
await self._protocol._get_close_waiter(self)
File "/usr/lib/python3.10/asyncio/selector_events.py", line 862, in _read_ready__data_received
data = self._sock.recv(self.max_size)
ConnectionResetError: [Errno 104] Connection reset by peer
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "python/qemu/machine/machine.py", line 448, in launch
self._launch()
File "python/qemu/machine/machine.py", line 497, in _launch
self._post_launch()
File "python/qemu/machine/machine.py", line 381, in _post_launch
self._qmp.connect()
File "python/qemu/qmp/legacy.py", line 153, in connect
self._sync(
File "python/qemu/qmp/legacy.py", line 102, in _sync
return self._aloop.run_until_complete(
File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
return future.result()
File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
return await fut
File "python/qemu/qmp/protocol.py", line 382, in connect
await self._session_guard(
File "python/qemu/qmp/protocol.py", line 456, in _session_guard
raise ConnectError(emsg, err) from err
qemu.qmp.protocol.ConnectError: Failed to establish session: [Errno 104] Connection reset by peer
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "tests/functional/test_aarch64_tcg_plugins.py", line 80, in test_aarch64_virt_insn
self.run_vm(kernel_path, kernel_command_line,
File "tests/functional/test_aarch64_tcg_plugins.py", line 52, in run_vm
raise excp
File "tests/functional/test_aarch64_tcg_plugins.py", line 46, in run_vm
vm.launch()
File "python/qemu/machine/machine.py", line 461, in launch
raise VMLaunchFailure(
qemu.machine.machine.VMLaunchFailure: ConnectError: Failed to establish session: [Errno 104] Connection reset by peer
Exit code: 1
Command: build/plugins/qemu-system-aarch64 -display none -vga none -chardev socket,id=mon,fd=6 -mon chardev=mon,mode=control -machine virt -chardev socket,id=console,fd=11 -serial chardev:console -cpu cortex-a53 -kernel /home/philippe.mathieu-daude/.cache/qemu/download/ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7 -append printk.time=1 panic=-1 console=ttyAMA0 -plugin tests/tcg/plugins/libinsn.so -d plugin -D /tmp/plugini36uailv.log -net none -no-reboot
Output: qemu-system-aarch64: Could not load plugin tests/tcg/plugins/libinsn.so: tests/tcg/plugins/libinsn.so: cannot open shared object file: No such file or directory
make[1]: *** [Makefile.mtest:26: do-meson-check] Error 1
I don't mind much building the plugins manually:
$ make tests/tcg/plugins/libinsn.so
[1/2] Compiling C object tests/tcg/plugins/libinsn.so.p/insn.c.o
[2/2] Linking target tests/tcg/plugins/libinsn.so
Then tests pass.
Philippe Mathieu-Daudé (2):
tests/functional: Introduce the dso_suffix() helper
tests/functional: Allow running TCG plugins tests on non-Linux/BSD
hosts
tests/functional/qemu_test/__init__.py | 2 +-
tests/functional/qemu_test/cmd.py | 6 ++++++
tests/functional/test_aarch64_tcg_plugins.py | 10 +++++++---
3 files changed, 14 insertions(+), 4 deletions(-)
--
2.47.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/2] tests/functional: Introduce the dso_suffix() helper
2025-02-19 19:23 [PATCH 0/2] tests/functional: Allow running TCG plugins tests on macOS Philippe Mathieu-Daudé
@ 2025-02-19 19:23 ` Philippe Mathieu-Daudé
2025-02-19 19:28 ` Pierrick Bouvier
2025-02-20 5:59 ` Thomas Huth
2025-02-19 19:23 ` [PATCH 2/2] tests/functional: Allow running TCG plugins tests on non-Linux/BSD hosts Philippe Mathieu-Daudé
2025-02-19 20:30 ` [PATCH 0/2] tests/functional: Allow running TCG plugins tests on macOS Pierrick Bouvier
2 siblings, 2 replies; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-02-19 19:23 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé, Pierrick Bouvier, Akihiko Odaki,
Philippe Mathieu-Daudé, Mahmoud Mandour, Stefan Weil,
Alex Bennée, Thomas Huth, Paolo Bonzini, Alexandre Iooss,
Yonggang Luo
Introduce a helper to get the default shared library
suffix used on the host.
Suggested-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
tests/functional/qemu_test/__init__.py | 2 +-
tests/functional/qemu_test/cmd.py | 6 ++++++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/tests/functional/qemu_test/__init__.py b/tests/functional/qemu_test/__init__.py
index 5c972843a6d..e253288ee7f 100644
--- a/tests/functional/qemu_test/__init__.py
+++ b/tests/functional/qemu_test/__init__.py
@@ -8,7 +8,7 @@
from .asset import Asset
from .config import BUILD_DIR
-from .cmd import is_readable_executable_file, \
+from .cmd import is_readable_executable_file, dso_suffix, \
interrupt_interactive_console_until_pattern, wait_for_console_pattern, \
exec_command, exec_command_and_wait_for_pattern, get_qemu_img, which
from .testcase import QemuBaseTest, QemuUserTest, QemuSystemTest
diff --git a/tests/functional/qemu_test/cmd.py b/tests/functional/qemu_test/cmd.py
index dc5f422b77d..c4704dfb7bc 100644
--- a/tests/functional/qemu_test/cmd.py
+++ b/tests/functional/qemu_test/cmd.py
@@ -14,6 +14,12 @@
import logging
import os
import os.path
+import platform
+
+def dso_suffix():
+ '''Return the dynamic libraries suffix for the current platform'''
+ DSO_SUFFIXES = { 'Linux': 'so', 'Darwin': 'dylib', 'Windows': 'dll' }
+ return DSO_SUFFIXES[platform.system()]
def which(tool):
--
2.47.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/2] tests/functional: Allow running TCG plugins tests on non-Linux/BSD hosts
2025-02-19 19:23 [PATCH 0/2] tests/functional: Allow running TCG plugins tests on macOS Philippe Mathieu-Daudé
2025-02-19 19:23 ` [PATCH 1/2] tests/functional: Introduce the dso_suffix() helper Philippe Mathieu-Daudé
@ 2025-02-19 19:23 ` Philippe Mathieu-Daudé
2025-02-19 19:29 ` Pierrick Bouvier
` (2 more replies)
2025-02-19 20:30 ` [PATCH 0/2] tests/functional: Allow running TCG plugins tests on macOS Pierrick Bouvier
2 siblings, 3 replies; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-02-19 19:23 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P. Berrangé, Pierrick Bouvier, Akihiko Odaki,
Philippe Mathieu-Daudé, Mahmoud Mandour, Stefan Weil,
Alex Bennée, Thomas Huth, Paolo Bonzini, Alexandre Iooss,
Yonggang Luo
Not all platforms use the '.so' suffix for shared libraries,
which is how plugins are built. Use the recently introduced
dso_suffix() helper to get the proper host suffix.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2804
Suggested-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
tests/functional/test_aarch64_tcg_plugins.py | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/tests/functional/test_aarch64_tcg_plugins.py b/tests/functional/test_aarch64_tcg_plugins.py
index 7e8beacc833..306e46c7972 100755
--- a/tests/functional/test_aarch64_tcg_plugins.py
+++ b/tests/functional/test_aarch64_tcg_plugins.py
@@ -16,7 +16,7 @@
import re
from qemu.machine.machine import VMLaunchFailure
-from qemu_test import LinuxKernelTest, Asset
+from qemu_test import LinuxKernelTest, Asset, dso_suffix
class PluginKernelBase(LinuxKernelTest):
@@ -62,6 +62,10 @@ class PluginKernelNormal(PluginKernelBase):
('https://storage.tuxboot.com/20230331/arm64/Image'),
'ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7')
+ def plugin_file(self, plugin_name):
+ suffix = dso_suffix()
+ return f'tests/tcg/plugins/{plugin_name}.{suffix}'
+
def test_aarch64_virt_insn(self):
self.set_machine('virt')
self.cpu='cortex-a53'
@@ -74,7 +78,7 @@ def test_aarch64_virt_insn(self):
suffix=".log")
self.run_vm(kernel_path, kernel_command_line,
- "tests/tcg/plugins/libinsn.so", plugin_log.name,
+ self.plugin_file('libinsn'), plugin_log.name,
console_pattern)
with plugin_log as lf, \
@@ -100,7 +104,7 @@ def test_aarch64_virt_insn_icount(self):
suffix=".log")
self.run_vm(kernel_path, kernel_command_line,
- "tests/tcg/plugins/libinsn.so", plugin_log.name,
+ self.plugin_file('libinsn'), plugin_log.name,
console_pattern,
args=('-icount', 'shift=1'))
--
2.47.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] tests/functional: Introduce the dso_suffix() helper
2025-02-19 19:23 ` [PATCH 1/2] tests/functional: Introduce the dso_suffix() helper Philippe Mathieu-Daudé
@ 2025-02-19 19:28 ` Pierrick Bouvier
2025-02-20 5:59 ` Thomas Huth
1 sibling, 0 replies; 11+ messages in thread
From: Pierrick Bouvier @ 2025-02-19 19:28 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé, Akihiko Odaki, Mahmoud Mandour,
Stefan Weil, Alex Bennée, Thomas Huth, Paolo Bonzini,
Alexandre Iooss, Yonggang Luo
On 2/19/25 11:23, Philippe Mathieu-Daudé wrote:
> Introduce a helper to get the default shared library
> suffix used on the host.
>
> Suggested-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> tests/functional/qemu_test/__init__.py | 2 +-
> tests/functional/qemu_test/cmd.py | 6 ++++++
> 2 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/tests/functional/qemu_test/__init__.py b/tests/functional/qemu_test/__init__.py
> index 5c972843a6d..e253288ee7f 100644
> --- a/tests/functional/qemu_test/__init__.py
> +++ b/tests/functional/qemu_test/__init__.py
> @@ -8,7 +8,7 @@
>
> from .asset import Asset
> from .config import BUILD_DIR
> -from .cmd import is_readable_executable_file, \
> +from .cmd import is_readable_executable_file, dso_suffix, \
> interrupt_interactive_console_until_pattern, wait_for_console_pattern, \
> exec_command, exec_command_and_wait_for_pattern, get_qemu_img, which
> from .testcase import QemuBaseTest, QemuUserTest, QemuSystemTest
> diff --git a/tests/functional/qemu_test/cmd.py b/tests/functional/qemu_test/cmd.py
> index dc5f422b77d..c4704dfb7bc 100644
> --- a/tests/functional/qemu_test/cmd.py
> +++ b/tests/functional/qemu_test/cmd.py
> @@ -14,6 +14,12 @@
> import logging
> import os
> import os.path
> +import platform
> +
> +def dso_suffix():
> + '''Return the dynamic libraries suffix for the current platform'''
> + DSO_SUFFIXES = { 'Linux': 'so', 'Darwin': 'dylib', 'Windows': 'dll' }
> + return DSO_SUFFIXES[platform.system()]
>
>
> def which(tool):
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] tests/functional: Allow running TCG plugins tests on non-Linux/BSD hosts
2025-02-19 19:23 ` [PATCH 2/2] tests/functional: Allow running TCG plugins tests on non-Linux/BSD hosts Philippe Mathieu-Daudé
@ 2025-02-19 19:29 ` Pierrick Bouvier
2025-02-20 6:02 ` Thomas Huth
2025-02-24 9:56 ` Daniel P. Berrangé
2 siblings, 0 replies; 11+ messages in thread
From: Pierrick Bouvier @ 2025-02-19 19:29 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé, Akihiko Odaki, Mahmoud Mandour,
Stefan Weil, Alex Bennée, Thomas Huth, Paolo Bonzini,
Alexandre Iooss, Yonggang Luo
On 2/19/25 11:23, Philippe Mathieu-Daudé wrote:
> Not all platforms use the '.so' suffix for shared libraries,
> which is how plugins are built. Use the recently introduced
> dso_suffix() helper to get the proper host suffix.
>
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2804
> Suggested-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
> Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> tests/functional/test_aarch64_tcg_plugins.py | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/tests/functional/test_aarch64_tcg_plugins.py b/tests/functional/test_aarch64_tcg_plugins.py
> index 7e8beacc833..306e46c7972 100755
> --- a/tests/functional/test_aarch64_tcg_plugins.py
> +++ b/tests/functional/test_aarch64_tcg_plugins.py
> @@ -16,7 +16,7 @@
> import re
>
> from qemu.machine.machine import VMLaunchFailure
> -from qemu_test import LinuxKernelTest, Asset
> +from qemu_test import LinuxKernelTest, Asset, dso_suffix
>
>
> class PluginKernelBase(LinuxKernelTest):
> @@ -62,6 +62,10 @@ class PluginKernelNormal(PluginKernelBase):
> ('https://storage.tuxboot.com/20230331/arm64/Image'),
> 'ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7')
>
> + def plugin_file(self, plugin_name):
> + suffix = dso_suffix()
> + return f'tests/tcg/plugins/{plugin_name}.{suffix}'
> +
> def test_aarch64_virt_insn(self):
> self.set_machine('virt')
> self.cpu='cortex-a53'
> @@ -74,7 +78,7 @@ def test_aarch64_virt_insn(self):
> suffix=".log")
>
> self.run_vm(kernel_path, kernel_command_line,
> - "tests/tcg/plugins/libinsn.so", plugin_log.name,
> + self.plugin_file('libinsn'), plugin_log.name,
> console_pattern)
>
> with plugin_log as lf, \
> @@ -100,7 +104,7 @@ def test_aarch64_virt_insn_icount(self):
> suffix=".log")
>
> self.run_vm(kernel_path, kernel_command_line,
> - "tests/tcg/plugins/libinsn.so", plugin_log.name,
> + self.plugin_file('libinsn'), plugin_log.name,
> console_pattern,
> args=('-icount', 'shift=1'))
>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/2] tests/functional: Allow running TCG plugins tests on macOS
2025-02-19 19:23 [PATCH 0/2] tests/functional: Allow running TCG plugins tests on macOS Philippe Mathieu-Daudé
2025-02-19 19:23 ` [PATCH 1/2] tests/functional: Introduce the dso_suffix() helper Philippe Mathieu-Daudé
2025-02-19 19:23 ` [PATCH 2/2] tests/functional: Allow running TCG plugins tests on non-Linux/BSD hosts Philippe Mathieu-Daudé
@ 2025-02-19 20:30 ` Pierrick Bouvier
2025-02-19 21:19 ` Philippe Mathieu-Daudé
2 siblings, 1 reply; 11+ messages in thread
From: Pierrick Bouvier @ 2025-02-19 20:30 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé, Akihiko Odaki, Mahmoud Mandour,
Stefan Weil, Alex Bennée, Thomas Huth, Paolo Bonzini,
Alexandre Iooss, Yonggang Luo
Hi Philippe,
On 2/19/25 11:23, Philippe Mathieu-Daudé wrote:
> Pierrick kindly helped me to resolve this issue which ended
> being trivial (to him!). Not tested on Windows so far.
>
> I'm still having some meson dependency problem, even on Linux:
>
> $ make check-functional-aarch64
> ...
> Traceback (most recent call last):
> File "python/qemu/qmp/protocol.py", line 834, in _bh_close_stream
> await wait_closed(self._writer)
> File "python/qemu/qmp/util.py", line 130, in wait_closed
> await writer.wait_closed()
> File "/usr/lib/python3.10/asyncio/streams.py", line 343, in wait_closed
> await self._protocol._get_close_waiter(self)
> File "/usr/lib/python3.10/asyncio/selector_events.py", line 862, in _read_ready__data_received
> data = self._sock.recv(self.max_size)
> ConnectionResetError: [Errno 104] Connection reset by peer
>
> The above exception was the direct cause of the following exception:
>
> Traceback (most recent call last):
> File "python/qemu/machine/machine.py", line 448, in launch
> self._launch()
> File "python/qemu/machine/machine.py", line 497, in _launch
> self._post_launch()
> File "python/qemu/machine/machine.py", line 381, in _post_launch
> self._qmp.connect()
> File "python/qemu/qmp/legacy.py", line 153, in connect
> self._sync(
> File "python/qemu/qmp/legacy.py", line 102, in _sync
> return self._aloop.run_until_complete(
> File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
> return future.result()
> File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
> return await fut
> File "python/qemu/qmp/protocol.py", line 382, in connect
> await self._session_guard(
> File "python/qemu/qmp/protocol.py", line 456, in _session_guard
> raise ConnectError(emsg, err) from err
> qemu.qmp.protocol.ConnectError: Failed to establish session: [Errno 104] Connection reset by peer
>
> The above exception was the direct cause of the following exception:
>
> Traceback (most recent call last):
> File "tests/functional/test_aarch64_tcg_plugins.py", line 80, in test_aarch64_virt_insn
> self.run_vm(kernel_path, kernel_command_line,
> File "tests/functional/test_aarch64_tcg_plugins.py", line 52, in run_vm
> raise excp
> File "tests/functional/test_aarch64_tcg_plugins.py", line 46, in run_vm
> vm.launch()
> File "python/qemu/machine/machine.py", line 461, in launch
> raise VMLaunchFailure(
> qemu.machine.machine.VMLaunchFailure: ConnectError: Failed to establish session: [Errno 104] Connection reset by peer
> Exit code: 1
> Command: build/plugins/qemu-system-aarch64 -display none -vga none -chardev socket,id=mon,fd=6 -mon chardev=mon,mode=control -machine virt -chardev socket,id=console,fd=11 -serial chardev:console -cpu cortex-a53 -kernel /home/philippe.mathieu-daude/.cache/qemu/download/ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7 -append printk.time=1 panic=-1 console=ttyAMA0 -plugin tests/tcg/plugins/libinsn.so -d plugin -D /tmp/plugini36uailv.log -net none -no-reboot
> Output: qemu-system-aarch64: Could not load plugin tests/tcg/plugins/libinsn.so: tests/tcg/plugins/libinsn.so: cannot open shared object file: No such file or directory
> make[1]: *** [Makefile.mtest:26: do-meson-check] Error 1
>
> I don't mind much building the plugins manually:
>
> $ make tests/tcg/plugins/libinsn.so
> [1/2] Compiling C object tests/tcg/plugins/libinsn.so.p/insn.c.o
> [2/2] Linking target tests/tcg/plugins/libinsn.so
>
Meson tests dependency is missing for plugins, so we need to add it.
By running: make check-functional-aarch64 V=1, you can see it's only
building qemu-img, qemu-system and roms files.
You can integrate this patch in your series:
commit a375e9b560685bf4ccd6332cc23ce6850ec2fbbe
Author: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Date: Wed Feb 19 12:26:53 2025 -0800
plugins: add explicit dependency in functional tests
./tests/functional/test_aarch64_tcg_plugins.py needs to have plugin
libinsn built. However, it's not listed as a dependency, so meson can't
know it needs to be built.
Thus, we keep track of all plugins, and add them as an explicit
dependency.
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
diff --git a/meson.build b/meson.build
index 18b40a21a5a..80b9c8edd71 100644
--- a/meson.build
+++ b/meson.build
@@ -3658,6 +3658,7 @@ qtest_module_ss = ss.source_set()
modules = {}
target_modules = {}
+plugin_modules = []
hw_arch = {}
target_arch = {}
target_system_arch = {}
diff --git a/contrib/plugins/meson.build b/contrib/plugins/meson.build
index c4f5061a7b3..327b48c8886 100644
--- a/contrib/plugins/meson.build
+++ b/contrib/plugins/meson.build
@@ -27,3 +27,5 @@ if t.length() > 0
else
run_target('contrib-plugins', command: find_program('true'))
endif
+
+plugin_modules += t
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index 21c7e2087e9..dcea5d41e10 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -364,7 +364,7 @@ foreach speed : ['quick', 'thorough']
# 'run_target' logic below & in Makefile.include
test('func-' + testname,
python,
- depends: [test_deps, test_emulator, emulator_modules],
+ depends: [test_deps, test_emulator, emulator_modules,
plugin_modules],
env: test_env,
args: [testpath],
protocol: 'tap',
diff --git a/tests/tcg/plugins/meson.build b/tests/tcg/plugins/meson.build
index 7f927357421..0e4d4f5d6af 100644
--- a/tests/tcg/plugins/meson.build
+++ b/tests/tcg/plugins/meson.build
@@ -19,3 +19,5 @@ if t.length() > 0
else
run_target('test-plugins', command: find_program('true'))
endif
+
+plugin_modules += t
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 0/2] tests/functional: Allow running TCG plugins tests on macOS
2025-02-19 20:30 ` [PATCH 0/2] tests/functional: Allow running TCG plugins tests on macOS Pierrick Bouvier
@ 2025-02-19 21:19 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-02-19 21:19 UTC (permalink / raw)
To: Pierrick Bouvier, qemu-devel
Cc: Daniel P. Berrangé, Akihiko Odaki, Mahmoud Mandour,
Stefan Weil, Alex Bennée, Thomas Huth, Paolo Bonzini,
Alexandre Iooss, Yonggang Luo
On 19/2/25 21:30, Pierrick Bouvier wrote:
> Hi Philippe,
>
> On 2/19/25 11:23, Philippe Mathieu-Daudé wrote:
>> Pierrick kindly helped me to resolve this issue which ended
>> being trivial (to him!). Not tested on Windows so far.
>>
>> I'm still having some meson dependency problem, even on Linux:
>>
>> $ make check-functional-aarch64
>> ...
>> Traceback (most recent call last):
>> File "python/qemu/qmp/protocol.py", line 834, in _bh_close_stream
>> await wait_closed(self._writer)
>> File "python/qemu/qmp/util.py", line 130, in wait_closed
>> await writer.wait_closed()
>> File "/usr/lib/python3.10/asyncio/streams.py", line 343, in
>> wait_closed
>> await self._protocol._get_close_waiter(self)
>> File "/usr/lib/python3.10/asyncio/selector_events.py", line 862,
>> in _read_ready__data_received
>> data = self._sock.recv(self.max_size)
>> ConnectionResetError: [Errno 104] Connection reset by peer
>>
>> The above exception was the direct cause of the following exception:
>>
>> Traceback (most recent call last):
>> File "python/qemu/machine/machine.py", line 448, in launch
>> self._launch()
>> File "python/qemu/machine/machine.py", line 497, in _launch
>> self._post_launch()
>> File "python/qemu/machine/machine.py", line 381, in _post_launch
>> self._qmp.connect()
>> File "python/qemu/qmp/legacy.py", line 153, in connect
>> self._sync(
>> File "python/qemu/qmp/legacy.py", line 102, in _sync
>> return self._aloop.run_until_complete(
>> File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in
>> run_until_complete
>> return future.result()
>> File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
>> return await fut
>> File "python/qemu/qmp/protocol.py", line 382, in connect
>> await self._session_guard(
>> File "python/qemu/qmp/protocol.py", line 456, in _session_guard
>> raise ConnectError(emsg, err) from err
>> qemu.qmp.protocol.ConnectError: Failed to establish session: [Errno
>> 104] Connection reset by peer
>>
>> The above exception was the direct cause of the following exception:
>>
>> Traceback (most recent call last):
>> File "tests/functional/test_aarch64_tcg_plugins.py", line 80, in
>> test_aarch64_virt_insn
>> self.run_vm(kernel_path, kernel_command_line,
>> File "tests/functional/test_aarch64_tcg_plugins.py", line 52, in
>> run_vm
>> raise excp
>> File "tests/functional/test_aarch64_tcg_plugins.py", line 46, in
>> run_vm
>> vm.launch()
>> File "python/qemu/machine/machine.py", line 461, in launch
>> raise VMLaunchFailure(
>> qemu.machine.machine.VMLaunchFailure: ConnectError: Failed to
>> establish session: [Errno 104] Connection reset by peer
>> Exit code: 1
>> Command: build/plugins/qemu-system-aarch64 -display none -vga
>> none -chardev socket,id=mon,fd=6 -mon chardev=mon,mode=control -
>> machine virt -chardev socket,id=console,fd=11 -serial chardev:console
>> -cpu cortex-a53 -kernel /home/philippe.mathieu-daude/.cache/qemu/
>> download/
>> ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7 -
>> append printk.time=1 panic=-1 console=ttyAMA0 -plugin tests/tcg/
>> plugins/libinsn.so -d plugin -D /tmp/plugini36uailv.log -net none -no-
>> reboot
>> Output: qemu-system-aarch64: Could not load plugin tests/tcg/
>> plugins/libinsn.so: tests/tcg/plugins/libinsn.so: cannot open shared
>> object file: No such file or directory
>> make[1]: *** [Makefile.mtest:26: do-meson-check] Error 1
>>
>> I don't mind much building the plugins manually:
>>
>> $ make tests/tcg/plugins/libinsn.so
>> [1/2] Compiling C object tests/tcg/plugins/libinsn.so.p/insn.c.o
>> [2/2] Linking target tests/tcg/plugins/libinsn.so
>>
>
> Meson tests dependency is missing for plugins, so we need to add it.
>
> By running: make check-functional-aarch64 V=1, you can see it's only
> building qemu-img, qemu-system and roms files.
>
> You can integrate this patch in your series:
>
> commit a375e9b560685bf4ccd6332cc23ce6850ec2fbbe
> Author: Pierrick Bouvier <pierrick.bouvier@linaro.org>
> Date: Wed Feb 19 12:26:53 2025 -0800
>
> plugins: add explicit dependency in functional tests
>
> ./tests/functional/test_aarch64_tcg_plugins.py needs to have plugin
> libinsn built. However, it's not listed as a dependency, so meson
> can't
> know it needs to be built.
>
> Thus, we keep track of all plugins, and add them as an explicit
> dependency.
>
> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
>
> diff --git a/meson.build b/meson.build
> index 18b40a21a5a..80b9c8edd71 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -3658,6 +3658,7 @@ qtest_module_ss = ss.source_set()
>
> modules = {}
> target_modules = {}
> +plugin_modules = []
> hw_arch = {}
> target_arch = {}
> target_system_arch = {}
> diff --git a/contrib/plugins/meson.build b/contrib/plugins/meson.build
> index c4f5061a7b3..327b48c8886 100644
> --- a/contrib/plugins/meson.build
> +++ b/contrib/plugins/meson.build
> @@ -27,3 +27,5 @@ if t.length() > 0
> else
> run_target('contrib-plugins', command: find_program('true'))
> endif
> +
> +plugin_modules += t
> diff --git a/tests/functional/meson.build b/tests/functional/meson.build
> index 21c7e2087e9..dcea5d41e10 100644
> --- a/tests/functional/meson.build
> +++ b/tests/functional/meson.build
> @@ -364,7 +364,7 @@ foreach speed : ['quick', 'thorough']
> # 'run_target' logic below & in Makefile.include
> test('func-' + testname,
> python,
> - depends: [test_deps, test_emulator, emulator_modules],
> + depends: [test_deps, test_emulator, emulator_modules,
> plugin_modules],
> env: test_env,
> args: [testpath],
> protocol: 'tap',
> diff --git a/tests/tcg/plugins/meson.build b/tests/tcg/plugins/meson.build
> index 7f927357421..0e4d4f5d6af 100644
> --- a/tests/tcg/plugins/meson.build
> +++ b/tests/tcg/plugins/meson.build
> @@ -19,3 +19,5 @@ if t.length() > 0
> else
> run_target('test-plugins', command: find_program('true'))
> endif
> +
> +plugin_modules += t
>
[26/36] Compiling C object tests/tcg/plugins/libbb.so.p/bb.c.o
[27/36] Linking target tests/tcg/plugins/libinsn.so
[28/36] Compiling C object tests/tcg/plugins/libinline.so.p/inline.c.o
[29/36] Linking target tests/tcg/plugins/libinline.so
[30/36] Compiling C object tests/tcg/plugins/libmem.so.p/mem.c.o
[31/36] Compiling C object tests/tcg/plugins/libempty.so.p/empty.c.o
[32/36] Linking target tests/tcg/plugins/libempty.so
[33/36] Linking target tests/tcg/plugins/libbb.so
[34/36] Linking target tests/tcg/plugins/libmem.so
[35/36] Compiling C object tests/tcg/plugins/libsyscall.so.p/syscall.c.o
[36/36] Linking target tests/tcg/plugins/libsyscall.so
Yes this works, thanks!
For your embedded patch:
> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] tests/functional: Introduce the dso_suffix() helper
2025-02-19 19:23 ` [PATCH 1/2] tests/functional: Introduce the dso_suffix() helper Philippe Mathieu-Daudé
2025-02-19 19:28 ` Pierrick Bouvier
@ 2025-02-20 5:59 ` Thomas Huth
1 sibling, 0 replies; 11+ messages in thread
From: Thomas Huth @ 2025-02-20 5:59 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé, Pierrick Bouvier, Akihiko Odaki,
Mahmoud Mandour, Stefan Weil, Alex Bennée, Paolo Bonzini,
Alexandre Iooss, Yonggang Luo
On 19/02/2025 20.23, Philippe Mathieu-Daudé wrote:
> Introduce a helper to get the default shared library
> suffix used on the host.
>
> Suggested-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> tests/functional/qemu_test/__init__.py | 2 +-
> tests/functional/qemu_test/cmd.py | 6 ++++++
> 2 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/tests/functional/qemu_test/__init__.py b/tests/functional/qemu_test/__init__.py
> index 5c972843a6d..e253288ee7f 100644
> --- a/tests/functional/qemu_test/__init__.py
> +++ b/tests/functional/qemu_test/__init__.py
> @@ -8,7 +8,7 @@
>
> from .asset import Asset
> from .config import BUILD_DIR
> -from .cmd import is_readable_executable_file, \
> +from .cmd import is_readable_executable_file, dso_suffix, \
> interrupt_interactive_console_until_pattern, wait_for_console_pattern, \
> exec_command, exec_command_and_wait_for_pattern, get_qemu_img, which
> from .testcase import QemuBaseTest, QemuUserTest, QemuSystemTest
> diff --git a/tests/functional/qemu_test/cmd.py b/tests/functional/qemu_test/cmd.py
> index dc5f422b77d..c4704dfb7bc 100644
> --- a/tests/functional/qemu_test/cmd.py
> +++ b/tests/functional/qemu_test/cmd.py
Maybe config.py would be a better place?
Thomas
> @@ -14,6 +14,12 @@
> import logging
> import os
> import os.path
> +import platform
> +
> +def dso_suffix():
> + '''Return the dynamic libraries suffix for the current platform'''
> + DSO_SUFFIXES = { 'Linux': 'so', 'Darwin': 'dylib', 'Windows': 'dll' }
> + return DSO_SUFFIXES[platform.system()]
>
>
> def which(tool):
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] tests/functional: Allow running TCG plugins tests on non-Linux/BSD hosts
2025-02-19 19:23 ` [PATCH 2/2] tests/functional: Allow running TCG plugins tests on non-Linux/BSD hosts Philippe Mathieu-Daudé
2025-02-19 19:29 ` Pierrick Bouvier
@ 2025-02-20 6:02 ` Thomas Huth
2025-02-20 7:06 ` Stefan Weil via
2025-02-24 9:56 ` Daniel P. Berrangé
2 siblings, 1 reply; 11+ messages in thread
From: Thomas Huth @ 2025-02-20 6:02 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé, Pierrick Bouvier, Akihiko Odaki,
Mahmoud Mandour, Stefan Weil, Alex Bennée, Paolo Bonzini,
Alexandre Iooss, Yonggang Luo
On 19/02/2025 20.23, Philippe Mathieu-Daudé wrote:
> Not all platforms use the '.so' suffix for shared libraries,
> which is how plugins are built. Use the recently introduced
> dso_suffix() helper to get the proper host suffix.
>
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2804
> Suggested-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
> Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> tests/functional/test_aarch64_tcg_plugins.py | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/tests/functional/test_aarch64_tcg_plugins.py b/tests/functional/test_aarch64_tcg_plugins.py
> index 7e8beacc833..306e46c7972 100755
> --- a/tests/functional/test_aarch64_tcg_plugins.py
> +++ b/tests/functional/test_aarch64_tcg_plugins.py
> @@ -16,7 +16,7 @@
> import re
>
> from qemu.machine.machine import VMLaunchFailure
> -from qemu_test import LinuxKernelTest, Asset
> +from qemu_test import LinuxKernelTest, Asset, dso_suffix
>
>
> class PluginKernelBase(LinuxKernelTest):
> @@ -62,6 +62,10 @@ class PluginKernelNormal(PluginKernelBase):
> ('https://storage.tuxboot.com/20230331/arm64/Image'),
> 'ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7')
>
> + def plugin_file(self, plugin_name):
> + suffix = dso_suffix()
> + return f'tests/tcg/plugins/{plugin_name}.{suffix}'
Since you're adding support for the .DLL suffix on Windows, too: Maybe
better to use os.path.join() for Windows that doesn't use the slash as path
separator?
Thomas
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] tests/functional: Allow running TCG plugins tests on non-Linux/BSD hosts
2025-02-20 6:02 ` Thomas Huth
@ 2025-02-20 7:06 ` Stefan Weil via
0 siblings, 0 replies; 11+ messages in thread
From: Stefan Weil via @ 2025-02-20 7:06 UTC (permalink / raw)
To: Thomas Huth, Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P. Berrangé, Pierrick Bouvier, Akihiko Odaki,
Mahmoud Mandour, Alex Bennée, Paolo Bonzini, Alexandre Iooss,
Yonggang Luo
Am 20.02.25 um 07:02 schrieb Thomas Huth:
> On 19/02/2025 20.23, Philippe Mathieu-Daudé wrote:
>> @@ -62,6 +62,10 @@ class PluginKernelNormal(PluginKernelBase):
>> ('https://storage.tuxboot.com/20230331/arm64/Image'),
>> 'ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7')
>> + def plugin_file(self, plugin_name):
>> + suffix = dso_suffix()
>> + return f'tests/tcg/plugins/{plugin_name}.{suffix}'
>
> Since you're adding support for the .DLL suffix on Windows, too: Maybe
> better to use os.path.join() for Windows that doesn't use the slash as
> path separator?
>
> Thomas
That could be done, but should not be necessary.
Microsoft supports the slash as path separator, too, since its earliest
MSDOS, and it is still supported for Windows.
But of course it might be confusing for many people to see a mix of
different path separators in debug messages or log files.
Stefan
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] tests/functional: Allow running TCG plugins tests on non-Linux/BSD hosts
2025-02-19 19:23 ` [PATCH 2/2] tests/functional: Allow running TCG plugins tests on non-Linux/BSD hosts Philippe Mathieu-Daudé
2025-02-19 19:29 ` Pierrick Bouvier
2025-02-20 6:02 ` Thomas Huth
@ 2025-02-24 9:56 ` Daniel P. Berrangé
2 siblings, 0 replies; 11+ messages in thread
From: Daniel P. Berrangé @ 2025-02-24 9:56 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, Pierrick Bouvier, Akihiko Odaki, Mahmoud Mandour,
Stefan Weil, Alex Bennée, Thomas Huth, Paolo Bonzini,
Alexandre Iooss, Yonggang Luo
On Wed, Feb 19, 2025 at 08:23:40PM +0100, Philippe Mathieu-Daudé wrote:
> Not all platforms use the '.so' suffix for shared libraries,
> which is how plugins are built. Use the recently introduced
> dso_suffix() helper to get the proper host suffix.
>
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2804
> Suggested-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
> Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> tests/functional/test_aarch64_tcg_plugins.py | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/tests/functional/test_aarch64_tcg_plugins.py b/tests/functional/test_aarch64_tcg_plugins.py
> index 7e8beacc833..306e46c7972 100755
> --- a/tests/functional/test_aarch64_tcg_plugins.py
> +++ b/tests/functional/test_aarch64_tcg_plugins.py
> @@ -16,7 +16,7 @@
> import re
>
> from qemu.machine.machine import VMLaunchFailure
> -from qemu_test import LinuxKernelTest, Asset
> +from qemu_test import LinuxKernelTest, Asset, dso_suffix
>
>
> class PluginKernelBase(LinuxKernelTest):
> @@ -62,6 +62,10 @@ class PluginKernelNormal(PluginKernelBase):
> ('https://storage.tuxboot.com/20230331/arm64/Image'),
> 'ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7')
>
> + def plugin_file(self, plugin_name):
> + suffix = dso_suffix()
> + return f'tests/tcg/plugins/{plugin_name}.{suffix}'
> +
IMHO this should be on the QemuBaseTest class with all the other similar
path file helpers, since in the long run plugins are liable to be used
for more than just this one test program.
> def test_aarch64_virt_insn(self):
> self.set_machine('virt')
> self.cpu='cortex-a53'
> @@ -74,7 +78,7 @@ def test_aarch64_virt_insn(self):
> suffix=".log")
>
> self.run_vm(kernel_path, kernel_command_line,
> - "tests/tcg/plugins/libinsn.so", plugin_log.name,
> + self.plugin_file('libinsn'), plugin_log.name,
> console_pattern)
>
> with plugin_log as lf, \
> @@ -100,7 +104,7 @@ def test_aarch64_virt_insn_icount(self):
> suffix=".log")
>
> self.run_vm(kernel_path, kernel_command_line,
> - "tests/tcg/plugins/libinsn.so", plugin_log.name,
> + self.plugin_file('libinsn'), plugin_log.name,
> console_pattern,
> args=('-icount', 'shift=1'))
>
> --
> 2.47.1
>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2025-02-24 9:57 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-19 19:23 [PATCH 0/2] tests/functional: Allow running TCG plugins tests on macOS Philippe Mathieu-Daudé
2025-02-19 19:23 ` [PATCH 1/2] tests/functional: Introduce the dso_suffix() helper Philippe Mathieu-Daudé
2025-02-19 19:28 ` Pierrick Bouvier
2025-02-20 5:59 ` Thomas Huth
2025-02-19 19:23 ` [PATCH 2/2] tests/functional: Allow running TCG plugins tests on non-Linux/BSD hosts Philippe Mathieu-Daudé
2025-02-19 19:29 ` Pierrick Bouvier
2025-02-20 6:02 ` Thomas Huth
2025-02-20 7:06 ` Stefan Weil via
2025-02-24 9:56 ` Daniel P. Berrangé
2025-02-19 20:30 ` [PATCH 0/2] tests/functional: Allow running TCG plugins tests on macOS Pierrick Bouvier
2025-02-19 21:19 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).