[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 17/39] tests/functional: add a QMP backdoor for debugging stalled
From: |
Alex Bennée |
Subject: |
[PATCH 17/39] tests/functional: add a QMP backdoor for debugging stalled tests |
Date: |
Thu, 21 Nov 2024 16:57:44 +0000 |
From: Daniel P. Berrangé <berrange@redhat.com>
Support the QEMU_TEST_QMP_BACKDOOR=backdoor.sock env variable as a
way to get a QMP backdoor for debugging a stalled QEMU test. Most
typically this would be used if running the tests directly:
$ QEMU_TEST_QMP_BACKDOOR=backdoor.sock \
QEMU_TEST_QEMU_BINARY=./build/qemu-system-arm \
PYTHONPATH=./python \
./tests/functional/test_arm_tuxrun.py
And then, when the test stalls, in a second shell run:
$ ./scripts/qmp/qmp-shell backdoor.sock
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20241121154218.1423005-18-berrange@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
docs/devel/testing/functional.rst | 10 ++++++++++
tests/functional/qemu_test/testcase.py | 7 +++++++
2 files changed, 17 insertions(+)
diff --git a/docs/devel/testing/functional.rst
b/docs/devel/testing/functional.rst
index 6b5d0c5b98..b8ad7b0bf7 100644
--- a/docs/devel/testing/functional.rst
+++ b/docs/devel/testing/functional.rst
@@ -176,6 +176,16 @@ primarily depend on the value of the ``qemu_bin`` class
attribute.
If it is not explicitly set by the test code, its default value will
be the result the QEMU_TEST_QEMU_BINARY environment variable.
+Debugging hung QEMU
+^^^^^^^^^^^^^^^^^^^
+
+When test cases go wrong it may be helpful to debug a stalled QEMU
+process. While the QEMUMachine class owns the primary QMP monitor
+socket, it is possible to request a second QMP monitor be created
+by setting the ``QEMU_TEST_QMP_BACKDOOR`` env variable to refer
+to a UNIX socket name. The ``qmp-shell`` command can then be
+attached to the stalled QEMU to examine its live state.
+
Attribute reference
-------------------
diff --git a/tests/functional/qemu_test/testcase.py
b/tests/functional/qemu_test/testcase.py
index e2a329c3e5..fceafb32b0 100644
--- a/tests/functional/qemu_test/testcase.py
+++ b/tests/functional/qemu_test/testcase.py
@@ -175,6 +175,13 @@ def _new_vm(self, name, *args):
log_dir=self.logdir)
self.log.debug('QEMUMachine "%s" created', name)
self.log.debug('QEMUMachine "%s" temp_dir: %s', name, vm.temp_dir)
+
+ sockpath = os.environ.get("QEMU_TEST_QMP_BACKDOOR", None)
+ if sockpath is not None:
+ vm.add_args("-chardev",
+
f"socket,id=backdoor,path={sockpath},server=on,wait=off",
+ "-mon", "chardev=backdoor,mode=control")
+
if args:
vm.add_args(*args)
return vm
--
2.39.5
- Re: [PATCH 30/39] tests/functional: update the riscv32 tuxrun tests, (continued)
- [PATCH 31/39] tests/functional: update the riscv64 tuxrun tests, Alex Bennée, 2024/11/21
- [PATCH 19/39] tests/functional: Convert the Avocado aarch64 tuxrun tests, Alex Bennée, 2024/11/21
- [PATCH 39/39] docs: explicitly permit a "commonly known identity" with SoB, Alex Bennée, 2024/11/21
- [PATCH 24/39] tests/functional: update the mips32 tuxrun tests, Alex Bennée, 2024/11/21
- [PATCH 35/39] plugins: add missing export for qemu_plugin_num_vcpus, Alex Bennée, 2024/11/21
- [PATCH 21/39] tests/functional: update the aarch64 tuxrun tests, Alex Bennée, 2024/11/21
- [PATCH 17/39] tests/functional: add a QMP backdoor for debugging stalled tests,
Alex Bennée <=
- [PATCH 29/39] tests/functional: update the ppc64 tuxrun tests, Alex Bennée, 2024/11/21
- [PATCH 33/39] tests/functional: update the sparc64 tuxrun tests, Alex Bennée, 2024/11/21
- [PATCH 18/39] tests/functional: avoid accessing log_filename on earlier failures, Alex Bennée, 2024/11/21
- [PATCH 20/39] tests/functional: update the arm tuxrun tests, Alex Bennée, 2024/11/21
- [PATCH 23/39] tests/functional: add a m68k tuxrun tests, Alex Bennée, 2024/11/21