[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 05/26] tests/qtest/migration: Add migrate_set_ports into migrate_q
|
From: |
Peter Xu |
|
Subject: |
[PULL 05/26] tests/qtest/migration: Add migrate_set_ports into migrate_qmp to update migration port value |
|
Date: |
Tue, 23 Apr 2024 18:37:52 -0400 |
From: Het Gala <het.gala@nutanix.com>
migrate_get_connect_qdict gets qdict with the dst QEMU parameters.
migrate_set_ports() from list of channels reads each QDict for port,
and fills the port with correct value in case it was 0 in the test.
Signed-off-by: Het Gala <het.gala@nutanix.com>
Suggested-by: Fabiano Rosas <farosas@suse.de>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
Link: https://lore.kernel.org/r/20240312202634.63349-6-het.gala@nutanix.com
Signed-off-by: Peter Xu <peterx@redhat.com>
---
tests/qtest/migration-helpers.c | 75 +++++++++++++++++++++++++++++++++
1 file changed, 75 insertions(+)
diff --git a/tests/qtest/migration-helpers.c b/tests/qtest/migration-helpers.c
index f215f44467..a330ef9c7f 100644
--- a/tests/qtest/migration-helpers.c
+++ b/tests/qtest/migration-helpers.c
@@ -16,6 +16,8 @@
#include "qapi/qapi-visit-sockets.h"
#include "qapi/qobject-input-visitor.h"
#include "qapi/error.h"
+#include "qapi/qmp/qlist.h"
+#include "qemu/cutils.h"
#include "migration-helpers.h"
@@ -48,6 +50,37 @@ static char *SocketAddress_to_str(SocketAddress *addr)
}
}
+static QDict *SocketAddress_to_qdict(SocketAddress *addr)
+{
+ QDict *dict = qdict_new();
+
+ switch (addr->type) {
+ case SOCKET_ADDRESS_TYPE_INET:
+ qdict_put_str(dict, "type", "inet");
+ qdict_put_str(dict, "host", addr->u.inet.host);
+ qdict_put_str(dict, "port", addr->u.inet.port);
+ break;
+ case SOCKET_ADDRESS_TYPE_UNIX:
+ qdict_put_str(dict, "type", "unix");
+ qdict_put_str(dict, "path", addr->u.q_unix.path);
+ break;
+ case SOCKET_ADDRESS_TYPE_FD:
+ qdict_put_str(dict, "type", "fd");
+ qdict_put_str(dict, "str", addr->u.fd.str);
+ break;
+ case SOCKET_ADDRESS_TYPE_VSOCK:
+ qdict_put_str(dict, "type", "vsock");
+ qdict_put_str(dict, "cid", addr->u.vsock.cid);
+ qdict_put_str(dict, "port", addr->u.vsock.port);
+ break;
+ default:
+ g_assert_not_reached();
+ break;
+ }
+
+ return dict;
+}
+
static SocketAddress *migrate_get_socket_address(QTestState *who)
{
QDict *rsp;
@@ -81,6 +114,46 @@ migrate_get_connect_uri(QTestState *who)
return connect_uri;
}
+static QDict *
+migrate_get_connect_qdict(QTestState *who)
+{
+ SocketAddress *addrs;
+ QDict *connect_qdict;
+
+ addrs = migrate_get_socket_address(who);
+ connect_qdict = SocketAddress_to_qdict(addrs);
+
+ qapi_free_SocketAddress(addrs);
+ return connect_qdict;
+}
+
+static void migrate_set_ports(QTestState *to, QList *channel_list)
+{
+ QDict *addr;
+ QListEntry *entry;
+ const char *addr_port = NULL;
+
+ if (channel_list == NULL) {
+ return;
+ }
+
+ addr = migrate_get_connect_qdict(to);
+
+ QLIST_FOREACH_ENTRY(channel_list, entry) {
+ QDict *channel = qobject_to(QDict, qlist_entry_obj(entry));
+ QDict *addrdict = qdict_get_qdict(channel, "addr");
+
+ if (qdict_haskey(addrdict, "port") &&
+ qdict_haskey(addr, "port") &&
+ (strcmp(qdict_get_str(addrdict, "port"), "0") == 0)) {
+ addr_port = qdict_get_str(addr, "port");
+ qdict_put_str(addrdict, "port", g_strdup(addr_port));
+ }
+ }
+
+ qobject_unref(addr);
+}
+
bool migrate_watch_for_events(QTestState *who, const char *name,
QDict *event, void *opaque)
{
@@ -139,6 +212,7 @@ void migrate_qmp(QTestState *who, QTestState *to, const
char *uri,
{
va_list ap;
QDict *args;
+ QList *channel_list = NULL;
g_autofree char *connect_uri = NULL;
va_start(ap, fmt);
@@ -149,6 +223,7 @@ void migrate_qmp(QTestState *who, QTestState *to, const
char *uri,
if (!uri) {
connect_uri = migrate_get_connect_uri(to);
}
+ migrate_set_ports(to, channel_list);
qdict_put_str(args, "uri", uri ? uri : connect_uri);
qtest_qmp_assert_success(who,
--
2.44.0
- [PULL 13/26] migration: Always report an error in ram_save_setup(), (continued)
- [PULL 13/26] migration: Always report an error in ram_save_setup(), Peter Xu, 2024/04/23
- [PULL 16/26] migration: Add Error** argument to .save_setup() handler, Peter Xu, 2024/04/23
- [PULL 19/26] migration: Introduce ram_bitmaps_destroy(), Peter Xu, 2024/04/23
- [PULL 24/26] migration: Add Error** argument to add_bitmaps_to_list(), Peter Xu, 2024/04/23
- [PULL 26/26] migration/colo: Fix bdrv_graph_rdlock_main_loop: Assertion `!qemu_in_coroutine()' failed., Peter Xu, 2024/04/23
- [PULL 08/26] tests/qtest/migration: Add negative tests to validate migration QAPIs, Peter Xu, 2024/04/23
- [PULL 06/26] tests/qtest/migration: Add channels parameter in migrate_qmp, Peter Xu, 2024/04/23
- [PULL 17/26] migration: Add Error** argument to .load_setup() handler, Peter Xu, 2024/04/23
- [PULL 10/26] s390/stattrib: Add Error** argument to set_migrationmode() handler, Peter Xu, 2024/04/23
- [PULL 25/26] migration/multifd: solve zero page causing multiple page faults, Peter Xu, 2024/04/23
- [PULL 05/26] tests/qtest/migration: Add migrate_set_ports into migrate_qmp to update migration port value,
Peter Xu <=
- [PULL 12/26] migration: Always report an error in block_save_setup(), Peter Xu, 2024/04/23
- [PULL 14/26] migration: Add Error** argument to vmstate_save(), Peter Xu, 2024/04/23
- [PULL 09/26] tests/qtest/migration: Fix typo for vsock in SocketAddress_to_str, Peter Xu, 2024/04/23
- [PULL 11/26] vfio: Always report an error in vfio_save_setup(), Peter Xu, 2024/04/23
- [PULL 22/26] migration: Add Error** argument to xbzrle_init(), Peter Xu, 2024/04/23
- [PULL 03/26] tests/qtest/migration: Replace migrate_get_connect_uri inplace of migrate_get_socket_address, Peter Xu, 2024/04/23
- [PULL 15/26] migration: Add Error** argument to qemu_savevm_state_setup(), Peter Xu, 2024/04/23
- [PULL 18/26] memory: Add Error** argument to .log_global_start() handler, Peter Xu, 2024/04/23
- [PULL 23/26] migration: Modify ram_init_bitmaps() to report dirty tracking errors, Peter Xu, 2024/04/23
- [PULL 20/26] memory: Add Error** argument to the global_dirty_log routines, Peter Xu, 2024/04/23