test-qmp-client: drop QMP_TEST() macro

Similar to the previous commit for test-path.
The macro confuses gcc/gcov/lcov:
```
lcov: ERROR: lcov: ERROR: (inconsistent) mismatched end line for test_qmp_client_basic_body at
/home/runner/work/systemd/systemd/src/test/test-qmp-client.c:204:
204 -> 224 while capturing from build/mkosi.builddir/arch~rolling~x86-64/test-qmp-client.p/src_test_test-qmp-client.c.gcno
```

The macro itself is not bad, but does not reduce lines so much.
Let's stop using the macro.
This commit is contained in:
Yu Watanabe
2026-05-28 01:46:38 +09:00
parent f5678af9c7
commit 521153fe5b
+49 -21
View File
@@ -151,20 +151,6 @@ static void run_qmp_test(sd_fiber_func_t mock_fn, sd_fiber_func_t client_fn) {
ASSERT_OK(sd_future_result(mock_f));
}
/* Define a test whose body runs as the client fiber on an event loop shared with `mock_fn`.
* The body receives `QmpClient *client` as its argument. */
#define QMP_TEST(name, mock_fn) \
static int test_##name##_body(QmpClient *client); \
static int test_##name##_fiber(void *userdata) { \
int r = test_##name##_body(userdata); \
ASSERT_OK(sd_event_exit(sd_fiber_get_event(), 0)); \
return r; \
} \
TEST(name) { \
run_qmp_test(mock_fn, test_##name##_fiber); \
} \
static int test_##name##_body(QmpClient *client)
static int mock_qmp_basic_fiber(void *userdata) {
_cleanup_(json_stream_done) JsonStream s = {};
_cleanup_(sd_json_variant_unrefp) sd_json_variant *stop_event = NULL;
@@ -201,7 +187,8 @@ static int test_event_callback(
return 0;
}
QMP_TEST(qmp_client_basic, mock_qmp_basic_fiber) {
static int qmp_client_basic_fiber(void *userdata) {
QmpClient *client = ASSERT_NOT_NULL(userdata);
_cleanup_(sd_json_variant_unrefp) sd_json_variant *result = NULL;
_cleanup_free_ char *error_desc = NULL;
bool event_received = false;
@@ -220,9 +207,14 @@ QMP_TEST(qmp_client_basic, mock_qmp_basic_fiber) {
ASSERT_OK_POSITIVE(qmp_client_call(client, "cont", NULL, NULL, NULL));
ASSERT_TRUE(event_received);
ASSERT_OK(sd_event_exit(sd_fiber_get_event(), 0));
return 0;
}
TEST(qmp_basic) {
run_qmp_test(mock_qmp_basic_fiber, qmp_client_basic_fiber);
}
static int mock_qmp_eof_fiber(void *userdata) {
_cleanup_(json_stream_done) JsonStream s = {};
@@ -232,12 +224,18 @@ static int mock_qmp_eof_fiber(void *userdata) {
return 0;
}
QMP_TEST(qmp_client_eof, mock_qmp_eof_fiber) {
static int qmp_client_eof_fiber(void *userdata) {
QmpClient *client = ASSERT_NOT_NULL(userdata);
int r = qmp_client_call(client, "query-status", NULL, NULL, NULL);
ASSERT_TRUE(ERRNO_IS_NEG_DISCONNECT(r));
ASSERT_OK(sd_event_exit(sd_fiber_get_event(), 0));
return 0;
}
TEST(qmp_eof) {
run_qmp_test(mock_qmp_eof_fiber, qmp_client_eof_fiber);
}
static int mock_qmp_call_fiber(void *userdata) {
_cleanup_(json_stream_done) JsonStream s = {};
@@ -250,7 +248,8 @@ static int mock_qmp_call_fiber(void *userdata) {
return 0;
}
QMP_TEST(qmp_client_call, mock_qmp_call_fiber) {
static int qmp_client_call_fiber(void *userdata) {
QmpClient *client = ASSERT_NOT_NULL(userdata);
_cleanup_(sd_future_cancel_wait_unrefp) sd_future *f = NULL;
_cleanup_(sd_json_variant_unrefp) sd_json_variant *result = NULL;
_cleanup_free_ char *error_desc = NULL;
@@ -286,9 +285,14 @@ QMP_TEST(qmp_client_call, mock_qmp_call_fiber) {
/* qmp_client_call() also surfaces QMP errors as -EIO, regardless of whether the caller
* passed ret_error_desc. */
ASSERT_ERROR(qmp_client_call(client, "stop", NULL, NULL, NULL), EIO);
ASSERT_OK(sd_event_exit(sd_fiber_get_event(), 0));
return 0;
}
TEST(qmp_call) {
run_qmp_test(mock_qmp_call_fiber, qmp_client_call_fiber);
}
static int mock_qmp_call_disconnect_fiber(void *userdata) {
_cleanup_(json_stream_done) JsonStream s = {};
_cleanup_(sd_json_variant_unrefp) sd_json_variant *stop_cmd = NULL;
@@ -302,12 +306,18 @@ static int mock_qmp_call_disconnect_fiber(void *userdata) {
return 0;
}
QMP_TEST(qmp_client_call_disconnect, mock_qmp_call_disconnect_fiber) {
static int qmp_client_call_disconnect_fiber(void *userdata) {
QmpClient *client = ASSERT_NOT_NULL(userdata);
int r = qmp_client_call(client, "stop", NULL, NULL, NULL);
ASSERT_TRUE(ERRNO_IS_NEG_DISCONNECT(r));
ASSERT_OK(sd_event_exit(sd_fiber_get_event(), 0));
return 0;
}
TEST(qmp_call_disconnect) {
run_qmp_test(mock_qmp_call_disconnect_fiber, qmp_client_call_disconnect_fiber);
}
static int mock_qmp_fd_fiber(void *userdata) {
_cleanup_(json_stream_done) JsonStream s = {};
_cleanup_(sd_json_variant_unrefp) sd_json_variant *cap_cmd = NULL, *addfd_cmd = NULL,
@@ -336,7 +346,8 @@ static int mock_qmp_fd_fiber(void *userdata) {
return 0;
}
QMP_TEST(qmp_client_invoke_with_fd, mock_qmp_fd_fiber) {
static int qmp_client_invoke_with_fd_fiber(void *userdata) {
QmpClient *client = ASSERT_NOT_NULL(userdata);
_cleanup_(sd_json_variant_unrefp) sd_json_variant *args = NULL;
_cleanup_close_ int fd_to_pass = -EBADF;
_cleanup_(sd_json_variant_unrefp) sd_json_variant *result = NULL;
@@ -349,9 +360,14 @@ QMP_TEST(qmp_client_invoke_with_fd, mock_qmp_fd_fiber) {
QMP_CLIENT_ARGS_FD(args, TAKE_FD(fd_to_pass)),
&result, NULL));
ASSERT_NOT_NULL(result);
ASSERT_OK(sd_event_exit(sd_fiber_get_event(), 0));
return 0;
}
TEST(qmp_invoke_with_fd) {
run_qmp_test(mock_qmp_fd_fiber, qmp_client_invoke_with_fd_fiber);
}
static int on_dead_peer_reply(
QmpClient *client,
sd_json_variant *result,
@@ -433,7 +449,8 @@ static int tripwire_callback(
return 0;
}
QMP_TEST(qmp_client_invoke_slot_lifecycle, mock_qmp_slot_fiber) {
static int qmp_client_invoke_slot_lifecycle_fiber(void *userdata) {
QmpClient *client = ASSERT_NOT_NULL(userdata);
_cleanup_(qmp_slot_unrefp) QmpSlot *slot = NULL;
ASSERT_OK(qmp_client_invoke(client, &slot, "query-status", NULL, nop_callback, NULL));
@@ -447,10 +464,16 @@ QMP_TEST(qmp_client_invoke_slot_lifecycle, mock_qmp_slot_fiber) {
/* Explicit out-of-order unref exercises the already-disconnected path in qmp_slot_free(). */
slot = qmp_slot_unref(slot);
ASSERT_OK(sd_event_exit(sd_fiber_get_event(), 0));
return 0;
}
QMP_TEST(qmp_client_invoke_slot_cancel, mock_qmp_slot_fiber) {
TEST(qmp_invoke_slot_lifecycle) {
run_qmp_test(mock_qmp_slot_fiber, qmp_client_invoke_slot_lifecycle_fiber);
}
static int qmp_client_invoke_slot_cancel_fiber(void *userdata) {
QmpClient *client = ASSERT_NOT_NULL(userdata);
QmpSlot *slot = NULL;
bool fired = false;
@@ -463,9 +486,14 @@ QMP_TEST(qmp_client_invoke_slot_cancel, mock_qmp_slot_fiber) {
ASSERT_OK_POSITIVE(qmp_client_call(client, "stop", NULL, NULL, NULL));
ASSERT_FALSE(fired);
ASSERT_OK(sd_event_exit(sd_fiber_get_event(), 0));
return 0;
}
TEST(qmp_invoke_slot_cancel) {
run_qmp_test(mock_qmp_slot_fiber, qmp_client_invoke_slot_cancel_fiber);
}
TEST(qmp_schema_has_member) {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *schema = NULL;