[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 6/6] tests/device-introspect: Test with all mach
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH 6/6] tests/device-introspect: Test with all machines, not only with "none" |
Date: |
Wed, 15 Aug 2018 14:25:16 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) |
Thomas Huth <address@hidden> writes:
> Certain device introspection crashes used to only happen if you were
> using a certain machine, e.g. if the machine was using serial_hd() or
> nd_table[], and a device was trying to use these in its instance_init
> function, too.
>
> To be able to catch these problems, let's extend the device-introspect
> test to check the devices on all machine types. Since this is a rather
> slow operation, and most of the problems are already handled by testing
> with the "none" machine only, the test with all machines is only run
> in the "make check SPEED=slow" mode.
>
> Signed-off-by: Thomas Huth <address@hidden>
> ---
> tests/device-introspect-test.c | 32 +++++++++++++++++++++++++++++---
> 1 file changed, 29 insertions(+), 3 deletions(-)
>
> diff --git a/tests/device-introspect-test.c b/tests/device-introspect-test.c
> index 5b7ec05..902153c 100644
> --- a/tests/device-introspect-test.c
> +++ b/tests/device-introspect-test.c
> @@ -221,13 +221,13 @@ static void test_device_intro_abstract(void)
> qtest_end();
> }
>
> -static void test_device_intro_concrete(void)
> +static void test_device_intro_concrete(const void *args)
> {
> QList *types;
> QListEntry *entry;
> const char *type;
>
> - qtest_start(common_args);
> + qtest_start(args);
> types = device_type_list(false);
>
> QLIST_FOREACH_ENTRY(types, entry) {
> @@ -239,6 +239,7 @@ static void test_device_intro_concrete(void)
>
> qobject_unref(types);
> qtest_end();
> + g_free((void *)args);
> }
>
> static void test_abstract_interfaces(void)
> @@ -275,6 +276,26 @@ static void test_abstract_interfaces(void)
> qtest_end();
> }
>
> +static void add_machine_test_case(const char *mname)
> +{
> + char *path, *args;
> +
> + /* Ignore blacklisted machines */
> + if (g_str_equal("xenfv", mname) || g_str_equal("xenpv", mname)) {
> + return;
> + }
> +
> + path = g_strdup_printf("device/introspect/concrete/defaults/%s", mname);
> + args = g_strdup_printf("-M %s", mname);
> + qtest_add_data_func(path, args, test_device_intro_concrete);
> + g_free(path);
> +
> + path = g_strdup_printf("device/introspect/concrete/nodefaults/%s",
> mname);
> + args = g_strdup_printf("-nodefaults -M %s", mname);
> + qtest_add_data_func(path, args, test_device_intro_concrete);
> + g_free(path);
> +}
If !g_test_quick(), we test each machine type (mentioned in commit
message) with and without -nodefaults (not mentioned). Please explain
that more completely in your commit message.
You allocate @path and @args here, and free @path here, but @args in
test_device_intro_concrete() is slightly awkward. I'd be tempted to try
using fixtures. Not a demand; what you got works.
Hmm, can we pass just @mname to the GTestDataFunc, then allocate and
free @args there? Nope, @mname doesn't stay alive until that function
runs.
> +
> int main(int argc, char **argv)
> {
> g_test_init(&argc, &argv, NULL);
> @@ -283,8 +304,13 @@ int main(int argc, char **argv)
> qtest_add_func("device/introspect/list-fields", test_qom_list_fields);
> qtest_add_func("device/introspect/none", test_device_intro_none);
> qtest_add_func("device/introspect/abstract", test_device_intro_abstract);
> - qtest_add_func("device/introspect/concrete", test_device_intro_concrete);
> qtest_add_func("device/introspect/abstract-interfaces",
> test_abstract_interfaces);
> + if (g_test_quick()) {
> + qtest_add_data_func("device/introspect/concrete/defaults/none",
> + g_strdup(common_args),
> test_device_intro_concrete);
Suggest to break this line at the comma.
> + } else {
> + qtest_cb_for_every_machine(add_machine_test_case);
> + }
>
> return g_test_run();
> }
With at least the commit message improved:
Reviewed-by: Markus Armbruster <address@hidden>
- Re: [Qemu-devel] [PATCH 5/6] net: Silence 'has no peer' messages in testing mode, (continued)
- Re: [Qemu-devel] [PATCH 5/6] net: Silence 'has no peer' messages in testing mode, Paolo Bonzini, 2018/08/14
- Re: [Qemu-devel] [PATCH 5/6] net: Silence 'has no peer' messages in testing mode, Thomas Huth, 2018/08/14
- Re: [Qemu-devel] [PATCH 5/6] net: Silence 'has no peer' messages in testing mode, Paolo Bonzini, 2018/08/14
- Re: [Qemu-devel] [PATCH 5/6] net: Silence 'has no peer' messages in testing mode, Thomas Huth, 2018/08/14
- Re: [Qemu-devel] [PATCH 5/6] net: Silence 'has no peer' messages in testing mode, Paolo Bonzini, 2018/08/14
- Re: [Qemu-devel] [PATCH 5/6] net: Silence 'has no peer' messages in testing mode, Thomas Huth, 2018/08/15
- Re: [Qemu-devel] [PATCH 5/6] net: Silence 'has no peer' messages in testing mode, Thomas Huth, 2018/08/16
[Qemu-devel] [PATCH 6/6] tests/device-introspect: Test with all machines, not only with "none", Thomas Huth, 2018/08/14