mirror of https://github.com/xqemu/xqemu.git
vhost-user-test: check ownership during migration
Check that backend source and destination do not have simultaneous ownership during migration. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Tested-by: Thibaut Collet <thibaut.collet@6wind.com>
This commit is contained in:
parent
b181974724
commit
1d9edff78f
|
@ -307,6 +307,10 @@ static void chr_read(void *opaque, const uint8_t *buf, int size)
|
||||||
g_cond_signal(&s->data_cond);
|
g_cond_signal(&s->data_cond);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VHOST_USER_RESET_DEVICE:
|
||||||
|
s->fds_num = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -461,12 +465,37 @@ static guint64 get_log_size(TestServer *s)
|
||||||
return log_size;
|
return log_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct TestMigrateSource {
|
||||||
|
GSource source;
|
||||||
|
TestServer *src;
|
||||||
|
TestServer *dest;
|
||||||
|
} TestMigrateSource;
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
test_migrate_source_check(GSource *source)
|
||||||
|
{
|
||||||
|
TestMigrateSource *t = (TestMigrateSource *)source;
|
||||||
|
gboolean overlap = t->src->fds_num > 0 && t->dest->fds_num > 0;
|
||||||
|
|
||||||
|
g_assert(!overlap);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
GSourceFuncs test_migrate_source_funcs = {
|
||||||
|
NULL,
|
||||||
|
test_migrate_source_check,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
static void test_migrate(void)
|
static void test_migrate(void)
|
||||||
{
|
{
|
||||||
TestServer *s = test_server_new("src");
|
TestServer *s = test_server_new("src");
|
||||||
TestServer *dest = test_server_new("dest");
|
TestServer *dest = test_server_new("dest");
|
||||||
const char *uri = "tcp:127.0.0.1:1234";
|
const char *uri = "tcp:127.0.0.1:1234";
|
||||||
QTestState *global = global_qtest, *from, *to;
|
QTestState *global = global_qtest, *from, *to;
|
||||||
|
GSource *source;
|
||||||
gchar *cmd;
|
gchar *cmd;
|
||||||
QDict *rsp;
|
QDict *rsp;
|
||||||
guint8 *log;
|
guint8 *log;
|
||||||
|
@ -484,6 +513,12 @@ static void test_migrate(void)
|
||||||
to = qtest_init(cmd);
|
to = qtest_init(cmd);
|
||||||
g_free(cmd);
|
g_free(cmd);
|
||||||
|
|
||||||
|
source = g_source_new(&test_migrate_source_funcs,
|
||||||
|
sizeof(TestMigrateSource));
|
||||||
|
((TestMigrateSource *)source)->src = s;
|
||||||
|
((TestMigrateSource *)source)->dest = dest;
|
||||||
|
g_source_attach(source, NULL);
|
||||||
|
|
||||||
/* slow down migration to have time to fiddle with log */
|
/* slow down migration to have time to fiddle with log */
|
||||||
/* TODO: qtest could learn to break on some places */
|
/* TODO: qtest could learn to break on some places */
|
||||||
rsp = qmp("{ 'execute': 'migrate_set_speed',"
|
rsp = qmp("{ 'execute': 'migrate_set_speed',"
|
||||||
|
@ -522,6 +557,9 @@ static void test_migrate(void)
|
||||||
|
|
||||||
read_guest_mem(dest);
|
read_guest_mem(dest);
|
||||||
|
|
||||||
|
g_source_destroy(source);
|
||||||
|
g_source_unref(source);
|
||||||
|
|
||||||
qtest_quit(to);
|
qtest_quit(to);
|
||||||
test_server_free(dest);
|
test_server_free(dest);
|
||||||
qtest_quit(from);
|
qtest_quit(from);
|
||||||
|
|
Loading…
Reference in New Issue