Convert the three test functions that relied on HMP "info numa" to use
QMP "query-cpus-fast" instead, verifying each CPU's node-id through the
structured response. Add a check_cpu_node() helper for the per-CPU
assertions.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
tests/qtest/numa-test.c | 63 +++++++++++++++++++++++++++++++++++++++----------
1 file changed, 51 insertions(+), 12 deletions(-)
diff --git a/tests/qtest/numa-test.c b/tests/qtest/numa-test.c
index d657f389474..8f563c079f6 100644
--- a/tests/qtest/numa-test.c
+++ b/tests/qtest/numa-test.c
@@ -19,19 +19,50 @@ static char *make_cli(const GString *generic_cli, const char *test_cli)
return g_strdup_printf("%s %s", generic_cli->str, test_cli);
}
+static void check_cpu_node(QTestState *qts, int cpu_idx, int expected_node)
+{
+ QDict *resp;
+ QList *cpus;
+ QListEntry *e;
+ bool found = false;
+
+ resp = qtest_qmp(qts, "{ 'execute': 'query-cpus-fast' }");
+ g_assert(resp);
+ g_assert(qdict_haskey(resp, "return"));
+ cpus = qdict_get_qlist(resp, "return");
+ g_assert(cpus);
+
+ QLIST_FOREACH_ENTRY(cpus, e) {
+ QDict *cpu = qobject_to(QDict, qlist_entry_obj(e));
+ int64_t idx = qdict_get_int(cpu, "cpu-index");
+ if (idx == cpu_idx) {
+ QDict *props = qdict_get_qdict(cpu, "props");
+ g_assert(qdict_haskey(props, "node-id"));
+ g_assert_cmpint(qdict_get_int(props, "node-id"), ==, expected_node);
+ found = true;
+ break;
+ }
+ }
+ g_assert(found);
+ qobject_unref(resp);
+}
+
static void test_mon_explicit(const void *data)
{
QTestState *qts;
- g_autofree char *s = NULL;
g_autofree char *cli = NULL;
+ int i;
cli = make_cli(data, "-machine smp.cpus=8 -numa node,nodeid=0,memdev=ram,cpus=0-3 "
"-numa node,nodeid=1,cpus=4-7");
qts = qtest_init(cli);
- s = qtest_hmp(qts, "info numa");
- g_assert(strstr(s, "node 0 cpus: 0 1 2 3"));
- g_assert(strstr(s, "node 1 cpus: 4 5 6 7"));
+ for (i = 0; i < 4; i++) {
+ check_cpu_node(qts, i, 0);
+ }
+ for (i = 4; i < 8; i++) {
+ check_cpu_node(qts, i, 1);
+ }
qtest_quit(qts);
}
@@ -39,16 +70,19 @@ static void test_mon_explicit(const void *data)
static void test_def_cpu_split(const void *data)
{
QTestState *qts;
- g_autofree char *s = NULL;
g_autofree char *cli = NULL;
+ int even_cpus[] = {0, 2, 4, 6};
+ int odd_cpus[] = {1, 3, 5, 7};
+ int i;
cli = make_cli(data, "-machine smp.cpus=8,smp.sockets=8 "
"-numa node,memdev=ram -numa node");
qts = qtest_init(cli);
- s = qtest_hmp(qts, "info numa");
- g_assert(strstr(s, "node 0 cpus: 0 2 4 6"));
- g_assert(strstr(s, "node 1 cpus: 1 3 5 7"));
+ for (i = 0; i < 4; i++) {
+ check_cpu_node(qts, even_cpus[i], 0);
+ check_cpu_node(qts, odd_cpus[i], 1);
+ }
qtest_quit(qts);
}
@@ -56,17 +90,22 @@ static void test_def_cpu_split(const void *data)
static void test_mon_partial(const void *data)
{
QTestState *qts;
- g_autofree char *s = NULL;
g_autofree char *cli = NULL;
+ int node0_cpus[] = {0, 1, 2, 3, 6, 7};
+ int node1_cpus[] = {4, 5};
+ int i;
cli = make_cli(data, "-machine smp.cpus=8 "
"-numa node,nodeid=0,memdev=ram,cpus=0-1 "
"-numa node,nodeid=1,cpus=4-5 ");
qts = qtest_init(cli);
- s = qtest_hmp(qts, "info numa");
- g_assert(strstr(s, "node 0 cpus: 0 1 2 3 6 7"));
- g_assert(strstr(s, "node 1 cpus: 4 5"));
+ for (i = 0; i < 6; i++) {
+ check_cpu_node(qts, node0_cpus[i], 0);
+ }
+ for (i = 0; i < 2; i++) {
+ check_cpu_node(qts, node1_cpus[i], 1);
+ }
qtest_quit(qts);
}
--
2.54.0