diff mbox

[v2,8/8] qtest: Add boot order test

Message ID 1361553601-23273-9-git-send-email-armbru@redhat.com
State New
Headers show

Commit Message

Markus Armbruster Feb. 22, 2013, 5:20 p.m. UTC
Covers only PC so far.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 tests/Makefile          |  2 ++
 tests/boot-order-test.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 73 insertions(+)
 create mode 100644 tests/boot-order-test.c

Comments

Andreas Färber Feb. 22, 2013, 5:31 p.m. UTC | #1
Am 22.02.2013 18:20, schrieb Markus Armbruster:
> Covers only PC so far.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

Reviewed-by: Andreas Färber <afaerber@suse.de>

> +static void test_cmos_byte(int reg, int expected)
> +{
> +    int actual;
> +
> +    outb(0x70 + 0, reg);
> +    actual = inb(0x71);

Did you intend to use 0x70 + 1 here or why the 0x70 + 0 above?

> +    g_assert_cmphex(actual, ==, expected);
> +}

> +int main(int argc, char *argv[])
> +{
> +    g_test_init(&argc, &argv, NULL);
> +
> +    qtest_add_func("boot-order/pc", test_pc_boot_order);
> +
> +    return g_test_run();
> +}

So this is suggesting to me to add separate test functions per arch.
Fine with me, we'll only have to reindent one line then.

Thanks for the changes,

Andreas
Markus Armbruster Feb. 22, 2013, 6:09 p.m. UTC | #2
Andreas Färber <afaerber@suse.de> writes:

> Am 22.02.2013 18:20, schrieb Markus Armbruster:
>> Covers only PC so far.
>> 
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>
> Reviewed-by: Andreas Färber <afaerber@suse.de>
>
>> +static void test_cmos_byte(int reg, int expected)
>> +{
>> +    int actual;
>> +
>> +    outb(0x70 + 0, reg);
>> +    actual = inb(0x71);
>
> Did you intend to use 0x70 + 1 here or why the 0x70 + 0 above?

Looks like a pasto to me.  Let's drop the stupid '+ 0'.

>> +    g_assert_cmphex(actual, ==, expected);
>> +}
>
>> +int main(int argc, char *argv[])
>> +{
>> +    g_test_init(&argc, &argv, NULL);
>> +
>> +    qtest_add_func("boot-order/pc", test_pc_boot_order);
>> +
>> +    return g_test_run();
>> +}
>
> So this is suggesting to me to add separate test functions per arch.
> Fine with me, we'll only have to reindent one line then.
>
> Thanks for the changes,

Hard to predict for me how the tests for other archs will look, and what
could be shared.  Add them and see :)
Andreas Färber Feb. 24, 2013, 8:54 a.m. UTC | #3
Am 22.02.2013 18:20, schrieb Markus Armbruster:
> diff --git a/tests/boot-order-test.c b/tests/boot-order-test.c
> new file mode 100644
> index 0000000..60412ad
> --- /dev/null
> +++ b/tests/boot-order-test.c
[...]
> +static void test_pc_with_args(const char *args, uint8_t boot1, uint8_t boot2,
> +                              uint8_t reboot1, uint8_t reboot2)
> +{
> +    char *extra_args = g_strdup_printf("-nodefaults -display none -S %s",
> +                                       args);

Why do you add -S here? qtest is an accel mode of its own and should
never execute anything.

Also in my code I found it more logical to add extra args to args rather
than the reverse, not just because of 80 chars limit when trying to add
-machine argument. ;)

I assume q35 is reusing pc code? Or should it be tested as well?
(Having any of our qtests cover it would be nice.)

> +    qtest_start(extra_args);
> +    test_cmos(boot1, boot2);

> +    qtest_qmp(global_qtest, "{ 'execute': 'system_reset' }");

qmp()?

> +    test_cmos(reboot1, reboot2);
> +    qtest_quit(global_qtest);
> +    g_free(extra_args);
> +}
[snip]

Andreas
Markus Armbruster Feb. 25, 2013, 8:09 a.m. UTC | #4
Andreas Färber <afaerber@suse.de> writes:

> Am 22.02.2013 18:20, schrieb Markus Armbruster:
>> diff --git a/tests/boot-order-test.c b/tests/boot-order-test.c
>> new file mode 100644
>> index 0000000..60412ad
>> --- /dev/null
>> +++ b/tests/boot-order-test.c
> [...]
>> +static void test_pc_with_args(const char *args, uint8_t boot1, uint8_t boot2,
>> +                              uint8_t reboot1, uint8_t reboot2)
>> +{
>> +    char *extra_args = g_strdup_printf("-nodefaults -display none -S %s",
>> +                                       args);
>
> Why do you add -S here? qtest is an accel mode of its own and should
> never execute anything.

Brain fart, dropping.

> Also in my code I found it more logical to add extra args to args rather
> than the reverse, not just because of 80 chars limit when trying to add
> -machine argument. ;)

Point taken :)

> I assume q35 is reusing pc code? Or should it be tested as well?
> (Having any of our qtests cover it would be nice.)

They share the RTC CMOS setup.

>> +    qtest_start(extra_args);
>> +    test_cmos(boot1, boot2);
>
>> +    qtest_qmp(global_qtest, "{ 'execute': 'system_reset' }");
>
> qmp()?

Yes.

>> +    test_cmos(reboot1, reboot2);
>> +    qtest_quit(global_qtest);
>> +    g_free(extra_args);
>> +}
> [snip]

Thanks!
diff mbox

Patch

diff --git a/tests/Makefile b/tests/Makefile
index 567e36e..1305642 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -65,6 +65,7 @@  check-qtest-i386-y = tests/fdc-test$(EXESUF)
 gcov-files-i386-y = hw/fdc.c
 check-qtest-i386-y += tests/hd-geo-test$(EXESUF)
 gcov-files-i386-y += hw/hd-geometry.c
+check-qtest-i386-y += tests/boot-order-test$(EXESUF)
 check-qtest-i386-y += tests/rtc-test$(EXESUF)
 check-qtest-x86_64-y = $(check-qtest-i386-y)
 gcov-files-i386-y += i386-softmmu/hw/mc146818rtc.c
@@ -132,6 +133,7 @@  tests/rtc-test$(EXESUF): tests/rtc-test.o
 tests/m48t59-test$(EXESUF): tests/m48t59-test.o
 tests/fdc-test$(EXESUF): tests/fdc-test.o
 tests/hd-geo-test$(EXESUF): tests/hd-geo-test.o
+tests/boot-order-test$(EXESUF): tests/boot-order-test.o
 tests/tmp105-test$(EXESUF): tests/tmp105-test.o
 
 # QTest rules
diff --git a/tests/boot-order-test.c b/tests/boot-order-test.c
new file mode 100644
index 0000000..60412ad
--- /dev/null
+++ b/tests/boot-order-test.c
@@ -0,0 +1,71 @@ 
+/*
+ * Boot order test cases.
+ *
+ * Copyright (c) 2013 Red Hat Inc.
+ *
+ * Authors:
+ *  Markus Armbruster <armbru@redhat.com>,
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+/*
+ * Covers only PC.  Better than nothing.  Improvements welcome.
+ */
+
+#include <glib.h>
+#include "libqtest.h"
+
+static void test_cmos_byte(int reg, int expected)
+{
+    int actual;
+
+    outb(0x70 + 0, reg);
+    actual = inb(0x71);
+    g_assert_cmphex(actual, ==, expected);
+}
+
+static void test_cmos(uint8_t boot1, uint8_t boot2)
+{
+    test_cmos_byte(0x38, boot1);
+    test_cmos_byte(0x3d, boot2);
+}
+
+static void test_pc_with_args(const char *args, uint8_t boot1, uint8_t boot2,
+                              uint8_t reboot1, uint8_t reboot2)
+{
+    char *extra_args = g_strdup_printf("-nodefaults -display none -S %s",
+                                       args);
+    qtest_start(extra_args);
+    test_cmos(boot1, boot2);
+    qtest_qmp(global_qtest, "{ 'execute': 'system_reset' }");
+    test_cmos(reboot1, reboot2);
+    qtest_quit(global_qtest);
+    g_free(extra_args);
+}
+
+static void test_pc_boot_order(void)
+{
+    test_pc_with_args("", 0x30, 0x12, 0x30, 0x12);
+    test_pc_with_args("-no-fd-bootchk", 0x31, 0x12, 0x31, 0x12);
+    test_pc_with_args("-boot c", 0, 0x02, 0, 0x02);
+    test_pc_with_args("-boot nda", 0x10, 0x34, 0x10, 0x34);
+    test_pc_with_args("-boot order=", 0, 0, 0, 0);
+    test_pc_with_args("-boot order= -boot order=c", 0, 0x02, 0, 0x02);
+    test_pc_with_args("-boot once=a", 0, 0x01, 0x30, 0x12);
+    test_pc_with_args("-boot once=a -no-fd-bootchk", 0x01, 0x01, 0x31, 0x12);
+    test_pc_with_args("-boot once=a,order=c", 0, 0x01, 0, 0x02);
+    test_pc_with_args("-boot once=d -boot order=nda", 0, 0x03, 0x10, 0x34);
+    test_pc_with_args("-boot once=a -boot once=b -boot once=c",
+                      0, 0x02, 0x30, 0x12);
+}
+
+int main(int argc, char *argv[])
+{
+    g_test_init(&argc, &argv, NULL);
+
+    qtest_add_func("boot-order/pc", test_pc_boot_order);
+
+    return g_test_run();
+}