* [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2)
@ 2022-02-03 14:15 Laurent Vivier
2022-02-03 14:15 ` [PATCH 1/7] tests/qtest: failover: clean up pathname of tests Laurent Vivier
` (7 more replies)
0 siblings, 8 replies; 10+ messages in thread
From: Laurent Vivier @ 2022-02-03 14:15 UTC (permalink / raw)
To: qemu-devel; +Cc: Laurent Vivier, Paolo Bonzini, Thomas Huth
This series adds more qtest test cases to test virtio-net failover feature.
New tests are focused on the behavior when the feature is not available.
Laurent Vivier (7):
tests/qtest: failover: clean up pathname of tests
tests/qtest: failover: use a macro for check_one_card()
tests/qtest: failover: check the feature is correctly provided
tests/qtest: failover: check missing guest feature
tests/qtest: failover: check migration with failover off
tests/qtest: failover: test migration if the guest doesn't support
failover
tests/qtest: failover: migration abort test with failover off
tests/qtest/virtio-net-failover.c | 911 +++++++++++++++++++++++-------
1 file changed, 716 insertions(+), 195 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/7] tests/qtest: failover: clean up pathname of tests
2022-02-03 14:15 [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
@ 2022-02-03 14:15 ` Laurent Vivier
2022-02-03 14:15 ` [PATCH 2/7] tests/qtest: failover: use a macro for check_one_card() Laurent Vivier
` (6 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Laurent Vivier @ 2022-02-03 14:15 UTC (permalink / raw)
To: qemu-devel; +Cc: Laurent Vivier, Paolo Bonzini, Thomas Huth
clearly indentify parameters, hotplug and migration tests
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
tests/qtest/virtio-net-failover.c | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/tests/qtest/virtio-net-failover.c b/tests/qtest/virtio-net-failover.c
index 22ad54bb9594..207c1330125b 100644
--- a/tests/qtest/virtio-net-failover.c
+++ b/tests/qtest/virtio-net-failover.c
@@ -1315,6 +1315,7 @@ int main(int argc, char **argv)
g_assert_true(ret >= 0);
close(ret);
+ /* parameters tests */
qtest_add_func("failover-virtio-net/params/error/id", test_error_id);
qtest_add_func("failover-virtio-net/params/error/pcie", test_error_pcie);
qtest_add_func("failover-virtio-net/params/on", test_on);
@@ -1322,15 +1323,19 @@ int main(int argc, char **argv)
test_on_mismatch);
qtest_add_func("failover-virtio-net/params/off", test_off);
qtest_add_func("failover-virtio-net/params/enabled", test_enabled);
- qtest_add_func("failover-virtio-net/hotplug_1", test_hotplug_1);
- qtest_add_func("failover-virtio-net/hotplug_1_reverse",
+
+ /* hotplug tests */
+ qtest_add_func("failover-virtio-net/hotplug/1", test_hotplug_1);
+ qtest_add_func("failover-virtio-net/hotplug/1_reverse",
test_hotplug_1_reverse);
- qtest_add_func("failover-virtio-net/hotplug_2", test_hotplug_2);
- qtest_add_func("failover-virtio-net/hotplug_2_reverse",
+ qtest_add_func("failover-virtio-net/hotplug/2", test_hotplug_2);
+ qtest_add_func("failover-virtio-net/hotplug/2_reverse",
test_hotplug_2_reverse);
- qtest_add_data_func("failover-virtio-net/migrate/out", tmpfile,
+
+ /* migration tests */
+ qtest_add_data_func("failover-virtio-net/migrate/on/out", tmpfile,
test_migrate_out);
- qtest_add_data_func("failover-virtio-net/migrate/in", tmpfile,
+ qtest_add_data_func("failover-virtio-net/migrate/on/in", tmpfile,
test_migrate_in);
qtest_add_data_func("failover-virtio-net/migrate/abort/wait-unplug",
tmpfile, test_migrate_abort_wait_unplug);
@@ -1340,9 +1345,9 @@ int main(int argc, char **argv)
qtest_add_data_func("failover-virtio-net/migrate/abort/timeout",
tmpfile, test_migrate_abort_timeout);
}
- qtest_add_data_func("failover-virtio-net/multi/out",
+ qtest_add_data_func("failover-virtio-net/migrate/multi/out",
tmpfile, test_multi_out);
- qtest_add_data_func("failover-virtio-net/multi/in",
+ qtest_add_data_func("failover-virtio-net/migrate/multi/in",
tmpfile, test_multi_in);
ret = g_test_run();
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/7] tests/qtest: failover: use a macro for check_one_card()
2022-02-03 14:15 [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
2022-02-03 14:15 ` [PATCH 1/7] tests/qtest: failover: clean up pathname of tests Laurent Vivier
@ 2022-02-03 14:15 ` Laurent Vivier
2022-02-03 14:15 ` [PATCH 3/7] tests/qtest: failover: check the feature is correctly provided Laurent Vivier
` (5 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Laurent Vivier @ 2022-02-03 14:15 UTC (permalink / raw)
To: qemu-devel; +Cc: Laurent Vivier, Paolo Bonzini, Thomas Huth
This allows g_assert() to correctly report the line number of the error
in the test case.
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
tests/qtest/virtio-net-failover.c | 47 ++++++++++++++-----------------
1 file changed, 21 insertions(+), 26 deletions(-)
diff --git a/tests/qtest/virtio-net-failover.c b/tests/qtest/virtio-net-failover.c
index 207c1330125b..070e53de1292 100644
--- a/tests/qtest/virtio-net-failover.c
+++ b/tests/qtest/virtio-net-failover.c
@@ -224,32 +224,27 @@ static char *get_mac(QTestState *qts, const char *name)
return mac;
}
-static void check_one_card(QTestState *qts, bool present,
- const char *id, const char *mac)
-{
- QDict *device;
- QDict *bus;
- char *addr;
-
- bus = get_bus(qts, 0);
- device = find_device(bus, id);
- if (present) {
- char *path;
-
- g_assert_nonnull(device);
- qobject_unref(device);
-
- path = g_strdup_printf("/machine/peripheral/%s", id);
- addr = get_mac(qts, path);
- g_free(path);
- g_assert_cmpstr(mac, ==, addr);
- g_free(addr);
- } else {
- g_assert_null(device);
- }
-
- qobject_unref(bus);
-}
+#define check_one_card(qts, present, id, mac) \
+do { \
+ QDict *device; \
+ QDict *bus; \
+ char *addr; \
+ bus = get_bus(qts, 0); \
+ device = find_device(bus, id); \
+ if (present) { \
+ char *path; \
+ g_assert_nonnull(device); \
+ qobject_unref(device); \
+ path = g_strdup_printf("/machine/peripheral/%s", id); \
+ addr = get_mac(qts, path); \
+ g_free(path); \
+ g_assert_cmpstr(mac, ==, addr); \
+ g_free(addr); \
+ } else { \
+ g_assert_null(device); \
+ } \
+ qobject_unref(bus); \
+} while (0)
static void test_on(void)
{
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/7] tests/qtest: failover: check the feature is correctly provided
2022-02-03 14:15 [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
2022-02-03 14:15 ` [PATCH 1/7] tests/qtest: failover: clean up pathname of tests Laurent Vivier
2022-02-03 14:15 ` [PATCH 2/7] tests/qtest: failover: use a macro for check_one_card() Laurent Vivier
@ 2022-02-03 14:15 ` Laurent Vivier
2022-02-03 14:15 ` [PATCH 4/7] tests/qtest: failover: check missing guest feature Laurent Vivier
` (4 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Laurent Vivier @ 2022-02-03 14:15 UTC (permalink / raw)
To: qemu-devel; +Cc: Laurent Vivier, Paolo Bonzini, Thomas Huth
Check QEMU provides the VIRTIO_NET_F_STANDBY if failover is on,
and doesn't if failover is off
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
tests/qtest/virtio-net-failover.c | 139 ++++++++++++++++++------------
1 file changed, 86 insertions(+), 53 deletions(-)
diff --git a/tests/qtest/virtio-net-failover.c b/tests/qtest/virtio-net-failover.c
index 070e53de1292..42367963685c 100644
--- a/tests/qtest/virtio-net-failover.c
+++ b/tests/qtest/virtio-net-failover.c
@@ -18,6 +18,8 @@
#include "libqos/virtio-pci.h"
#include "hw/pci/pci.h"
+#define VIRTIO_NET_F_STANDBY 62
+
#define ACPI_PCIHP_ADDR_ICH9 0x0cc0
#define PCI_EJ_BASE 0x0008
#define PCI_SEL_BASE 0x0010
@@ -246,6 +248,65 @@ do { \
qobject_unref(bus); \
} while (0)
+static QDict *get_failover_negociated_event(QTestState *qts)
+{
+ QDict *resp;
+ QDict *data;
+
+ resp = qtest_qmp_eventwait_ref(qts, "FAILOVER_NEGOTIATED");
+ g_assert(qdict_haskey(resp, "data"));
+
+ data = qdict_get_qdict(resp, "data");
+ g_assert(qdict_haskey(data, "device-id"));
+ qobject_ref(data);
+ qobject_unref(resp);
+
+ return data;
+}
+
+static QVirtioPCIDevice *start_virtio_net_internal(QTestState *qts,
+ int bus, int slot,
+ uint64_t *features)
+{
+ QVirtioPCIDevice *dev;
+ QPCIAddress addr;
+
+ addr.devfn = QPCI_DEVFN((bus << 5) + slot, 0);
+ dev = virtio_pci_new(pcibus, &addr);
+ g_assert_nonnull(dev);
+ qvirtio_pci_device_enable(dev);
+ qvirtio_start_device(&dev->vdev);
+ *features &= qvirtio_get_features(&dev->vdev);
+ qvirtio_set_features(&dev->vdev, *features);
+ qvirtio_set_driver_ok(&dev->vdev);
+ return dev;
+}
+
+static QVirtioPCIDevice *start_virtio_net(QTestState *qts, int bus, int slot,
+ const char *id, bool failover)
+{
+ QVirtioPCIDevice *dev;
+ uint64_t features;
+
+ features = ~(QVIRTIO_F_BAD_FEATURE |
+ (1ull << VIRTIO_RING_F_INDIRECT_DESC) |
+ (1ull << VIRTIO_RING_F_EVENT_IDX));
+
+ dev = start_virtio_net_internal(qts, bus, slot, &features);
+
+ g_assert(!!(features & (1ull << VIRTIO_NET_F_STANDBY)) == failover);
+
+ if (failover) {
+ QDict *resp;
+
+ resp = get_failover_negociated_event(qts);
+ g_assert_cmpstr(qdict_get_str(resp, "device-id"), ==, id);
+ qobject_unref(resp);
+ }
+
+ return dev;
+}
+
static void test_on(void)
{
QTestState *qts;
@@ -254,6 +315,7 @@ static void test_on(void)
"-netdev user,id=hs0 "
"-device virtio-net,bus=root0,id=standby0,"
"failover=on,netdev=hs0,mac="MAC_STANDBY0" "
+ "-netdev user,id=hs1 "
"-device virtio-net,bus=root1,id=primary0,"
"failover_pair_id=standby0,netdev=hs1,mac="MAC_PRIMARY0,
2);
@@ -267,6 +329,7 @@ static void test_on(void)
static void test_on_mismatch(void)
{
QTestState *qts;
+ QVirtioPCIDevice *vdev;
qts = machine_start(BASE_MACHINE
"-netdev user,id=hs0 "
@@ -280,12 +343,19 @@ static void test_on_mismatch(void)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
+ vdev = start_virtio_net(qts, 1, 0, "standby0", true);
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, true, "primary0", MAC_PRIMARY0);
+
+ qos_object_destroy((QOSGraphObject *)vdev);
machine_stop(qts);
}
static void test_off(void)
{
QTestState *qts;
+ QVirtioPCIDevice *vdev;
qts = machine_start(BASE_MACHINE
"-netdev user,id=hs0 "
@@ -299,50 +369,13 @@ static void test_off(void)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
- machine_stop(qts);
-}
+ vdev = start_virtio_net(qts, 1, 0, "standby0", false);
-static QDict *get_failover_negociated_event(QTestState *qts)
-{
- QDict *resp;
- QDict *data;
-
- resp = qtest_qmp_eventwait_ref(qts, "FAILOVER_NEGOTIATED");
- g_assert(qdict_haskey(resp, "data"));
-
- data = qdict_get_qdict(resp, "data");
- g_assert(qdict_haskey(data, "device-id"));
- qobject_ref(data);
- qobject_unref(resp);
-
- return data;
-}
-
-static QVirtioPCIDevice *start_virtio_net(QTestState *qts, int bus, int slot,
- const char *id)
-{
- QVirtioPCIDevice *dev;
- uint64_t features;
- QPCIAddress addr;
- QDict *resp;
-
- addr.devfn = QPCI_DEVFN((bus << 5) + slot, 0);
- dev = virtio_pci_new(pcibus, &addr);
- g_assert_nonnull(dev);
- qvirtio_pci_device_enable(dev);
- qvirtio_start_device(&dev->vdev);
- features = qvirtio_get_features(&dev->vdev);
- features = features & ~(QVIRTIO_F_BAD_FEATURE |
- (1ull << VIRTIO_RING_F_INDIRECT_DESC) |
- (1ull << VIRTIO_RING_F_EVENT_IDX));
- qvirtio_set_features(&dev->vdev, features);
- qvirtio_set_driver_ok(&dev->vdev);
-
- resp = get_failover_negociated_event(qts);
- g_assert_cmpstr(qdict_get_str(resp, "device-id"), ==, id);
- qobject_unref(resp);
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, true, "primary0", MAC_PRIMARY0);
- return dev;
+ qos_object_destroy((QOSGraphObject *)vdev);
+ machine_stop(qts);
}
static void test_enabled(void)
@@ -362,7 +395,7 @@ static void test_enabled(void)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
- vdev = start_virtio_net(qts, 1, 0, "standby0");
+ vdev = start_virtio_net(qts, 1, 0, "standby0", true);
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
@@ -385,7 +418,7 @@ static void test_hotplug_1(void)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
- vdev = start_virtio_net(qts, 1, 0, "standby0");
+ vdev = start_virtio_net(qts, 1, 0, "standby0", true);
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
@@ -427,7 +460,7 @@ static void test_hotplug_1_reverse(void)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
- vdev = start_virtio_net(qts, 1, 0, "standby0");
+ vdev = start_virtio_net(qts, 1, 0, "standby0", true);
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
@@ -458,7 +491,7 @@ static void test_hotplug_2(void)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
- vdev = start_virtio_net(qts, 1, 0, "standby0");
+ vdev = start_virtio_net(qts, 1, 0, "standby0", true);
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
@@ -514,7 +547,7 @@ static void test_hotplug_2_reverse(void)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
- vdev = start_virtio_net(qts, 1, 0, "standby0");
+ vdev = start_virtio_net(qts, 1, 0, "standby0", true);
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
@@ -579,7 +612,7 @@ static void test_migrate_out(gconstpointer opaque)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
- vdev = start_virtio_net(qts, 1, 0, "standby0");
+ vdev = start_virtio_net(qts, 1, 0, "standby0", true);
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
@@ -775,7 +808,7 @@ static void test_migrate_abort_wait_unplug(gconstpointer opaque)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
- vdev = start_virtio_net(qts, 1, 0, "standby0");
+ vdev = start_virtio_net(qts, 1, 0, "standby0", true);
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
@@ -865,7 +898,7 @@ static void test_migrate_abort_active(gconstpointer opaque)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
- vdev = start_virtio_net(qts, 1, 0, "standby0");
+ vdev = start_virtio_net(qts, 1, 0, "standby0", true);
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
@@ -959,7 +992,7 @@ static void test_migrate_abort_timeout(gconstpointer opaque)
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
- vdev = start_virtio_net(qts, 1, 0, "standby0");
+ vdev = start_virtio_net(qts, 1, 0, "standby0", true);
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, false, "primary0", MAC_PRIMARY0);
@@ -1070,7 +1103,7 @@ static void test_multi_out(gconstpointer opaque)
check_one_card(qts, false, "standby1", MAC_STANDBY1);
check_one_card(qts, false, "primary1", MAC_PRIMARY1);
- vdev0 = start_virtio_net(qts, 1, 0, "standby0");
+ vdev0 = start_virtio_net(qts, 1, 0, "standby0", true);
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
@@ -1101,7 +1134,7 @@ static void test_multi_out(gconstpointer opaque)
check_one_card(qts, true, "standby1", MAC_STANDBY1);
check_one_card(qts, false, "primary1", MAC_PRIMARY1);
- vdev1 = start_virtio_net(qts, 3, 0, "standby1");
+ vdev1 = start_virtio_net(qts, 3, 0, "standby1", true);
check_one_card(qts, true, "standby0", MAC_STANDBY0);
check_one_card(qts, true, "primary0", MAC_PRIMARY0);
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/7] tests/qtest: failover: check missing guest feature
2022-02-03 14:15 [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
` (2 preceding siblings ...)
2022-02-03 14:15 ` [PATCH 3/7] tests/qtest: failover: check the feature is correctly provided Laurent Vivier
@ 2022-02-03 14:15 ` Laurent Vivier
2022-02-03 14:15 ` [PATCH 5/7] tests/qtest: failover: check migration with failover off Laurent Vivier
` (3 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Laurent Vivier @ 2022-02-03 14:15 UTC (permalink / raw)
To: qemu-devel; +Cc: Laurent Vivier, Paolo Bonzini, Thomas Huth
If QEMU provides the VIRTIO_NET_F_STANDBY feature but the guest doesn't
the primary device must be kept hidden
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
tests/qtest/virtio-net-failover.c | 33 +++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/tests/qtest/virtio-net-failover.c b/tests/qtest/virtio-net-failover.c
index 42367963685c..cbd8585fa853 100644
--- a/tests/qtest/virtio-net-failover.c
+++ b/tests/qtest/virtio-net-failover.c
@@ -404,6 +404,38 @@ static void test_enabled(void)
machine_stop(qts);
}
+static void test_guest_off(void)
+{
+ QTestState *qts;
+ QVirtioPCIDevice *vdev;
+ uint64_t features;
+
+ qts = machine_start(BASE_MACHINE
+ "-netdev user,id=hs0 "
+ "-device virtio-net,bus=root0,id=standby0,"
+ "failover=on,netdev=hs0,mac="MAC_STANDBY0" "
+ "-netdev user,id=hs1 "
+ "-device virtio-net,bus=root1,id=primary0,"
+ "failover_pair_id=standby0,netdev=hs1,mac="MAC_PRIMARY0" ",
+ 2);
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ features = ~(QVIRTIO_F_BAD_FEATURE |
+ (1ull << VIRTIO_RING_F_INDIRECT_DESC) |
+ (1ull << VIRTIO_RING_F_EVENT_IDX) |
+ (1ull << VIRTIO_NET_F_STANDBY));
+
+ vdev = start_virtio_net_internal(qts, 1, 0, &features);
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qos_object_destroy((QOSGraphObject *)vdev);
+ machine_stop(qts);
+}
+
static void test_hotplug_1(void)
{
QTestState *qts;
@@ -1351,6 +1383,7 @@ int main(int argc, char **argv)
test_on_mismatch);
qtest_add_func("failover-virtio-net/params/off", test_off);
qtest_add_func("failover-virtio-net/params/enabled", test_enabled);
+ qtest_add_func("failover-virtio-net/params/guest_off", test_guest_off);
/* hotplug tests */
qtest_add_func("failover-virtio-net/hotplug/1", test_hotplug_1);
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 5/7] tests/qtest: failover: check migration with failover off
2022-02-03 14:15 [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
` (3 preceding siblings ...)
2022-02-03 14:15 ` [PATCH 4/7] tests/qtest: failover: check missing guest feature Laurent Vivier
@ 2022-02-03 14:15 ` Laurent Vivier
2022-02-03 14:15 ` [PATCH 6/7] tests/qtest: failover: test migration if the guest doesn't support failover Laurent Vivier
` (2 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Laurent Vivier @ 2022-02-03 14:15 UTC (permalink / raw)
To: qemu-devel; +Cc: Laurent Vivier, Paolo Bonzini, Thomas Huth
If failover is off, the primary device is not plugged and
the migration is done only with the standby device.
On destination, the primary device must not be plugged.
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
tests/qtest/virtio-net-failover.c | 133 ++++++++++++++++++++++++++++++
1 file changed, 133 insertions(+)
diff --git a/tests/qtest/virtio-net-failover.c b/tests/qtest/virtio-net-failover.c
index cbd8585fa853..c99599bdcc2a 100644
--- a/tests/qtest/virtio-net-failover.c
+++ b/tests/qtest/virtio-net-failover.c
@@ -815,6 +815,135 @@ static void test_migrate_in(gconstpointer opaque)
machine_stop(qts);
}
+static void test_off_migrate_out(gconstpointer opaque)
+{
+ QTestState *qts;
+ QDict *resp, *args, *ret;
+ g_autofree gchar *uri = g_strdup_printf("exec: cat > %s", (gchar *)opaque);
+ const gchar *status;
+ QVirtioPCIDevice *vdev;
+
+ qts = machine_start(BASE_MACHINE
+ "-netdev user,id=hs0 "
+ "-netdev user,id=hs1 ",
+ 2);
+
+ check_one_card(qts, false, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_device_add(qts, "virtio-net", "standby0",
+ "{'bus': 'root0',"
+ "'failover': 'off',"
+ "'netdev': 'hs0',"
+ "'mac': '"MAC_STANDBY0"'}");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_device_add(qts, "virtio-net", "primary0",
+ "{'bus': 'root1',"
+ "'failover_pair_id': 'standby0',"
+ "'netdev': 'hs1',"
+ "'rombar': 0,"
+ "'romfile': '',"
+ "'mac': '"MAC_PRIMARY0"'}");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, true, "primary0", MAC_PRIMARY0);
+
+ vdev = start_virtio_net(qts, 1, 0, "standby0", false);
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, true, "primary0", MAC_PRIMARY0);
+
+ args = qdict_from_jsonf_nofail("{}");
+ g_assert_nonnull(args);
+ qdict_put_str(args, "uri", uri);
+
+ resp = qtest_qmp(qts, "{ 'execute': 'migrate', 'arguments': %p}", args);
+ g_assert(qdict_haskey(resp, "return"));
+ qobject_unref(resp);
+
+ while (true) {
+ ret = migrate_status(qts);
+
+ status = qdict_get_str(ret, "status");
+ if (strcmp(status, "completed") == 0) {
+ qobject_unref(ret);
+ break;
+ }
+ g_assert_cmpstr(status, !=, "failed");
+ g_assert_cmpstr(status, !=, "cancelling");
+ g_assert_cmpstr(status, !=, "cancelled");
+ qobject_unref(ret);
+ }
+
+ qtest_qmp_eventwait(qts, "STOP");
+
+ qos_object_destroy((QOSGraphObject *)vdev);
+ machine_stop(qts);
+}
+
+static void test_off_migrate_in(gconstpointer opaque)
+{
+ QTestState *qts;
+ QDict *resp, *args, *ret;
+ g_autofree gchar *uri = g_strdup_printf("exec: cat %s", (gchar *)opaque);
+
+ qts = machine_start(BASE_MACHINE
+ "-netdev user,id=hs0 "
+ "-netdev user,id=hs1 "
+ "-incoming defer ",
+ 2);
+
+ check_one_card(qts, false, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_device_add(qts, "virtio-net", "standby0",
+ "{'bus': 'root0',"
+ "'failover': 'off',"
+ "'netdev': 'hs0',"
+ "'mac': '"MAC_STANDBY0"'}");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_device_add(qts, "virtio-net", "primary0",
+ "{'bus': 'root1',"
+ "'failover_pair_id': 'standby0',"
+ "'netdev': 'hs1',"
+ "'rombar': 0,"
+ "'romfile': '',"
+ "'mac': '"MAC_PRIMARY0"'}");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, true, "primary0", MAC_PRIMARY0);
+
+ args = qdict_from_jsonf_nofail("{}");
+ g_assert_nonnull(args);
+ qdict_put_str(args, "uri", uri);
+
+ resp = qtest_qmp(qts, "{ 'execute': 'migrate-incoming', 'arguments': %p}",
+ args);
+ g_assert(qdict_haskey(resp, "return"));
+ qobject_unref(resp);
+
+ resp = get_migration_event(qts);
+ g_assert_cmpstr(qdict_get_str(resp, "status"), ==, "setup");
+ qobject_unref(resp);
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, true, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_eventwait(qts, "RESUME");
+
+ ret = migrate_status(qts);
+ g_assert_cmpstr(qdict_get_str(ret, "status"), ==, "completed");
+ qobject_unref(ret);
+
+ machine_stop(qts);
+}
+
static void test_migrate_abort_wait_unplug(gconstpointer opaque)
{
QTestState *qts;
@@ -1398,6 +1527,10 @@ int main(int argc, char **argv)
test_migrate_out);
qtest_add_data_func("failover-virtio-net/migrate/on/in", tmpfile,
test_migrate_in);
+ qtest_add_data_func("failover-virtio-net/migrate/off/out", tmpfile,
+ test_off_migrate_out);
+ qtest_add_data_func("failover-virtio-net/migrate/off/in", tmpfile,
+ test_off_migrate_in);
qtest_add_data_func("failover-virtio-net/migrate/abort/wait-unplug",
tmpfile, test_migrate_abort_wait_unplug);
qtest_add_data_func("failover-virtio-net/migrate/abort/active", tmpfile,
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 6/7] tests/qtest: failover: test migration if the guest doesn't support failover
2022-02-03 14:15 [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
` (4 preceding siblings ...)
2022-02-03 14:15 ` [PATCH 5/7] tests/qtest: failover: check migration with failover off Laurent Vivier
@ 2022-02-03 14:15 ` Laurent Vivier
2022-02-03 14:15 ` [PATCH 7/7] tests/qtest: failover: migration abort test with failover off Laurent Vivier
2022-02-15 9:20 ` [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
7 siblings, 0 replies; 10+ messages in thread
From: Laurent Vivier @ 2022-02-03 14:15 UTC (permalink / raw)
To: qemu-devel; +Cc: Laurent Vivier, Paolo Bonzini, Thomas Huth
The primary device is not plugged and the migration is done only with
the standby device
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
tests/qtest/virtio-net-failover.c | 142 ++++++++++++++++++++++++++++++
1 file changed, 142 insertions(+)
diff --git a/tests/qtest/virtio-net-failover.c b/tests/qtest/virtio-net-failover.c
index c99599bdcc2a..54a0a0324192 100644
--- a/tests/qtest/virtio-net-failover.c
+++ b/tests/qtest/virtio-net-failover.c
@@ -944,6 +944,144 @@ static void test_off_migrate_in(gconstpointer opaque)
machine_stop(qts);
}
+static void test_guest_off_migrate_out(gconstpointer opaque)
+{
+ QTestState *qts;
+ QDict *resp, *args, *ret;
+ g_autofree gchar *uri = g_strdup_printf("exec: cat > %s", (gchar *)opaque);
+ const gchar *status;
+ QVirtioPCIDevice *vdev;
+ uint64_t features;
+
+ qts = machine_start(BASE_MACHINE
+ "-netdev user,id=hs0 "
+ "-netdev user,id=hs1 ",
+ 2);
+
+ check_one_card(qts, false, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_device_add(qts, "virtio-net", "standby0",
+ "{'bus': 'root0',"
+ "'failover': 'on',"
+ "'netdev': 'hs0',"
+ "'mac': '"MAC_STANDBY0"'}");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_device_add(qts, "virtio-net", "primary0",
+ "{'bus': 'root1',"
+ "'failover_pair_id': 'standby0',"
+ "'netdev': 'hs1',"
+ "'rombar': 0,"
+ "'romfile': '',"
+ "'mac': '"MAC_PRIMARY0"'}");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ features = ~(QVIRTIO_F_BAD_FEATURE |
+ (1ull << VIRTIO_RING_F_INDIRECT_DESC) |
+ (1ull << VIRTIO_RING_F_EVENT_IDX) |
+ (1ull << VIRTIO_NET_F_STANDBY));
+
+ vdev = start_virtio_net_internal(qts, 1, 0, &features);
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ args = qdict_from_jsonf_nofail("{}");
+ g_assert_nonnull(args);
+ qdict_put_str(args, "uri", uri);
+
+ resp = qtest_qmp(qts, "{ 'execute': 'migrate', 'arguments': %p}", args);
+ g_assert(qdict_haskey(resp, "return"));
+ qobject_unref(resp);
+
+ while (true) {
+ ret = migrate_status(qts);
+
+ status = qdict_get_str(ret, "status");
+ if (strcmp(status, "completed") == 0) {
+ qobject_unref(ret);
+ break;
+ }
+ g_assert_cmpstr(status, !=, "failed");
+ g_assert_cmpstr(status, !=, "cancelling");
+ g_assert_cmpstr(status, !=, "cancelled");
+ qobject_unref(ret);
+ }
+
+ qtest_qmp_eventwait(qts, "STOP");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qos_object_destroy((QOSGraphObject *)vdev);
+ machine_stop(qts);
+}
+
+static void test_guest_off_migrate_in(gconstpointer opaque)
+{
+ QTestState *qts;
+ QDict *resp, *args, *ret;
+ g_autofree gchar *uri = g_strdup_printf("exec: cat %s", (gchar *)opaque);
+
+ qts = machine_start(BASE_MACHINE
+ "-netdev user,id=hs0 "
+ "-netdev user,id=hs1 "
+ "-incoming defer ",
+ 2);
+
+ check_one_card(qts, false, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_device_add(qts, "virtio-net", "standby0",
+ "{'bus': 'root0',"
+ "'failover': 'on',"
+ "'netdev': 'hs0',"
+ "'mac': '"MAC_STANDBY0"'}");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_device_add(qts, "virtio-net", "primary0",
+ "{'bus': 'root1',"
+ "'failover_pair_id': 'standby0',"
+ "'netdev': 'hs1',"
+ "'rombar': 0,"
+ "'romfile': '',"
+ "'mac': '"MAC_PRIMARY0"'}");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ args = qdict_from_jsonf_nofail("{}");
+ g_assert_nonnull(args);
+ qdict_put_str(args, "uri", uri);
+
+ resp = qtest_qmp(qts, "{ 'execute': 'migrate-incoming', 'arguments': %p}",
+ args);
+ g_assert(qdict_haskey(resp, "return"));
+ qobject_unref(resp);
+
+ resp = get_migration_event(qts);
+ g_assert_cmpstr(qdict_get_str(resp, "status"), ==, "setup");
+ qobject_unref(resp);
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_eventwait(qts, "RESUME");
+
+ ret = migrate_status(qts);
+ g_assert_cmpstr(qdict_get_str(ret, "status"), ==, "completed");
+ qobject_unref(ret);
+
+ machine_stop(qts);
+}
+
static void test_migrate_abort_wait_unplug(gconstpointer opaque)
{
QTestState *qts;
@@ -1531,6 +1669,10 @@ int main(int argc, char **argv)
test_off_migrate_out);
qtest_add_data_func("failover-virtio-net/migrate/off/in", tmpfile,
test_off_migrate_in);
+ qtest_add_data_func("failover-virtio-net/migrate/guest_off/out", tmpfile,
+ test_guest_off_migrate_out);
+ qtest_add_data_func("failover-virtio-net/migrate/guest_off/in", tmpfile,
+ test_guest_off_migrate_in);
qtest_add_data_func("failover-virtio-net/migrate/abort/wait-unplug",
tmpfile, test_migrate_abort_wait_unplug);
qtest_add_data_func("failover-virtio-net/migrate/abort/active", tmpfile,
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 7/7] tests/qtest: failover: migration abort test with failover off
2022-02-03 14:15 [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
` (5 preceding siblings ...)
2022-02-03 14:15 ` [PATCH 6/7] tests/qtest: failover: test migration if the guest doesn't support failover Laurent Vivier
@ 2022-02-03 14:15 ` Laurent Vivier
2022-02-15 9:20 ` [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
7 siblings, 0 replies; 10+ messages in thread
From: Laurent Vivier @ 2022-02-03 14:15 UTC (permalink / raw)
To: qemu-devel; +Cc: Laurent Vivier, Paolo Bonzini, Thomas Huth
Test abort during active migration when failover is disabled from QEMU
or from guest side.
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
tests/qtest/virtio-net-failover.c | 180 ++++++++++++++++++++++++++++++
1 file changed, 180 insertions(+)
diff --git a/tests/qtest/virtio-net-failover.c b/tests/qtest/virtio-net-failover.c
index 54a0a0324192..80292eecf65f 100644
--- a/tests/qtest/virtio-net-failover.c
+++ b/tests/qtest/virtio-net-failover.c
@@ -1082,6 +1082,97 @@ static void test_guest_off_migrate_in(gconstpointer opaque)
machine_stop(qts);
}
+static void test_migrate_guest_off_abort(gconstpointer opaque)
+{
+ QTestState *qts;
+ QDict *resp, *args, *ret;
+ g_autofree gchar *uri = g_strdup_printf("exec: cat > %s", (gchar *)opaque);
+ const gchar *status;
+ QVirtioPCIDevice *vdev;
+ uint64_t features;
+
+ qts = machine_start(BASE_MACHINE
+ "-netdev user,id=hs0 "
+ "-netdev user,id=hs1 ",
+ 2);
+
+ check_one_card(qts, false, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_device_add(qts, "virtio-net", "standby0",
+ "{'bus': 'root0',"
+ "'failover': 'on',"
+ "'netdev': 'hs0',"
+ "'mac': '"MAC_STANDBY0"'}");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_device_add(qts, "virtio-net", "primary0",
+ "{'bus': 'root1',"
+ "'failover_pair_id': 'standby0',"
+ "'netdev': 'hs1',"
+ "'rombar': 0,"
+ "'romfile': '',"
+ "'mac': '"MAC_PRIMARY0"'}");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ features = ~(QVIRTIO_F_BAD_FEATURE |
+ (1ull << VIRTIO_RING_F_INDIRECT_DESC) |
+ (1ull << VIRTIO_RING_F_EVENT_IDX) |
+ (1ull << VIRTIO_NET_F_STANDBY));
+
+ vdev = start_virtio_net_internal(qts, 1, 0, &features);
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ args = qdict_from_jsonf_nofail("{}");
+ g_assert_nonnull(args);
+ qdict_put_str(args, "uri", uri);
+
+ resp = qtest_qmp(qts, "{ 'execute': 'migrate', 'arguments': %p}", args);
+ g_assert(qdict_haskey(resp, "return"));
+ qobject_unref(resp);
+
+ while (true) {
+ ret = migrate_status(qts);
+
+ status = qdict_get_str(ret, "status");
+ if (strcmp(status, "active") == 0) {
+ qobject_unref(ret);
+ break;
+ }
+ g_assert_cmpstr(status, !=, "failed");
+ qobject_unref(ret);
+ }
+
+ resp = qtest_qmp(qts, "{ 'execute': 'migrate_cancel' }");
+ g_assert(qdict_haskey(resp, "return"));
+ qobject_unref(resp);
+
+ while (true) {
+ ret = migrate_status(qts);
+
+ status = qdict_get_str(ret, "status");
+ if (strcmp(status, "cancelled") == 0) {
+ qobject_unref(ret);
+ break;
+ }
+ g_assert_cmpstr(status, !=, "failed");
+ g_assert_cmpstr(status, !=, "active");
+ qobject_unref(ret);
+ }
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qos_object_destroy((QOSGraphObject *)vdev);
+ machine_stop(qts);
+}
+
static void test_migrate_abort_wait_unplug(gconstpointer opaque)
{
QTestState *qts;
@@ -1265,6 +1356,91 @@ static void test_migrate_abort_active(gconstpointer opaque)
machine_stop(qts);
}
+static void test_migrate_off_abort(gconstpointer opaque)
+{
+ QTestState *qts;
+ QDict *resp, *args, *ret;
+ g_autofree gchar *uri = g_strdup_printf("exec: cat > %s", (gchar *)opaque);
+ const gchar *status;
+ QVirtioPCIDevice *vdev;
+
+ qts = machine_start(BASE_MACHINE
+ "-netdev user,id=hs0 "
+ "-netdev user,id=hs1 ",
+ 2);
+
+ check_one_card(qts, false, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_device_add(qts, "virtio-net", "standby0",
+ "{'bus': 'root0',"
+ "'failover': 'off',"
+ "'netdev': 'hs0',"
+ "'mac': '"MAC_STANDBY0"'}");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ vdev = start_virtio_net(qts, 1, 0, "standby0", false);
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, false, "primary0", MAC_PRIMARY0);
+
+ qtest_qmp_device_add(qts, "virtio-net", "primary0",
+ "{'bus': 'root1',"
+ "'failover_pair_id': 'standby0',"
+ "'netdev': 'hs1',"
+ "'rombar': 0,"
+ "'romfile': '',"
+ "'mac': '"MAC_PRIMARY0"'}");
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, true, "primary0", MAC_PRIMARY0);
+
+ args = qdict_from_jsonf_nofail("{}");
+ g_assert_nonnull(args);
+ qdict_put_str(args, "uri", uri);
+
+ resp = qtest_qmp(qts, "{ 'execute': 'migrate', 'arguments': %p}", args);
+ g_assert(qdict_haskey(resp, "return"));
+ qobject_unref(resp);
+
+ while (true) {
+ ret = migrate_status(qts);
+
+ status = qdict_get_str(ret, "status");
+ if (strcmp(status, "active") == 0) {
+ qobject_unref(ret);
+ break;
+ }
+ g_assert_cmpstr(status, !=, "failed");
+ qobject_unref(ret);
+ }
+
+ resp = qtest_qmp(qts, "{ 'execute': 'migrate_cancel' }");
+ g_assert(qdict_haskey(resp, "return"));
+ qobject_unref(resp);
+
+ while (true) {
+ ret = migrate_status(qts);
+
+ status = qdict_get_str(ret, "status");
+ if (strcmp(status, "cancelled") == 0) {
+ qobject_unref(ret);
+ break;
+ }
+ g_assert_cmpstr(status, !=, "failed");
+ g_assert_cmpstr(status, !=, "active");
+ qobject_unref(ret);
+ }
+
+ check_one_card(qts, true, "standby0", MAC_STANDBY0);
+ check_one_card(qts, true, "primary0", MAC_PRIMARY0);
+
+ qos_object_destroy((QOSGraphObject *)vdev);
+ machine_stop(qts);
+}
+
static void test_migrate_abort_timeout(gconstpointer opaque)
{
QTestState *qts;
@@ -1669,10 +1845,14 @@ int main(int argc, char **argv)
test_off_migrate_out);
qtest_add_data_func("failover-virtio-net/migrate/off/in", tmpfile,
test_off_migrate_in);
+ qtest_add_data_func("failover-virtio-net/migrate/off/abort", tmpfile,
+ test_migrate_off_abort);
qtest_add_data_func("failover-virtio-net/migrate/guest_off/out", tmpfile,
test_guest_off_migrate_out);
qtest_add_data_func("failover-virtio-net/migrate/guest_off/in", tmpfile,
test_guest_off_migrate_in);
+ qtest_add_data_func("failover-virtio-net/migrate/guest_off/abort", tmpfile,
+ test_migrate_guest_off_abort);
qtest_add_data_func("failover-virtio-net/migrate/abort/wait-unplug",
tmpfile, test_migrate_abort_wait_unplug);
qtest_add_data_func("failover-virtio-net/migrate/abort/active", tmpfile,
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2)
2022-02-03 14:15 [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
` (6 preceding siblings ...)
2022-02-03 14:15 ` [PATCH 7/7] tests/qtest: failover: migration abort test with failover off Laurent Vivier
@ 2022-02-15 9:20 ` Laurent Vivier
2022-02-21 9:17 ` Thomas Huth
7 siblings, 1 reply; 10+ messages in thread
From: Laurent Vivier @ 2022-02-15 9:20 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Thomas Huth
Ping ?
Thanks,
Laurent
On 03/02/2022 15:15, Laurent Vivier wrote:
> This series adds more qtest test cases to test virtio-net failover feature.
>
> New tests are focused on the behavior when the feature is not available.
>
> Laurent Vivier (7):
> tests/qtest: failover: clean up pathname of tests
> tests/qtest: failover: use a macro for check_one_card()
> tests/qtest: failover: check the feature is correctly provided
> tests/qtest: failover: check missing guest feature
> tests/qtest: failover: check migration with failover off
> tests/qtest: failover: test migration if the guest doesn't support
> failover
> tests/qtest: failover: migration abort test with failover off
>
> tests/qtest/virtio-net-failover.c | 911 +++++++++++++++++++++++-------
> 1 file changed, 716 insertions(+), 195 deletions(-)
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2)
2022-02-15 9:20 ` [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
@ 2022-02-21 9:17 ` Thomas Huth
0 siblings, 0 replies; 10+ messages in thread
From: Thomas Huth @ 2022-02-21 9:17 UTC (permalink / raw)
To: Laurent Vivier, qemu-devel; +Cc: Paolo Bonzini
On 15/02/2022 10.20, Laurent Vivier wrote:
> Ping ?
Sorry for the delay, queued to my testing-next branch now:
https://gitlab.com/thuth/qemu/-/commits/testing-next
Thomas
> On 03/02/2022 15:15, Laurent Vivier wrote:
>> This series adds more qtest test cases to test virtio-net failover feature.
>>
>> New tests are focused on the behavior when the feature is not available.
>>
>> Laurent Vivier (7):
>> tests/qtest: failover: clean up pathname of tests
>> tests/qtest: failover: use a macro for check_one_card()
>> tests/qtest: failover: check the feature is correctly provided
>> tests/qtest: failover: check missing guest feature
>> tests/qtest: failover: check migration with failover off
>> tests/qtest: failover: test migration if the guest doesn't support
>> failover
>> tests/qtest: failover: migration abort test with failover off
>>
>> tests/qtest/virtio-net-failover.c | 911 +++++++++++++++++++++++-------
>> 1 file changed, 716 insertions(+), 195 deletions(-)
>>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2022-02-21 9:21 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-03 14:15 [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
2022-02-03 14:15 ` [PATCH 1/7] tests/qtest: failover: clean up pathname of tests Laurent Vivier
2022-02-03 14:15 ` [PATCH 2/7] tests/qtest: failover: use a macro for check_one_card() Laurent Vivier
2022-02-03 14:15 ` [PATCH 3/7] tests/qtest: failover: check the feature is correctly provided Laurent Vivier
2022-02-03 14:15 ` [PATCH 4/7] tests/qtest: failover: check missing guest feature Laurent Vivier
2022-02-03 14:15 ` [PATCH 5/7] tests/qtest: failover: check migration with failover off Laurent Vivier
2022-02-03 14:15 ` [PATCH 6/7] tests/qtest: failover: test migration if the guest doesn't support failover Laurent Vivier
2022-02-03 14:15 ` [PATCH 7/7] tests/qtest: failover: migration abort test with failover off Laurent Vivier
2022-02-15 9:20 ` [PATCH 0/7] tests/qtest: add some tests for virtio-net failover (part 2) Laurent Vivier
2022-02-21 9:17 ` Thomas Huth
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).