[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 15/23] tests/acceptance: add a new set of tests to exercise plugin
From: |
Alex Bennée |
Subject: |
[PULL 15/23] tests/acceptance: add a new set of tests to exercise plugins |
Date: |
Thu, 18 Feb 2021 09:46:58 +0000 |
This is just a simple test to count the instructions executed by a
kernel. However a later test will detect a failure condition when
icount is enabled.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20210213130325.14781-16-alex.bennee@linaro.org>
diff --git a/MAINTAINERS b/MAINTAINERS
index 68ee271792..1d711e0cb8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2903,6 +2903,7 @@ S: Maintained
F: docs/devel/tcg-plugins.rst
F: plugins/
F: tests/plugin/
+F: tests/acceptance/tcg_plugins.py
F: contrib/plugins/
AArch64 TCG target
diff --git a/tests/acceptance/tcg_plugins.py b/tests/acceptance/tcg_plugins.py
new file mode 100644
index 0000000000..adec40d3a5
--- /dev/null
+++ b/tests/acceptance/tcg_plugins.py
@@ -0,0 +1,91 @@
+# TCG Plugins tests
+#
+# These are a little more involved than the basic tests run by check-tcg.
+#
+# Copyright (c) 2021 Linaro
+#
+# Author:
+# Alex Bennée <alex.bennee@linaro.org>
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import tempfile
+import mmap
+import re
+
+from boot_linux_console import LinuxKernelTest
+
+
+class PluginKernelBase(LinuxKernelTest):
+ """
+ Boots a Linux kernel with a TCG plugin enabled.
+ """
+
+ timeout = 120
+ KERNEL_COMMON_COMMAND_LINE = 'printk.time=1 panic=-1 '
+
+ def run_vm(self, kernel_path, kernel_command_line,
+ plugin, plugin_log, console_pattern, args):
+
+ vm = self.get_vm()
+ vm.set_console()
+ vm.add_args('-kernel', kernel_path,
+ '-append', kernel_command_line,
+ '-plugin', plugin,
+ '-d', 'plugin',
+ '-D', plugin_log,
+ '-net', 'none',
+ '-no-reboot')
+ if args:
+ vm.add_args(*args)
+
+ try:
+ vm.launch()
+ except:
+ # TODO: probably fails because plugins not enabled but we
+ # can't currently probe for the feature.
+ self.cancel("TCG Plugins not enabled?")
+
+ self.wait_for_console_pattern(console_pattern, vm)
+ # ensure logs are flushed
+ vm.shutdown()
+
+
+class PluginKernelNormal(PluginKernelBase):
+
+ def _grab_aarch64_kernel(self):
+ kernel_url = ('http://security.debian.org/'
+ 'debian-security/pool/updates/main/l/linux-signed-arm64/'
+ 'linux-image-4.19.0-12-arm64_4.19.152-1_arm64.deb')
+ kernel_sha1 = '2036c2792f80ac9c4ccaae742b2e0a28385b6010'
+ kernel_deb = self.fetch_asset(kernel_url, asset_hash=kernel_sha1)
+ kernel_path = self.extract_from_deb(kernel_deb,
+ "/boot/vmlinuz-4.19.0-12-arm64")
+ return kernel_path
+
+ def test_aarch64_virt_insn(self):
+ """
+ :avocado: tags=accel:tcg
+ :avocado: tags=arch:aarch64
+ :avocado: tags=machine:virt
+ :avocado: tags=cpu:cortex-a57
+ """
+ kernel_path = self._grab_aarch64_kernel()
+ kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+ 'console=ttyAMA0')
+ console_pattern = 'Kernel panic - not syncing: VFS:'
+
+ plugin_log = tempfile.NamedTemporaryFile(mode="r+t", prefix="plugin",
+ suffix=".log")
+
+ self.run_vm(kernel_path, kernel_command_line,
+ "tests/plugin/libinsn.so", plugin_log.name,
+ console_pattern,
+ args=('-cpu', 'cortex-a53'))
+
+ with plugin_log as lf, \
+ mmap.mmap(lf.fileno(), 0, access=mmap.ACCESS_READ) as s:
+
+ m = re.search(br"insns: (?P<count>\d+)", s)
+ if "count" not in m.groupdict():
+ self.fail("Failed to find instruction count")
--
2.20.1
- [PULL 12/23] target/mips: Create mips_io_recompile_replay_branch, (continued)
- [PULL 12/23] target/mips: Create mips_io_recompile_replay_branch, Alex Bennée, 2021/02/18
- [PULL 04/23] contrib: Don't use '#' flag of printf format, Alex Bennée, 2021/02/18
- [PULL 02/23] plugins: add API to return a name for a IO device, Alex Bennée, 2021/02/18
- [PULL 10/23] exec: Move TranslationBlock typedef to qemu/typedefs.h, Alex Bennée, 2021/02/18
- [PULL 03/23] plugins: new hwprofile plugin, Alex Bennée, 2021/02/18
- [PULL 05/23] contrib: Fix some code style problems, ERROR: "foo * bar" should be "foo *bar", Alex Bennée, 2021/02/18
- [PULL 07/23] contrib: space required after that ',', Alex Bennée, 2021/02/18
- [PULL 08/23] contrib: Open brace '{' following struct go on the same line, Alex Bennée, 2021/02/18
- [PULL 06/23] contrib: Add spaces around operator, Alex Bennée, 2021/02/18
- [PULL 11/23] accel/tcg: Create io_recompile_replay_branch hook, Alex Bennée, 2021/02/18
- [PULL 15/23] tests/acceptance: add a new set of tests to exercise plugins,
Alex Bennée <=
- [PULL 18/23] accel/tcg: re-factor non-RAM execution code, Alex Bennée, 2021/02/18
- [PULL 21/23] tests/acceptance: add a new tests to detect counting errors, Alex Bennée, 2021/02/18
- [PULL 16/23] accel/tcg: actually cache our partial icount TB, Alex Bennée, 2021/02/18
- [PULL 22/23] tests/plugin: allow memory plugin to do both inline and callbacks, Alex Bennée, 2021/02/18
- [PULL 13/23] target/sh4: Create superh_io_recompile_replay_branch, Alex Bennée, 2021/02/18
- [PULL 09/23] accel/tcg/plugin-gen: fix the call signature for inline callbacks, Alex Bennée, 2021/02/18
- [PULL 19/23] accel/tcg: remove CF_NOCACHE and special cases, Alex Bennée, 2021/02/18
- [PULL 23/23] tests/acceptance: add a memory callback check, Alex Bennée, 2021/02/18
- [PULL 17/23] accel/tcg: cache single instruction TB on pending replay exception, Alex Bennée, 2021/02/18
- [PULL 20/23] accel/tcg: allow plugin instrumentation to be disable via cflags, Alex Bennée, 2021/02/18