mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-07-21 18:34:33 +00:00
tests/qtest/migration: Replace connect_uri and move migrate_get_socket_address inside migrate_qmp
Move the calls to migrate_get_socket_address() into migrate_qmp(). Get rid of connect_uri and replace it with args->connect_uri only because 'to' object will help to generate connect_uri with the correct port number. 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-3-het.gala@nutanix.com Signed-off-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
parent
8c47168cca
commit
d1155fd485
|
@ -13,6 +13,9 @@
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "qemu/ctype.h"
|
#include "qemu/ctype.h"
|
||||||
#include "qapi/qmp/qjson.h"
|
#include "qapi/qmp/qjson.h"
|
||||||
|
#include "qapi/qapi-visit-sockets.h"
|
||||||
|
#include "qapi/qobject-input-visitor.h"
|
||||||
|
#include "qapi/error.h"
|
||||||
|
|
||||||
#include "migration-helpers.h"
|
#include "migration-helpers.h"
|
||||||
|
|
||||||
|
@ -24,6 +27,51 @@
|
||||||
*/
|
*/
|
||||||
#define MIGRATION_STATUS_WAIT_TIMEOUT 120
|
#define MIGRATION_STATUS_WAIT_TIMEOUT 120
|
||||||
|
|
||||||
|
static char *SocketAddress_to_str(SocketAddress *addr)
|
||||||
|
{
|
||||||
|
switch (addr->type) {
|
||||||
|
case SOCKET_ADDRESS_TYPE_INET:
|
||||||
|
return g_strdup_printf("tcp:%s:%s",
|
||||||
|
addr->u.inet.host,
|
||||||
|
addr->u.inet.port);
|
||||||
|
case SOCKET_ADDRESS_TYPE_UNIX:
|
||||||
|
return g_strdup_printf("unix:%s",
|
||||||
|
addr->u.q_unix.path);
|
||||||
|
case SOCKET_ADDRESS_TYPE_FD:
|
||||||
|
return g_strdup_printf("fd:%s", addr->u.fd.str);
|
||||||
|
case SOCKET_ADDRESS_TYPE_VSOCK:
|
||||||
|
return g_strdup_printf("tcp:%s:%s",
|
||||||
|
addr->u.vsock.cid,
|
||||||
|
addr->u.vsock.port);
|
||||||
|
default:
|
||||||
|
return g_strdup("unknown address type");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
migrate_get_socket_address(QTestState *who, const char *parameter)
|
||||||
|
{
|
||||||
|
QDict *rsp;
|
||||||
|
char *result;
|
||||||
|
SocketAddressList *addrs;
|
||||||
|
Visitor *iv = NULL;
|
||||||
|
QObject *object;
|
||||||
|
|
||||||
|
rsp = migrate_query(who);
|
||||||
|
object = qdict_get(rsp, parameter);
|
||||||
|
|
||||||
|
iv = qobject_input_visitor_new(object);
|
||||||
|
visit_type_SocketAddressList(iv, NULL, &addrs, &error_abort);
|
||||||
|
visit_free(iv);
|
||||||
|
|
||||||
|
/* we are only using a single address */
|
||||||
|
result = SocketAddress_to_str(addrs->value);
|
||||||
|
|
||||||
|
qapi_free_SocketAddressList(addrs);
|
||||||
|
qobject_unref(rsp);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
bool migrate_watch_for_events(QTestState *who, const char *name,
|
bool migrate_watch_for_events(QTestState *who, const char *name,
|
||||||
QDict *event, void *opaque)
|
QDict *event, void *opaque)
|
||||||
{
|
{
|
||||||
|
@ -73,13 +121,17 @@ void migrate_qmp(QTestState *who, QTestState *to, const char *uri,
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
QDict *args;
|
QDict *args;
|
||||||
|
g_autofree char *connect_uri = NULL;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
args = qdict_from_vjsonf_nofail(fmt, ap);
|
args = qdict_from_vjsonf_nofail(fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
g_assert(!qdict_haskey(args, "uri"));
|
g_assert(!qdict_haskey(args, "uri"));
|
||||||
qdict_put_str(args, "uri", uri);
|
if (!uri) {
|
||||||
|
connect_uri = migrate_get_socket_address(to, "socket-address");
|
||||||
|
}
|
||||||
|
qdict_put_str(args, "uri", uri ? uri : connect_uri);
|
||||||
|
|
||||||
qtest_qmp_assert_success(who,
|
qtest_qmp_assert_success(who,
|
||||||
"{ 'execute': 'migrate', 'arguments': %p}", args);
|
"{ 'execute': 'migrate', 'arguments': %p}", args);
|
||||||
|
|
|
@ -13,16 +13,12 @@
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
|
|
||||||
#include "libqtest.h"
|
#include "libqtest.h"
|
||||||
#include "qapi/error.h"
|
|
||||||
#include "qapi/qmp/qdict.h"
|
#include "qapi/qmp/qdict.h"
|
||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
#include "qemu/option.h"
|
#include "qemu/option.h"
|
||||||
#include "qemu/range.h"
|
#include "qemu/range.h"
|
||||||
#include "qemu/sockets.h"
|
#include "qemu/sockets.h"
|
||||||
#include "chardev/char.h"
|
#include "chardev/char.h"
|
||||||
#include "qapi/qapi-visit-sockets.h"
|
|
||||||
#include "qapi/qobject-input-visitor.h"
|
|
||||||
#include "qapi/qobject-output-visitor.h"
|
|
||||||
#include "crypto/tlscredspsk.h"
|
#include "crypto/tlscredspsk.h"
|
||||||
#include "qapi/qmp/qlist.h"
|
#include "qapi/qmp/qlist.h"
|
||||||
|
|
||||||
|
@ -369,50 +365,6 @@ static void cleanup(const char *filename)
|
||||||
unlink(path);
|
unlink(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *SocketAddress_to_str(SocketAddress *addr)
|
|
||||||
{
|
|
||||||
switch (addr->type) {
|
|
||||||
case SOCKET_ADDRESS_TYPE_INET:
|
|
||||||
return g_strdup_printf("tcp:%s:%s",
|
|
||||||
addr->u.inet.host,
|
|
||||||
addr->u.inet.port);
|
|
||||||
case SOCKET_ADDRESS_TYPE_UNIX:
|
|
||||||
return g_strdup_printf("unix:%s",
|
|
||||||
addr->u.q_unix.path);
|
|
||||||
case SOCKET_ADDRESS_TYPE_FD:
|
|
||||||
return g_strdup_printf("fd:%s", addr->u.fd.str);
|
|
||||||
case SOCKET_ADDRESS_TYPE_VSOCK:
|
|
||||||
return g_strdup_printf("tcp:%s:%s",
|
|
||||||
addr->u.vsock.cid,
|
|
||||||
addr->u.vsock.port);
|
|
||||||
default:
|
|
||||||
return g_strdup("unknown address type");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *migrate_get_socket_address(QTestState *who, const char *parameter)
|
|
||||||
{
|
|
||||||
QDict *rsp;
|
|
||||||
char *result;
|
|
||||||
SocketAddressList *addrs;
|
|
||||||
Visitor *iv = NULL;
|
|
||||||
QObject *object;
|
|
||||||
|
|
||||||
rsp = migrate_query(who);
|
|
||||||
object = qdict_get(rsp, parameter);
|
|
||||||
|
|
||||||
iv = qobject_input_visitor_new(object);
|
|
||||||
visit_type_SocketAddressList(iv, NULL, &addrs, &error_abort);
|
|
||||||
visit_free(iv);
|
|
||||||
|
|
||||||
/* we are only using a single address */
|
|
||||||
result = SocketAddress_to_str(addrs->value);
|
|
||||||
|
|
||||||
qapi_free_SocketAddressList(addrs);
|
|
||||||
qobject_unref(rsp);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static long long migrate_get_parameter_int(QTestState *who,
|
static long long migrate_get_parameter_int(QTestState *who,
|
||||||
const char *parameter)
|
const char *parameter)
|
||||||
{
|
{
|
||||||
|
@ -1349,8 +1301,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
|
||||||
wait_for_serial("src_serial");
|
wait_for_serial("src_serial");
|
||||||
wait_for_suspend(from, &src_state);
|
wait_for_suspend(from, &src_state);
|
||||||
|
|
||||||
g_autofree char *uri = migrate_get_socket_address(to, "socket-address");
|
migrate_qmp(from, to, NULL, "{}");
|
||||||
migrate_qmp(from, to, uri, "{}");
|
|
||||||
|
|
||||||
migrate_wait_for_dirty_mem(from, to);
|
migrate_wait_for_dirty_mem(from, to);
|
||||||
|
|
||||||
|
@ -1733,7 +1684,6 @@ static void test_precopy_common(MigrateCommon *args)
|
||||||
{
|
{
|
||||||
QTestState *from, *to;
|
QTestState *from, *to;
|
||||||
void *data_hook = NULL;
|
void *data_hook = NULL;
|
||||||
g_autofree char *connect_uri = NULL;
|
|
||||||
|
|
||||||
if (test_migrate_start(&from, &to, args->listen_uri, &args->start)) {
|
if (test_migrate_start(&from, &to, args->listen_uri, &args->start)) {
|
||||||
return;
|
return;
|
||||||
|
@ -1766,18 +1716,12 @@ static void test_precopy_common(MigrateCommon *args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!args->connect_uri) {
|
|
||||||
connect_uri = migrate_get_socket_address(to, "socket-address");
|
|
||||||
} else {
|
|
||||||
connect_uri = g_strdup(args->connect_uri);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args->result == MIG_TEST_QMP_ERROR) {
|
if (args->result == MIG_TEST_QMP_ERROR) {
|
||||||
migrate_qmp_fail(from, connect_uri, "{}");
|
migrate_qmp_fail(from, args->connect_uri, "{}");
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
migrate_qmp(from, to, connect_uri, "{}");
|
migrate_qmp(from, to, args->connect_uri, "{}");
|
||||||
|
|
||||||
if (args->result != MIG_TEST_SUCCEED) {
|
if (args->result != MIG_TEST_SUCCEED) {
|
||||||
bool allow_active = args->result == MIG_TEST_FAIL;
|
bool allow_active = args->result == MIG_TEST_FAIL;
|
||||||
|
@ -1843,7 +1787,6 @@ static void test_file_common(MigrateCommon *args, bool stop_src)
|
||||||
{
|
{
|
||||||
QTestState *from, *to;
|
QTestState *from, *to;
|
||||||
void *data_hook = NULL;
|
void *data_hook = NULL;
|
||||||
g_autofree char *connect_uri = g_strdup(args->connect_uri);
|
|
||||||
|
|
||||||
if (test_migrate_start(&from, &to, args->listen_uri, &args->start)) {
|
if (test_migrate_start(&from, &to, args->listen_uri, &args->start)) {
|
||||||
return;
|
return;
|
||||||
|
@ -1869,18 +1812,18 @@ static void test_file_common(MigrateCommon *args, bool stop_src)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args->result == MIG_TEST_QMP_ERROR) {
|
if (args->result == MIG_TEST_QMP_ERROR) {
|
||||||
migrate_qmp_fail(from, connect_uri, "{}");
|
migrate_qmp_fail(from, args->connect_uri, "{}");
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
migrate_qmp(from, to, connect_uri, "{}");
|
migrate_qmp(from, to, args->connect_uri, "{}");
|
||||||
wait_for_migration_complete(from);
|
wait_for_migration_complete(from);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We need to wait for the source to finish before starting the
|
* We need to wait for the source to finish before starting the
|
||||||
* destination.
|
* destination.
|
||||||
*/
|
*/
|
||||||
migrate_incoming_qmp(to, connect_uri, "{}");
|
migrate_incoming_qmp(to, args->connect_uri, "{}");
|
||||||
wait_for_migration_complete(to);
|
wait_for_migration_complete(to);
|
||||||
|
|
||||||
if (stop_src) {
|
if (stop_src) {
|
||||||
|
@ -3017,7 +2960,6 @@ static void test_multifd_tcp_cancel(void)
|
||||||
.hide_stderr = true,
|
.hide_stderr = true,
|
||||||
};
|
};
|
||||||
QTestState *from, *to, *to2;
|
QTestState *from, *to, *to2;
|
||||||
g_autofree char *uri = NULL;
|
|
||||||
|
|
||||||
if (test_migrate_start(&from, &to, "defer", &args)) {
|
if (test_migrate_start(&from, &to, "defer", &args)) {
|
||||||
return;
|
return;
|
||||||
|
@ -3038,9 +2980,7 @@ static void test_multifd_tcp_cancel(void)
|
||||||
/* Wait for the first serial output from the source */
|
/* Wait for the first serial output from the source */
|
||||||
wait_for_serial("src_serial");
|
wait_for_serial("src_serial");
|
||||||
|
|
||||||
uri = migrate_get_socket_address(to, "socket-address");
|
migrate_qmp(from, to, NULL, "{}");
|
||||||
|
|
||||||
migrate_qmp(from, to, uri, "{}");
|
|
||||||
|
|
||||||
migrate_wait_for_dirty_mem(from, to);
|
migrate_wait_for_dirty_mem(from, to);
|
||||||
|
|
||||||
|
@ -3065,14 +3005,11 @@ static void test_multifd_tcp_cancel(void)
|
||||||
/* Start incoming migration from the 1st socket */
|
/* Start incoming migration from the 1st socket */
|
||||||
migrate_incoming_qmp(to2, "tcp:127.0.0.1:0", "{}");
|
migrate_incoming_qmp(to2, "tcp:127.0.0.1:0", "{}");
|
||||||
|
|
||||||
g_free(uri);
|
|
||||||
uri = migrate_get_socket_address(to2, "socket-address");
|
|
||||||
|
|
||||||
wait_for_migration_status(from, "cancelled", NULL);
|
wait_for_migration_status(from, "cancelled", NULL);
|
||||||
|
|
||||||
migrate_ensure_non_converge(from);
|
migrate_ensure_non_converge(from);
|
||||||
|
|
||||||
migrate_qmp(from, to2, uri, "{}");
|
migrate_qmp(from, to2, NULL, "{}");
|
||||||
|
|
||||||
migrate_wait_for_dirty_mem(from, to2);
|
migrate_wait_for_dirty_mem(from, to2);
|
||||||
|
|
||||||
|
@ -3405,7 +3342,7 @@ static void test_migrate_dirty_limit(void)
|
||||||
migrate_dirty_limit_wait_showup(from, dirtylimit_period, dirtylimit_value);
|
migrate_dirty_limit_wait_showup(from, dirtylimit_period, dirtylimit_value);
|
||||||
|
|
||||||
/* Start migrate */
|
/* Start migrate */
|
||||||
migrate_qmp(from, to, uri, "{}");
|
migrate_qmp(from, to, args.connect_uri, "{}");
|
||||||
|
|
||||||
/* Wait for dirty limit throttle begin */
|
/* Wait for dirty limit throttle begin */
|
||||||
throttle_us_per_full = 0;
|
throttle_us_per_full = 0;
|
||||||
|
@ -3446,7 +3383,7 @@ static void test_migrate_dirty_limit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Start migrate */
|
/* Start migrate */
|
||||||
migrate_qmp(from, to, uri, "{}");
|
migrate_qmp(from, to, args.connect_uri, "{}");
|
||||||
|
|
||||||
/* Wait for dirty limit throttle begin */
|
/* Wait for dirty limit throttle begin */
|
||||||
throttle_us_per_full = 0;
|
throttle_us_per_full = 0;
|
||||||
|
|
Loading…
Reference in a new issue