From 48446d572ec0383ae77d3817a3968b97c04fdaaf Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Thu, 18 Dec 2025 15:16:12 -0800 Subject: [PATCH 1/9] Refactor: libcrmcommon: Best practices in output unit tests Signed-off-by: Reid Wahl --- .../tests/output/pcmk__call_message_test.c | 39 ++++++++---- .../pcmk__output_and_clear_error_test.c | 21 ++++--- .../tests/output/pcmk__output_free_test.c | 24 +++++--- .../tests/output/pcmk__output_new_test.c | 49 ++++++++++----- .../tests/output/pcmk__register_format_test.c | 36 +++++++---- .../output/pcmk__register_formats_test.c | 23 ++++--- .../output/pcmk__register_message_test.c | 33 ++++++---- .../output/pcmk__register_messages_test.c | 60 ++++++++++++------- .../output/pcmk__unregister_formats_test.c | 15 +++-- 9 files changed, 199 insertions(+), 101 deletions(-) diff --git a/lib/common/tests/output/pcmk__call_message_test.c b/lib/common/tests/output/pcmk__call_message_test.c index 8077fce2ba0..d86f150befe 100644 --- a/lib/common/tests/output/pcmk__call_message_test.c +++ b/lib/common/tests/output/pcmk__call_message_test.c @@ -14,41 +14,48 @@ #include static int -default_message_fn(pcmk__output_t *out, va_list args) { +default_message_fn(pcmk__output_t *out, va_list args) +{ function_called(); return pcmk_rc_ok; } static int -failed_message_fn(pcmk__output_t *out, va_list args) { +failed_message_fn(pcmk__output_t *out, va_list args) +{ function_called(); return pcmk_rc_no_output; } static int -message_fn_1(pcmk__output_t *out, va_list args) { +message_fn_1(pcmk__output_t *out, va_list args) +{ function_called(); return pcmk_rc_ok; } static int -message_fn_2(pcmk__output_t *out, va_list args) { +message_fn_2(pcmk__output_t *out, va_list args) +{ function_called(); return pcmk_rc_ok; } static bool -fake_text_init(pcmk__output_t *out) { +fake_text_init(pcmk__output_t *out) +{ return true; } static void -fake_text_free_priv(pcmk__output_t *out) { +fake_text_free_priv(pcmk__output_t *out) +{ /* This function intentionally left blank */ } static pcmk__output_t * -mk_fake_text_output(char **argv) { +mk_fake_text_output(char **argv) +{ pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); if (retval == NULL) { @@ -66,19 +73,22 @@ mk_fake_text_output(char **argv) { } static int -setup(void **state) { +setup(void **state) +{ pcmk__register_format(NULL, "text", mk_fake_text_output, NULL); return 0; } static int -teardown(void **state) { +teardown(void **state) +{ pcmk__unregister_formats(); return 0; } static void -no_such_message(void **state) { +no_such_message(void **state) +{ pcmk__output_t *out = NULL; pcmk__output_new(&out, "text", NULL, NULL); @@ -91,7 +101,8 @@ no_such_message(void **state) { } static void -message_return_value(void **state) { +message_return_value(void **state) +{ pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { @@ -115,7 +126,8 @@ message_return_value(void **state) { } static void -wrong_format(void **state) { +wrong_format(void **state) +{ pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { @@ -132,7 +144,8 @@ wrong_format(void **state) { } static void -default_called(void **state) { +default_called(void **state) +{ pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { diff --git a/lib/common/tests/output/pcmk__output_and_clear_error_test.c b/lib/common/tests/output/pcmk__output_and_clear_error_test.c index 98406147e3b..8428fd2f815 100644 --- a/lib/common/tests/output/pcmk__output_and_clear_error_test.c +++ b/lib/common/tests/output/pcmk__output_and_clear_error_test.c @@ -16,23 +16,27 @@ #include static bool -fake_text_init(pcmk__output_t *out) { +fake_text_init(pcmk__output_t *out) +{ return true; } static void -fake_text_free_priv(pcmk__output_t *out) { +fake_text_free_priv(pcmk__output_t *out) +{ /* This function intentionally left blank */ } G_GNUC_PRINTF(2, 3) static void -fake_text_err(pcmk__output_t *out, const char *format, ...) { +fake_text_err(pcmk__output_t *out, const char *format, ...) +{ function_called(); } static pcmk__output_t * -mk_fake_text_output(char **argv) { +mk_fake_text_output(char **argv) +{ pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); if (retval == NULL) { @@ -52,19 +56,22 @@ mk_fake_text_output(char **argv) { } static int -setup(void **state) { +setup(void **state) +{ pcmk__register_format(NULL, "text", mk_fake_text_output, NULL); return 0; } static int -teardown(void **state) { +teardown(void **state) +{ pcmk__unregister_formats(); return 0; } static void -standard_usage(void **state) { +standard_usage(void **state) +{ GError *error = NULL; pcmk__output_t *out = NULL; diff --git a/lib/common/tests/output/pcmk__output_free_test.c b/lib/common/tests/output/pcmk__output_free_test.c index 31b97f99c22..8a445a85fed 100644 --- a/lib/common/tests/output/pcmk__output_free_test.c +++ b/lib/common/tests/output/pcmk__output_free_test.c @@ -14,23 +14,27 @@ #include static int -null_message_fn(pcmk__output_t *out, va_list args) { +null_message_fn(pcmk__output_t *out, va_list args) +{ return pcmk_rc_ok; } static bool -fake_text_init(pcmk__output_t *out) { +fake_text_init(pcmk__output_t *out) +{ return true; } static void -fake_text_free_priv(pcmk__output_t *out) { +fake_text_free_priv(pcmk__output_t *out) +{ function_called(); /* This function intentionally left blank */ } static pcmk__output_t * -mk_fake_text_output(char **argv) { +mk_fake_text_output(char **argv) +{ pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); if (retval == NULL) { @@ -48,19 +52,22 @@ mk_fake_text_output(char **argv) { } static int -setup(void **state) { +setup(void **state) +{ pcmk__register_format(NULL, "text", mk_fake_text_output, NULL); return 0; } static int -teardown(void **state) { +teardown(void **state) +{ pcmk__unregister_formats(); return 0; } static void -no_messages(void **state) { +no_messages(void **state) +{ pcmk__output_t *out = NULL; pcmk__output_new(&out, "text", NULL, NULL); @@ -70,7 +77,8 @@ no_messages(void **state) { } static void -messages(void **state) { +messages(void **state) +{ pcmk__output_t *out = NULL; pcmk__output_new(&out, "text", NULL, NULL); diff --git a/lib/common/tests/output/pcmk__output_new_test.c b/lib/common/tests/output/pcmk__output_new_test.c index 9025c4a095d..7ccd033de2b 100644 --- a/lib/common/tests/output/pcmk__output_new_test.c +++ b/lib/common/tests/output/pcmk__output_new_test.c @@ -18,18 +18,21 @@ static bool init_succeeds = true; static bool -fake_text_init(pcmk__output_t *out) { +fake_text_init(pcmk__output_t *out) +{ return init_succeeds; } static void -fake_text_free_priv(pcmk__output_t *out) { +fake_text_free_priv(pcmk__output_t *out) +{ /* This function intentionally left blank */ } /* "text" is the default for pcmk__output_new. */ static pcmk__output_t * -mk_fake_text_output(char **argv) { +mk_fake_text_output(char **argv) +{ pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); if (retval == NULL) { @@ -47,39 +50,48 @@ mk_fake_text_output(char **argv) { } static int -setup(void **state) { +setup(void **state) +{ pcmk__register_format(NULL, "text", mk_fake_text_output, NULL); return 0; } static int -teardown(void **state) { +teardown(void **state) +{ pcmk__unregister_formats(); return 0; } static void -empty_formatters(void **state) { +empty_formatters(void **state) +{ pcmk__output_t *out = NULL; pcmk__assert_asserts(pcmk__output_new(&out, "fake", NULL, NULL)); } static void -invalid_params(void **state) { - /* This must be called with the setup/teardown functions so formatters is not NULL. */ +invalid_params(void **state) +{ + /* This must be called with the setup/teardown functions so that formatters + * is not NULL + */ pcmk__assert_asserts(pcmk__output_new(NULL, "fake", NULL, NULL)); } static void -no_such_format(void **state) { +no_such_format(void **state) +{ pcmk__output_t *out = NULL; - assert_int_equal(pcmk__output_new(&out, "fake", NULL, NULL), pcmk_rc_unknown_format); + assert_int_equal(pcmk__output_new(&out, "fake", NULL, NULL), + pcmk_rc_unknown_format); } static void -create_fails(void **state) { +create_fails(void **state) +{ pcmk__output_t *out = NULL; pcmk__mock_calloc = true; // calloc() will return NULL @@ -92,11 +104,13 @@ create_fails(void **state) { } static void -fopen_fails(void **state) { +fopen_fails(void **state) +{ pcmk__output_t *out = NULL; pcmk__mock_fopen = true; -#if defined(HAVE_FOPEN64) && defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64) && (SIZEOF_LONG < 8) +#if defined(HAVE_FOPEN64) && defined(_FILE_OFFSET_BITS) \ + && (_FILE_OFFSET_BITS == 64) && (SIZEOF_LONG < 8) expect_string(__wrap_fopen64, pathname, "destfile"); expect_string(__wrap_fopen64, mode, "w"); will_return(__wrap_fopen64, EPERM); @@ -112,7 +126,8 @@ fopen_fails(void **state) { } static void -init_fails(void **state) { +init_fails(void **state) +{ pcmk__output_t *out = NULL; init_succeeds = false; @@ -121,7 +136,8 @@ init_fails(void **state) { } static void -everything_succeeds(void **state) { +everything_succeeds(void **state) +{ pcmk__output_t *out = NULL; assert_int_equal(pcmk__output_new(&out, "text", NULL, NULL), pcmk_rc_ok); @@ -135,7 +151,8 @@ everything_succeeds(void **state) { } static void -no_fmt_name_given(void **state) { +no_fmt_name_given(void **state) +{ pcmk__output_t *out = NULL; assert_int_equal(pcmk__output_new(&out, NULL, NULL, NULL), pcmk_rc_ok); diff --git a/lib/common/tests/output/pcmk__register_format_test.c b/lib/common/tests/output/pcmk__register_format_test.c index f32ff99f593..55eedbfcde0 100644 --- a/lib/common/tests/output/pcmk__register_format_test.c +++ b/lib/common/tests/output/pcmk__register_format_test.c @@ -1,5 +1,5 @@ /* - * Copyright 2022 the Pacemaker project contributors + * Copyright 2022-2025 the Pacemaker project contributors * * The version control history for this file may have further details. * @@ -12,42 +12,54 @@ #include static pcmk__output_t * -null_create_fn(char **argv) { +null_create_fn(char **argv) +{ return NULL; } static pcmk__output_t * -null_create_fn_2(char **argv) { +null_create_fn_2(char **argv) +{ return NULL; } static void -invalid_params(void **state) { +invalid_params(void **state) +{ pcmk__assert_asserts(pcmk__register_format(NULL, "fake", NULL, NULL)); pcmk__assert_asserts(pcmk__register_format(NULL, "", null_create_fn, NULL)); - pcmk__assert_asserts(pcmk__register_format(NULL, NULL, null_create_fn, NULL)); + pcmk__assert_asserts(pcmk__register_format(NULL, NULL, null_create_fn, + NULL)); } static void -add_format(void **state) { +add_format(void **state) +{ + int rc = pcmk_rc_ok; GHashTable *formatters = NULL; - gpointer value; + gpointer value = NULL; /* For starters, there should be no formatters defined. */ assert_null(pcmk__output_formatters()); - /* Add a fake formatter and check that it's the only item in the hash table. */ - assert_int_equal(pcmk__register_format(NULL, "fake", null_create_fn, NULL), pcmk_rc_ok); + /* Add a fake formatter and check that it's the only item in the hash + * table + */ + rc = pcmk__register_format(NULL, "fake", null_create_fn, NULL); + assert_int_equal(rc, pcmk_rc_ok); + formatters = pcmk__output_formatters(); assert_int_equal(g_hash_table_size(formatters), 1); value = g_hash_table_lookup(formatters, "fake"); assert_ptr_equal(value, null_create_fn); - /* Add a second fake formatter which should overwrite the first one, leaving - * only one item in the hash table but pointing at the new function. + /* Add a second fake formatter that should overwrite the first one, leaving + * only one item (with the new function) in the hash table */ - assert_int_equal(pcmk__register_format(NULL, "fake", null_create_fn_2, NULL), pcmk_rc_ok); + rc = pcmk__register_format(NULL, "fake", null_create_fn_2, NULL); + assert_int_equal(rc, pcmk_rc_ok); + formatters = pcmk__output_formatters(); assert_int_equal(g_hash_table_size(formatters), 1); diff --git a/lib/common/tests/output/pcmk__register_formats_test.c b/lib/common/tests/output/pcmk__register_formats_test.c index 236e4d99863..0bf0cfd52da 100644 --- a/lib/common/tests/output/pcmk__register_formats_test.c +++ b/lib/common/tests/output/pcmk__register_formats_test.c @@ -1,5 +1,5 @@ /* - * Copyright 2022 the Pacemaker project contributors + * Copyright 2022-2025 the Pacemaker project contributors * * The version control history for this file may have further details. * @@ -12,23 +12,27 @@ #include static pcmk__output_t * -null_create_fn(char **argv) { +null_create_fn(char **argv) +{ return NULL; } static pcmk__output_t * -null_create_fn_2(char **argv) { +null_create_fn_2(char **argv) +{ return NULL; } static void -no_formats(void **state) { +no_formats(void **state) +{ pcmk__register_formats(NULL, NULL); assert_null(pcmk__output_formatters()); } static void -invalid_entries(void **state) { +invalid_entries(void **state) +{ /* Here, we can only test that an empty name won't be added. A NULL name is * the marker for the end of the format table. */ @@ -41,7 +45,8 @@ invalid_entries(void **state) { } static void -valid_entries(void **state) { +valid_entries(void **state) +{ GHashTable *formatters = NULL; pcmk__supported_format_t formats[] = { @@ -61,7 +66,8 @@ valid_entries(void **state) { } static void -duplicate_keys(void **state) { +duplicate_keys(void **state) +{ GHashTable *formatters = NULL; pcmk__supported_format_t formats[] = { @@ -80,7 +86,8 @@ duplicate_keys(void **state) { } static void -duplicate_values(void **state) { +duplicate_values(void **state) +{ GHashTable *formatters = NULL; pcmk__supported_format_t formats[] = { diff --git a/lib/common/tests/output/pcmk__register_message_test.c b/lib/common/tests/output/pcmk__register_message_test.c index bf80b15241a..82eb99a4a62 100644 --- a/lib/common/tests/output/pcmk__register_message_test.c +++ b/lib/common/tests/output/pcmk__register_message_test.c @@ -16,27 +16,32 @@ #include "../../crmcommon_private.h" static int -null_message_fn(pcmk__output_t *out, va_list args) { +null_message_fn(pcmk__output_t *out, va_list args) +{ return pcmk_rc_ok; } static int -null_message_fn_2(pcmk__output_t *out, va_list args) { +null_message_fn_2(pcmk__output_t *out, va_list args) +{ return pcmk_rc_ok; } static bool -fake_text_init(pcmk__output_t *out) { +fake_text_init(pcmk__output_t *out) +{ return true; } static void -fake_text_free_priv(pcmk__output_t *out) { +fake_text_free_priv(pcmk__output_t *out) +{ /* This function intentionally left blank */ } static pcmk__output_t * -mk_fake_text_output(char **argv) { +mk_fake_text_output(char **argv) +{ pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); if (retval == NULL) { @@ -54,19 +59,22 @@ mk_fake_text_output(char **argv) { } static int -setup(void **state) { +setup(void **state) +{ pcmk__register_format(NULL, "text", mk_fake_text_output, NULL); return 0; } static int -teardown(void **state) { +teardown(void **state) +{ pcmk__unregister_formats(); return 0; } static void -null_params(void **state) { +null_params(void **state) +{ pcmk__output_t *out = NULL; pcmk__output_new(&out, "text", NULL, NULL); @@ -80,7 +88,8 @@ null_params(void **state) { } static void -add_message(void **state) { +add_message(void **state) +{ pcmk__output_t *out = NULL; pcmk__bare_output_new(&out, "text", NULL, NULL); @@ -91,14 +100,16 @@ add_message(void **state) { /* Add a fake function and check that it's the only item in the hash table. */ pcmk__register_message(out, "fake", null_message_fn); assert_int_equal(g_hash_table_size(out->messages), 1); - assert_ptr_equal(g_hash_table_lookup(out->messages, "fake"), null_message_fn); + assert_ptr_equal(g_hash_table_lookup(out->messages, "fake"), + null_message_fn); /* Add a second fake function which should overwrite the first one, leaving * only one item in the hash table but pointing at the new function. */ pcmk__register_message(out, "fake", null_message_fn_2); assert_int_equal(g_hash_table_size(out->messages), 1); - assert_ptr_equal(g_hash_table_lookup(out->messages, "fake"), null_message_fn_2); + assert_ptr_equal(g_hash_table_lookup(out->messages, "fake"), + null_message_fn_2); pcmk__output_free(out); } diff --git a/lib/common/tests/output/pcmk__register_messages_test.c b/lib/common/tests/output/pcmk__register_messages_test.c index 8326f892713..ba2e3d5514f 100644 --- a/lib/common/tests/output/pcmk__register_messages_test.c +++ b/lib/common/tests/output/pcmk__register_messages_test.c @@ -16,27 +16,32 @@ #include "../../crmcommon_private.h" static int -null_message_fn(pcmk__output_t *out, va_list args) { +null_message_fn(pcmk__output_t *out, va_list args) +{ return pcmk_rc_ok; } static int -null_message_fn_2(pcmk__output_t *out, va_list args) { +null_message_fn_2(pcmk__output_t *out, va_list args) +{ return pcmk_rc_ok; } static bool -fake_text_init(pcmk__output_t *out) { +fake_text_init(pcmk__output_t *out) +{ return true; } static void -fake_text_free_priv(pcmk__output_t *out) { +fake_text_free_priv(pcmk__output_t *out) +{ /* This function intentionally left blank */ } static pcmk__output_t * -mk_fake_text_output(char **argv) { +mk_fake_text_output(char **argv) +{ pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); if (retval == NULL) { @@ -54,19 +59,22 @@ mk_fake_text_output(char **argv) { } static int -setup(void **state) { +setup(void **state) +{ pcmk__register_format(NULL, "text", mk_fake_text_output, NULL); return 0; } static int -teardown(void **state) { +teardown(void **state) +{ pcmk__unregister_formats(); return 0; } static void -invalid_entries(void **state) { +invalid_entries(void **state) +{ pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { @@ -88,7 +96,8 @@ invalid_entries(void **state) { } static void -valid_entries(void **state) { +valid_entries(void **state) +{ pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { @@ -101,14 +110,17 @@ valid_entries(void **state) { pcmk__register_messages(out, entries); assert_int_equal(g_hash_table_size(out->messages), 2); - assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), null_message_fn); - assert_ptr_equal(g_hash_table_lookup(out->messages, "msg2"), null_message_fn_2); + assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), + null_message_fn); + assert_ptr_equal(g_hash_table_lookup(out->messages, "msg2"), + null_message_fn_2); pcmk__output_free(out); } static void -duplicate_message_ids(void **state) { +duplicate_message_ids(void **state) +{ pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { @@ -121,13 +133,15 @@ duplicate_message_ids(void **state) { pcmk__register_messages(out, entries); assert_int_equal(g_hash_table_size(out->messages), 1); - assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), null_message_fn_2); + assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), + null_message_fn_2); pcmk__output_free(out); } static void -duplicate_functions(void **state) { +duplicate_functions(void **state) +{ pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { @@ -140,14 +154,17 @@ duplicate_functions(void **state) { pcmk__register_messages(out, entries); assert_int_equal(g_hash_table_size(out->messages), 2); - assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), null_message_fn); - assert_ptr_equal(g_hash_table_lookup(out->messages, "msg2"), null_message_fn); + assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), + null_message_fn); + assert_ptr_equal(g_hash_table_lookup(out->messages, "msg2"), + null_message_fn); pcmk__output_free(out); } static void -default_handler(void **state) { +default_handler(void **state) +{ pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { @@ -159,13 +176,15 @@ default_handler(void **state) { pcmk__register_messages(out, entries); assert_int_equal(g_hash_table_size(out->messages), 1); - assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), null_message_fn); + assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), + null_message_fn); pcmk__output_free(out); } static void -override_default_handler(void **state) { +override_default_handler(void **state) +{ pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { @@ -178,7 +197,8 @@ override_default_handler(void **state) { pcmk__register_messages(out, entries); assert_int_equal(g_hash_table_size(out->messages), 1); - assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), null_message_fn_2); + assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), + null_message_fn_2); pcmk__output_free(out); } diff --git a/lib/common/tests/output/pcmk__unregister_formats_test.c b/lib/common/tests/output/pcmk__unregister_formats_test.c index da8d9d6b72b..08818fea59b 100644 --- a/lib/common/tests/output/pcmk__unregister_formats_test.c +++ b/lib/common/tests/output/pcmk__unregister_formats_test.c @@ -1,5 +1,5 @@ /* - * Copyright 2022 the Pacemaker project contributors + * Copyright 2022-2025 the Pacemaker project contributors * * The version control history for this file may have further details. * @@ -12,21 +12,24 @@ #include static pcmk__output_t * -null_create_fn(char **argv) { +null_create_fn(char **argv) +{ return NULL; } static void -invalid_params(void **state) { - /* This is basically just here to make sure that calling pcmk__unregister_formats - * with formatters=NULL doesn't segfault. +invalid_params(void **state) +{ + /* This is basically just here to make sure that calling + * pcmk__unregister_formats with formatters set to NULL doesn't segfault */ pcmk__unregister_formats(); assert_null(pcmk__output_formatters()); } static void -non_null_formatters(void **state) { +non_null_formatters(void **state) +{ pcmk__register_format(NULL, "fake", null_create_fn, NULL); pcmk__unregister_formats(); From 628d72aa1000b2bf8f5ddba25f5b63df6bb275fb Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Thu, 18 Dec 2025 17:30:30 -0800 Subject: [PATCH 2/9] Refactor: libcrmcommon: Reduce duplication for mk_fake_text_output() Several unit tests are doing basically the same thing. This commit pulls out the parts that are common to all of them, using overrides for the ones that are unique to a particular test file. Signed-off-by: Reid Wahl --- include/crm/common/unittest_internal.h | 4 ++- .../tests/output/pcmk__call_message_test.c | 33 +---------------- .../pcmk__output_and_clear_error_test.c | 22 ++---------- .../tests/output/pcmk__output_free_test.c | 14 ++------ .../tests/output/pcmk__output_new_test.c | 14 ++------ .../output/pcmk__register_message_test.c | 33 +---------------- .../output/pcmk__register_messages_test.c | 33 +---------------- lib/common/unittest.c | 35 +++++++++++++++++++ 8 files changed, 47 insertions(+), 141 deletions(-) diff --git a/include/crm/common/unittest_internal.h b/include/crm/common/unittest_internal.h index 02b91253d24..95385359f00 100644 --- a/include/crm/common/unittest_internal.h +++ b/include/crm/common/unittest_internal.h @@ -21,7 +21,7 @@ #include -#include +#include // pcmk__output_t #ifdef __cplusplus extern "C" { @@ -138,6 +138,8 @@ void pcmk__cib_test_cleanup(char *out_path); void pcmk__test_init_logging(const char *name, const char *filename); +pcmk__output_t *pcmk__mk_fake_text_output(char **argv); + /*! * \internal * \brief Assert that a statement aborts through pcmk__assert(). diff --git a/lib/common/tests/output/pcmk__call_message_test.c b/lib/common/tests/output/pcmk__call_message_test.c index d86f150befe..ff280734130 100644 --- a/lib/common/tests/output/pcmk__call_message_test.c +++ b/lib/common/tests/output/pcmk__call_message_test.c @@ -41,41 +41,10 @@ message_fn_2(pcmk__output_t *out, va_list args) return pcmk_rc_ok; } -static bool -fake_text_init(pcmk__output_t *out) -{ - return true; -} - -static void -fake_text_free_priv(pcmk__output_t *out) -{ - /* This function intentionally left blank */ -} - -static pcmk__output_t * -mk_fake_text_output(char **argv) -{ - pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); - - if (retval == NULL) { - return NULL; - } - - retval->fmt_name = "text"; - retval->init = fake_text_init; - retval->free_priv = fake_text_free_priv; - - retval->register_message = pcmk__register_message; - retval->message = pcmk__call_message; - - return retval; -} - static int setup(void **state) { - pcmk__register_format(NULL, "text", mk_fake_text_output, NULL); + pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); return 0; } diff --git a/lib/common/tests/output/pcmk__output_and_clear_error_test.c b/lib/common/tests/output/pcmk__output_and_clear_error_test.c index 8428fd2f815..2a9e5d7db13 100644 --- a/lib/common/tests/output/pcmk__output_and_clear_error_test.c +++ b/lib/common/tests/output/pcmk__output_and_clear_error_test.c @@ -15,18 +15,6 @@ #include -static bool -fake_text_init(pcmk__output_t *out) -{ - return true; -} - -static void -fake_text_free_priv(pcmk__output_t *out) -{ - /* This function intentionally left blank */ -} - G_GNUC_PRINTF(2, 3) static void fake_text_err(pcmk__output_t *out, const char *format, ...) @@ -37,19 +25,13 @@ fake_text_err(pcmk__output_t *out, const char *format, ...) static pcmk__output_t * mk_fake_text_output(char **argv) { - pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); + pcmk__output_t *retval = pcmk__mk_fake_text_output(argv); if (retval == NULL) { return NULL; } - retval->fmt_name = "text"; - retval->init = fake_text_init; - retval->free_priv = fake_text_free_priv; - - retval->register_message = pcmk__register_message; - retval->message = pcmk__call_message; - + // Override retval->err = fake_text_err; return retval; diff --git a/lib/common/tests/output/pcmk__output_free_test.c b/lib/common/tests/output/pcmk__output_free_test.c index 8a445a85fed..f60301d2c98 100644 --- a/lib/common/tests/output/pcmk__output_free_test.c +++ b/lib/common/tests/output/pcmk__output_free_test.c @@ -19,12 +19,6 @@ null_message_fn(pcmk__output_t *out, va_list args) return pcmk_rc_ok; } -static bool -fake_text_init(pcmk__output_t *out) -{ - return true; -} - static void fake_text_free_priv(pcmk__output_t *out) { @@ -35,19 +29,15 @@ fake_text_free_priv(pcmk__output_t *out) static pcmk__output_t * mk_fake_text_output(char **argv) { - pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); + pcmk__output_t *retval = pcmk__mk_fake_text_output(argv); if (retval == NULL) { return NULL; } - retval->fmt_name = "text"; - retval->init = fake_text_init; + // Override retval->free_priv = fake_text_free_priv; - retval->register_message = pcmk__register_message; - retval->message = pcmk__call_message; - return retval; } diff --git a/lib/common/tests/output/pcmk__output_new_test.c b/lib/common/tests/output/pcmk__output_new_test.c index 7ccd033de2b..f55d5f26e45 100644 --- a/lib/common/tests/output/pcmk__output_new_test.c +++ b/lib/common/tests/output/pcmk__output_new_test.c @@ -23,28 +23,18 @@ fake_text_init(pcmk__output_t *out) return init_succeeds; } -static void -fake_text_free_priv(pcmk__output_t *out) -{ - /* This function intentionally left blank */ -} - /* "text" is the default for pcmk__output_new. */ static pcmk__output_t * mk_fake_text_output(char **argv) { - pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); + pcmk__output_t *retval = pcmk__mk_fake_text_output(argv); if (retval == NULL) { return NULL; } - retval->fmt_name = "text"; + // Override retval->init = fake_text_init; - retval->free_priv = fake_text_free_priv; - - retval->register_message = pcmk__register_message; - retval->message = pcmk__call_message; return retval; } diff --git a/lib/common/tests/output/pcmk__register_message_test.c b/lib/common/tests/output/pcmk__register_message_test.c index 82eb99a4a62..8d6424425ef 100644 --- a/lib/common/tests/output/pcmk__register_message_test.c +++ b/lib/common/tests/output/pcmk__register_message_test.c @@ -27,41 +27,10 @@ null_message_fn_2(pcmk__output_t *out, va_list args) return pcmk_rc_ok; } -static bool -fake_text_init(pcmk__output_t *out) -{ - return true; -} - -static void -fake_text_free_priv(pcmk__output_t *out) -{ - /* This function intentionally left blank */ -} - -static pcmk__output_t * -mk_fake_text_output(char **argv) -{ - pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); - - if (retval == NULL) { - return NULL; - } - - retval->fmt_name = "text"; - retval->init = fake_text_init; - retval->free_priv = fake_text_free_priv; - - retval->register_message = pcmk__register_message; - retval->message = pcmk__call_message; - - return retval; -} - static int setup(void **state) { - pcmk__register_format(NULL, "text", mk_fake_text_output, NULL); + pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); return 0; } diff --git a/lib/common/tests/output/pcmk__register_messages_test.c b/lib/common/tests/output/pcmk__register_messages_test.c index ba2e3d5514f..e0694b232e6 100644 --- a/lib/common/tests/output/pcmk__register_messages_test.c +++ b/lib/common/tests/output/pcmk__register_messages_test.c @@ -27,41 +27,10 @@ null_message_fn_2(pcmk__output_t *out, va_list args) return pcmk_rc_ok; } -static bool -fake_text_init(pcmk__output_t *out) -{ - return true; -} - -static void -fake_text_free_priv(pcmk__output_t *out) -{ - /* This function intentionally left blank */ -} - -static pcmk__output_t * -mk_fake_text_output(char **argv) -{ - pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); - - if (retval == NULL) { - return NULL; - } - - retval->fmt_name = "text"; - retval->init = fake_text_init; - retval->free_priv = fake_text_free_priv; - - retval->register_message = pcmk__register_message; - retval->message = pcmk__call_message; - - return retval; -} - static int setup(void **state) { - pcmk__register_format(NULL, "text", mk_fake_text_output, NULL); + pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); return 0; } diff --git a/lib/common/unittest.c b/lib/common/unittest.c index 5f3a448d399..d02b40e73ec 100644 --- a/lib/common/unittest.c +++ b/lib/common/unittest.c @@ -172,4 +172,39 @@ pcmk__test_init_logging(const char *name, const char *filename) } } + +// Output test utilities + +static bool +fake_text_init(pcmk__output_t *out) +{ + return true; +} + +static void +fake_text_free_priv(pcmk__output_t *out) +{ + // Intentionally left blank +} + +pcmk__output_t * +pcmk__mk_fake_text_output(char **argv) +{ + pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t)); + + if (retval == NULL) { + return NULL; + } + + retval->fmt_name = "text"; + + retval->init = fake_text_init; + retval->free_priv = fake_text_free_priv; + + retval->register_message = pcmk__register_message; + retval->message = pcmk__call_message; + + return retval; +} + // LCOV_EXCL_STOP From f5170fa07fb48bda4a556926bcdd84ed2f791d26 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Thu, 18 Dec 2025 17:40:43 -0800 Subject: [PATCH 3/9] Refactor: libcrmcommon: pcmk__output_new test uses common make function Signed-off-by: Reid Wahl --- include/crm/common/unittest_internal.h | 1 + .../tests/output/pcmk__output_new_test.c | 31 +++---------------- lib/common/unittest.c | 10 +++++- 3 files changed, 14 insertions(+), 28 deletions(-) diff --git a/include/crm/common/unittest_internal.h b/include/crm/common/unittest_internal.h index 95385359f00..35c637ecd6e 100644 --- a/include/crm/common/unittest_internal.h +++ b/include/crm/common/unittest_internal.h @@ -139,6 +139,7 @@ void pcmk__cib_test_cleanup(char *out_path); void pcmk__test_init_logging(const char *name, const char *filename); pcmk__output_t *pcmk__mk_fake_text_output(char **argv); +void pcmk__set_fake_text_init_succeeds(bool value); /*! * \internal diff --git a/lib/common/tests/output/pcmk__output_new_test.c b/lib/common/tests/output/pcmk__output_new_test.c index f55d5f26e45..5ff3d393272 100644 --- a/lib/common/tests/output/pcmk__output_new_test.c +++ b/lib/common/tests/output/pcmk__output_new_test.c @@ -15,34 +15,10 @@ #include "mock_private.h" -static bool init_succeeds = true; - -static bool -fake_text_init(pcmk__output_t *out) -{ - return init_succeeds; -} - -/* "text" is the default for pcmk__output_new. */ -static pcmk__output_t * -mk_fake_text_output(char **argv) -{ - pcmk__output_t *retval = pcmk__mk_fake_text_output(argv); - - if (retval == NULL) { - return NULL; - } - - // Override - retval->init = fake_text_init; - - return retval; -} - static int setup(void **state) { - pcmk__register_format(NULL, "text", mk_fake_text_output, NULL); + pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); return 0; } @@ -120,9 +96,9 @@ init_fails(void **state) { pcmk__output_t *out = NULL; - init_succeeds = false; + pcmk__set_fake_text_init_succeeds(false); assert_int_equal(pcmk__output_new(&out, "text", NULL, NULL), ENOMEM); - init_succeeds = true; + pcmk__set_fake_text_init_succeeds(true); } static void @@ -145,6 +121,7 @@ no_fmt_name_given(void **state) { pcmk__output_t *out = NULL; + // "text" is the default format for pcmk__output_new() assert_int_equal(pcmk__output_new(&out, NULL, NULL, NULL), pcmk_rc_ok); assert_string_equal(out->fmt_name, "text"); diff --git a/lib/common/unittest.c b/lib/common/unittest.c index d02b40e73ec..5b8702450f4 100644 --- a/lib/common/unittest.c +++ b/lib/common/unittest.c @@ -18,6 +18,8 @@ // LCOV_EXCL_START +static bool fake_text_init_succeeds = true; + void pcmk__assert_validates(xmlNode *xml) { @@ -178,7 +180,7 @@ pcmk__test_init_logging(const char *name, const char *filename) static bool fake_text_init(pcmk__output_t *out) { - return true; + return fake_text_init_succeeds; } static void @@ -207,4 +209,10 @@ pcmk__mk_fake_text_output(char **argv) return retval; } +void +pcmk__set_fake_text_init_succeeds(bool value) +{ + fake_text_init_succeeds = value; +} + // LCOV_EXCL_STOP From 4ed65064d4a65ee8e2a244bb679659e46080e1a5 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Thu, 18 Dec 2025 17:58:57 -0800 Subject: [PATCH 4/9] Refactor: libcrmcommon: pcmk__output_free test uses common make function Signed-off-by: Reid Wahl --- include/crm/common/unittest_internal.h | 2 ++ .../tests/output/pcmk__output_free_test.c | 36 +++++-------------- lib/common/unittest.c | 17 ++++++++- 3 files changed, 26 insertions(+), 29 deletions(-) diff --git a/include/crm/common/unittest_internal.h b/include/crm/common/unittest_internal.h index 35c637ecd6e..df6a419473a 100644 --- a/include/crm/common/unittest_internal.h +++ b/include/crm/common/unittest_internal.h @@ -140,6 +140,8 @@ void pcmk__test_init_logging(const char *name, const char *filename); pcmk__output_t *pcmk__mk_fake_text_output(char **argv); void pcmk__set_fake_text_init_succeeds(bool value); +void pcmk__set_testing_output_free(bool value); +void pcmk__expect_fake_text_free_priv(void); /*! * \internal diff --git a/lib/common/tests/output/pcmk__output_free_test.c b/lib/common/tests/output/pcmk__output_free_test.c index f60301d2c98..d35916278a1 100644 --- a/lib/common/tests/output/pcmk__output_free_test.c +++ b/lib/common/tests/output/pcmk__output_free_test.c @@ -19,32 +19,11 @@ null_message_fn(pcmk__output_t *out, va_list args) return pcmk_rc_ok; } -static void -fake_text_free_priv(pcmk__output_t *out) -{ - function_called(); - /* This function intentionally left blank */ -} - -static pcmk__output_t * -mk_fake_text_output(char **argv) -{ - pcmk__output_t *retval = pcmk__mk_fake_text_output(argv); - - if (retval == NULL) { - return NULL; - } - - // Override - retval->free_priv = fake_text_free_priv; - - return retval; -} - static int setup(void **state) { - pcmk__register_format(NULL, "text", mk_fake_text_output, NULL); + pcmk__set_testing_output_free(true); + pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); return 0; } @@ -52,6 +31,7 @@ static int teardown(void **state) { pcmk__unregister_formats(); + pcmk__set_testing_output_free(false); return 0; } @@ -62,7 +42,7 @@ no_messages(void **state) pcmk__output_new(&out, "text", NULL, NULL); - expect_function_call(fake_text_free_priv); + pcmk__expect_fake_text_free_priv(); pcmk__output_free(out); } @@ -74,10 +54,10 @@ messages(void **state) pcmk__output_new(&out, "text", NULL, NULL); pcmk__register_message(out, "fake", null_message_fn); - expect_function_call(fake_text_free_priv); + pcmk__expect_fake_text_free_priv(); pcmk__output_free(out); } -PCMK__UNIT_TEST(NULL, NULL, - cmocka_unit_test_setup_teardown(no_messages, setup, teardown), - cmocka_unit_test_setup_teardown(messages, setup, teardown)) +PCMK__UNIT_TEST(setup, teardown, + cmocka_unit_test(no_messages), + cmocka_unit_test(messages)) diff --git a/lib/common/unittest.c b/lib/common/unittest.c index 5b8702450f4..9248854cccd 100644 --- a/lib/common/unittest.c +++ b/lib/common/unittest.c @@ -19,6 +19,7 @@ // LCOV_EXCL_START static bool fake_text_init_succeeds = true; +static bool testing_output_free = false; void pcmk__assert_validates(xmlNode *xml) @@ -186,7 +187,9 @@ fake_text_init(pcmk__output_t *out) static void fake_text_free_priv(pcmk__output_t *out) { - // Intentionally left blank + if (testing_output_free) { + function_called(); + } } pcmk__output_t * @@ -215,4 +218,16 @@ pcmk__set_fake_text_init_succeeds(bool value) fake_text_init_succeeds = value; } +void +pcmk__set_testing_output_free(bool value) +{ + testing_output_free = value; +} + +void +pcmk__expect_fake_text_free_priv(void) +{ + expect_function_call(fake_text_free_priv); +} + // LCOV_EXCL_STOP From 261d3c7800a32dd24feac77f2925d9a830a5bbaf Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Thu, 18 Dec 2025 18:04:36 -0800 Subject: [PATCH 5/9] Refactor: libcrmcommon: Common make func in output_and_clear_error test Signed-off-by: Reid Wahl --- include/crm/common/unittest_internal.h | 2 ++ .../pcmk__output_and_clear_error_test.c | 32 ++++--------------- lib/common/unittest.c | 24 ++++++++++++++ 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/include/crm/common/unittest_internal.h b/include/crm/common/unittest_internal.h index df6a419473a..c36ee33f02b 100644 --- a/include/crm/common/unittest_internal.h +++ b/include/crm/common/unittest_internal.h @@ -141,7 +141,9 @@ void pcmk__test_init_logging(const char *name, const char *filename); pcmk__output_t *pcmk__mk_fake_text_output(char **argv); void pcmk__set_fake_text_init_succeeds(bool value); void pcmk__set_testing_output_free(bool value); +void pcmk__set_testing_output_and_clear_error(bool value); void pcmk__expect_fake_text_free_priv(void); +void pcmk__expect_fake_text_err(void); /*! * \internal diff --git a/lib/common/tests/output/pcmk__output_and_clear_error_test.c b/lib/common/tests/output/pcmk__output_and_clear_error_test.c index 2a9e5d7db13..961dbf32e07 100644 --- a/lib/common/tests/output/pcmk__output_and_clear_error_test.c +++ b/lib/common/tests/output/pcmk__output_and_clear_error_test.c @@ -15,32 +15,11 @@ #include -G_GNUC_PRINTF(2, 3) -static void -fake_text_err(pcmk__output_t *out, const char *format, ...) -{ - function_called(); -} - -static pcmk__output_t * -mk_fake_text_output(char **argv) -{ - pcmk__output_t *retval = pcmk__mk_fake_text_output(argv); - - if (retval == NULL) { - return NULL; - } - - // Override - retval->err = fake_text_err; - - return retval; -} - static int setup(void **state) { - pcmk__register_format(NULL, "text", mk_fake_text_output, NULL); + pcmk__set_testing_output_and_clear_error(true); + pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); return 0; } @@ -48,6 +27,7 @@ static int teardown(void **state) { pcmk__unregister_formats(); + pcmk__set_testing_output_and_clear_error(false); return 0; } @@ -61,12 +41,12 @@ standard_usage(void **state) g_set_error(&error, PCMK__RC_ERROR, pcmk_rc_bad_nvpair, "some error message"); - expect_function_call(fake_text_err); + pcmk__expect_fake_text_err(); pcmk__output_and_clear_error(&error, out); pcmk__output_free(out); assert_null(error); } -PCMK__UNIT_TEST(NULL, NULL, - cmocka_unit_test_setup_teardown(standard_usage, setup, teardown)) +PCMK__UNIT_TEST(setup, teardown, + cmocka_unit_test(standard_usage)) diff --git a/lib/common/unittest.c b/lib/common/unittest.c index 9248854cccd..19196b99c05 100644 --- a/lib/common/unittest.c +++ b/lib/common/unittest.c @@ -20,6 +20,7 @@ static bool fake_text_init_succeeds = true; static bool testing_output_free = false; +static bool testing_output_and_clear_error = false; void pcmk__assert_validates(xmlNode *xml) @@ -192,6 +193,15 @@ fake_text_free_priv(pcmk__output_t *out) } } +G_GNUC_PRINTF(2, 3) +static void +fake_text_err(pcmk__output_t *out, const char *format, ...) +{ + if (testing_output_and_clear_error) { + function_called(); + } +} + pcmk__output_t * pcmk__mk_fake_text_output(char **argv) { @@ -209,6 +219,8 @@ pcmk__mk_fake_text_output(char **argv) retval->register_message = pcmk__register_message; retval->message = pcmk__call_message; + retval->err = fake_text_err; + return retval; } @@ -224,10 +236,22 @@ pcmk__set_testing_output_free(bool value) testing_output_free = value; } +void +pcmk__set_testing_output_and_clear_error(bool value) +{ + testing_output_and_clear_error = value; +} + void pcmk__expect_fake_text_free_priv(void) { expect_function_call(fake_text_free_priv); } +void +pcmk__expect_fake_text_err(void) +{ + expect_function_call(fake_text_err); +} + // LCOV_EXCL_STOP From 1a13d2581a803bdbacd17710e76250000816816e Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Thu, 18 Dec 2025 18:20:49 -0800 Subject: [PATCH 6/9] Refactor: libcrmcommon: Group setup/teardown functions in output tests Signed-off-by: Reid Wahl --- include/crm/common/output_internal.h | 3 +++ lib/common/output.c | 6 ++++++ .../tests/output/pcmk__call_message_test.c | 10 +++++----- .../tests/output/pcmk__output_new_test.c | 19 +++++++++++-------- .../output/pcmk__register_message_test.c | 6 +++--- .../output/pcmk__register_messages_test.c | 14 +++++++------- 6 files changed, 35 insertions(+), 23 deletions(-) diff --git a/include/crm/common/output_internal.h b/include/crm/common/output_internal.h index 4cc7036b4ae..fde8d6ee235 100644 --- a/include/crm/common/output_internal.h +++ b/include/crm/common/output_internal.h @@ -997,6 +997,9 @@ pcmk__output_select_rc(int old_rc, int new_rc) * inspect the internal formatters hash table. */ GHashTable *pcmk__output_formatters(void); + +// Add this one so that we can restore a saved table +void pcmk__set_output_formatters(GHashTable *value); #endif #define PCMK__OUTPUT_SPACER_IF(out_obj, cond) \ diff --git a/lib/common/output.c b/lib/common/output.c index 56130b26278..1d6bba9533b 100644 --- a/lib/common/output.c +++ b/lib/common/output.c @@ -25,6 +25,12 @@ GHashTable * pcmk__output_formatters(void) { return formatters; } + +void +pcmk__set_output_formatters(GHashTable *value) +{ + formatters = value; +} // LCOV_EXCL_STOP #endif diff --git a/lib/common/tests/output/pcmk__call_message_test.c b/lib/common/tests/output/pcmk__call_message_test.c index ff280734130..48db4223f01 100644 --- a/lib/common/tests/output/pcmk__call_message_test.c +++ b/lib/common/tests/output/pcmk__call_message_test.c @@ -132,8 +132,8 @@ default_called(void **state) pcmk__output_free(out); } -PCMK__UNIT_TEST(NULL, NULL, - cmocka_unit_test_setup_teardown(no_such_message, setup, teardown), - cmocka_unit_test_setup_teardown(message_return_value, setup, teardown), - cmocka_unit_test_setup_teardown(wrong_format, setup, teardown), - cmocka_unit_test_setup_teardown(default_called, setup, teardown)) +PCMK__UNIT_TEST(setup, teardown, + cmocka_unit_test(no_such_message), + cmocka_unit_test(message_return_value), + cmocka_unit_test(wrong_format), + cmocka_unit_test(default_called)) diff --git a/lib/common/tests/output/pcmk__output_new_test.c b/lib/common/tests/output/pcmk__output_new_test.c index 5ff3d393272..b3f34e5bcee 100644 --- a/lib/common/tests/output/pcmk__output_new_test.c +++ b/lib/common/tests/output/pcmk__output_new_test.c @@ -32,9 +32,12 @@ teardown(void **state) static void empty_formatters(void **state) { + GHashTable *formatters = pcmk__output_formatters(); pcmk__output_t *out = NULL; + pcmk__set_output_formatters(NULL); pcmk__assert_asserts(pcmk__output_new(&out, "fake", NULL, NULL)); + pcmk__set_output_formatters(formatters); } static void @@ -128,12 +131,12 @@ no_fmt_name_given(void **state) pcmk__output_free(out); } -PCMK__UNIT_TEST(NULL, NULL, +PCMK__UNIT_TEST(setup, teardown, cmocka_unit_test(empty_formatters), - cmocka_unit_test_setup_teardown(invalid_params, setup, teardown), - cmocka_unit_test_setup_teardown(no_such_format, setup, teardown), - cmocka_unit_test_setup_teardown(create_fails, setup, teardown), - cmocka_unit_test_setup_teardown(init_fails, setup, teardown), - cmocka_unit_test_setup_teardown(fopen_fails, setup, teardown), - cmocka_unit_test_setup_teardown(everything_succeeds, setup, teardown), - cmocka_unit_test_setup_teardown(no_fmt_name_given, setup, teardown)) + cmocka_unit_test(invalid_params), + cmocka_unit_test(no_such_format), + cmocka_unit_test(create_fails), + cmocka_unit_test(init_fails), + cmocka_unit_test(fopen_fails), + cmocka_unit_test(everything_succeeds), + cmocka_unit_test(no_fmt_name_given)) diff --git a/lib/common/tests/output/pcmk__register_message_test.c b/lib/common/tests/output/pcmk__register_message_test.c index 8d6424425ef..2fc9f2a6587 100644 --- a/lib/common/tests/output/pcmk__register_message_test.c +++ b/lib/common/tests/output/pcmk__register_message_test.c @@ -83,6 +83,6 @@ add_message(void **state) pcmk__output_free(out); } -PCMK__UNIT_TEST(NULL, NULL, - cmocka_unit_test_setup_teardown(null_params, setup, teardown), - cmocka_unit_test_setup_teardown(add_message, setup, teardown)) +PCMK__UNIT_TEST(setup, teardown, + cmocka_unit_test(null_params), + cmocka_unit_test(add_message)) diff --git a/lib/common/tests/output/pcmk__register_messages_test.c b/lib/common/tests/output/pcmk__register_messages_test.c index e0694b232e6..3ebd0e54d5e 100644 --- a/lib/common/tests/output/pcmk__register_messages_test.c +++ b/lib/common/tests/output/pcmk__register_messages_test.c @@ -172,10 +172,10 @@ override_default_handler(void **state) pcmk__output_free(out); } -PCMK__UNIT_TEST(NULL, NULL, - cmocka_unit_test_setup_teardown(invalid_entries, setup, teardown), - cmocka_unit_test_setup_teardown(valid_entries, setup, teardown), - cmocka_unit_test_setup_teardown(duplicate_message_ids, setup, teardown), - cmocka_unit_test_setup_teardown(duplicate_functions, setup, teardown), - cmocka_unit_test_setup_teardown(default_handler, setup, teardown), - cmocka_unit_test_setup_teardown(override_default_handler, setup, teardown)) +PCMK__UNIT_TEST(setup, teardown, + cmocka_unit_test(invalid_entries), + cmocka_unit_test(valid_entries), + cmocka_unit_test(duplicate_message_ids), + cmocka_unit_test(duplicate_functions), + cmocka_unit_test(default_handler), + cmocka_unit_test(override_default_handler)) From 960a304575170fd1d0ad3b79654d98c7c554287d Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Thu, 18 Dec 2025 18:47:35 -0800 Subject: [PATCH 7/9] Refactor: libcrmcommon: Reduce output test setup/teardown duplication Signed-off-by: Reid Wahl --- include/crm/common/unittest_internal.h | 2 ++ .../tests/output/pcmk__call_message_test.c | 16 +--------------- .../output/pcmk__output_and_clear_error_test.c | 4 ++-- lib/common/tests/output/pcmk__output_free_test.c | 4 ++-- lib/common/tests/output/pcmk__output_new_test.c | 16 +--------------- .../tests/output/pcmk__register_message_test.c | 16 +--------------- .../tests/output/pcmk__register_messages_test.c | 16 +--------------- lib/common/unittest.c | 14 ++++++++++++++ 8 files changed, 24 insertions(+), 64 deletions(-) diff --git a/include/crm/common/unittest_internal.h b/include/crm/common/unittest_internal.h index c36ee33f02b..cbd52e1c579 100644 --- a/include/crm/common/unittest_internal.h +++ b/include/crm/common/unittest_internal.h @@ -139,6 +139,8 @@ void pcmk__cib_test_cleanup(char *out_path); void pcmk__test_init_logging(const char *name, const char *filename); pcmk__output_t *pcmk__mk_fake_text_output(char **argv); +int pcmk__output_test_setup_group(void **state); +int pcmk__output_test_teardown_group(void **state); void pcmk__set_fake_text_init_succeeds(bool value); void pcmk__set_testing_output_free(bool value); void pcmk__set_testing_output_and_clear_error(bool value); diff --git a/lib/common/tests/output/pcmk__call_message_test.c b/lib/common/tests/output/pcmk__call_message_test.c index 48db4223f01..f6db3480d21 100644 --- a/lib/common/tests/output/pcmk__call_message_test.c +++ b/lib/common/tests/output/pcmk__call_message_test.c @@ -41,20 +41,6 @@ message_fn_2(pcmk__output_t *out, va_list args) return pcmk_rc_ok; } -static int -setup(void **state) -{ - pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); - return 0; -} - -static int -teardown(void **state) -{ - pcmk__unregister_formats(); - return 0; -} - static void no_such_message(void **state) { @@ -132,7 +118,7 @@ default_called(void **state) pcmk__output_free(out); } -PCMK__UNIT_TEST(setup, teardown, +PCMK__UNIT_TEST(pcmk__output_test_setup_group, pcmk__output_test_teardown_group, cmocka_unit_test(no_such_message), cmocka_unit_test(message_return_value), cmocka_unit_test(wrong_format), diff --git a/lib/common/tests/output/pcmk__output_and_clear_error_test.c b/lib/common/tests/output/pcmk__output_and_clear_error_test.c index 961dbf32e07..c627e315493 100644 --- a/lib/common/tests/output/pcmk__output_and_clear_error_test.c +++ b/lib/common/tests/output/pcmk__output_and_clear_error_test.c @@ -19,14 +19,14 @@ static int setup(void **state) { pcmk__set_testing_output_and_clear_error(true); - pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); + pcmk__output_test_setup_group(state); return 0; } static int teardown(void **state) { - pcmk__unregister_formats(); + pcmk__output_test_teardown_group(state); pcmk__set_testing_output_and_clear_error(false); return 0; } diff --git a/lib/common/tests/output/pcmk__output_free_test.c b/lib/common/tests/output/pcmk__output_free_test.c index d35916278a1..b202647f0a1 100644 --- a/lib/common/tests/output/pcmk__output_free_test.c +++ b/lib/common/tests/output/pcmk__output_free_test.c @@ -23,14 +23,14 @@ static int setup(void **state) { pcmk__set_testing_output_free(true); - pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); + pcmk__output_test_setup_group(state); return 0; } static int teardown(void **state) { - pcmk__unregister_formats(); + pcmk__output_test_teardown_group(state); pcmk__set_testing_output_free(false); return 0; } diff --git a/lib/common/tests/output/pcmk__output_new_test.c b/lib/common/tests/output/pcmk__output_new_test.c index b3f34e5bcee..d071ff4ea34 100644 --- a/lib/common/tests/output/pcmk__output_new_test.c +++ b/lib/common/tests/output/pcmk__output_new_test.c @@ -15,20 +15,6 @@ #include "mock_private.h" -static int -setup(void **state) -{ - pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); - return 0; -} - -static int -teardown(void **state) -{ - pcmk__unregister_formats(); - return 0; -} - static void empty_formatters(void **state) { @@ -131,7 +117,7 @@ no_fmt_name_given(void **state) pcmk__output_free(out); } -PCMK__UNIT_TEST(setup, teardown, +PCMK__UNIT_TEST(pcmk__output_test_setup_group, pcmk__output_test_teardown_group, cmocka_unit_test(empty_formatters), cmocka_unit_test(invalid_params), cmocka_unit_test(no_such_format), diff --git a/lib/common/tests/output/pcmk__register_message_test.c b/lib/common/tests/output/pcmk__register_message_test.c index 2fc9f2a6587..a1f939b7252 100644 --- a/lib/common/tests/output/pcmk__register_message_test.c +++ b/lib/common/tests/output/pcmk__register_message_test.c @@ -27,20 +27,6 @@ null_message_fn_2(pcmk__output_t *out, va_list args) return pcmk_rc_ok; } -static int -setup(void **state) -{ - pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); - return 0; -} - -static int -teardown(void **state) -{ - pcmk__unregister_formats(); - return 0; -} - static void null_params(void **state) { @@ -83,6 +69,6 @@ add_message(void **state) pcmk__output_free(out); } -PCMK__UNIT_TEST(setup, teardown, +PCMK__UNIT_TEST(pcmk__output_test_setup_group, pcmk__output_test_teardown_group, cmocka_unit_test(null_params), cmocka_unit_test(add_message)) diff --git a/lib/common/tests/output/pcmk__register_messages_test.c b/lib/common/tests/output/pcmk__register_messages_test.c index 3ebd0e54d5e..6919073154e 100644 --- a/lib/common/tests/output/pcmk__register_messages_test.c +++ b/lib/common/tests/output/pcmk__register_messages_test.c @@ -27,20 +27,6 @@ null_message_fn_2(pcmk__output_t *out, va_list args) return pcmk_rc_ok; } -static int -setup(void **state) -{ - pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); - return 0; -} - -static int -teardown(void **state) -{ - pcmk__unregister_formats(); - return 0; -} - static void invalid_entries(void **state) { @@ -172,7 +158,7 @@ override_default_handler(void **state) pcmk__output_free(out); } -PCMK__UNIT_TEST(setup, teardown, +PCMK__UNIT_TEST(pcmk__output_test_setup_group, pcmk__output_test_teardown_group, cmocka_unit_test(invalid_entries), cmocka_unit_test(valid_entries), cmocka_unit_test(duplicate_message_ids), diff --git a/lib/common/unittest.c b/lib/common/unittest.c index 19196b99c05..77ded725011 100644 --- a/lib/common/unittest.c +++ b/lib/common/unittest.c @@ -224,6 +224,20 @@ pcmk__mk_fake_text_output(char **argv) return retval; } +int +pcmk__output_test_setup_group(void **state) +{ + pcmk__register_format(NULL, "text", pcmk__mk_fake_text_output, NULL); + return 0; +} + +int +pcmk__output_test_teardown_group(void **state) +{ + pcmk__unregister_formats(); + return 0; +} + void pcmk__set_fake_text_init_succeeds(bool value) { From 4f85bf3957f0541e52d0faaaf490d8cab4fba739 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Thu, 18 Dec 2025 19:05:17 -0800 Subject: [PATCH 8/9] Refactor: libcrmcommon: Reduce duplication of null output create funcs Signed-off-by: Reid Wahl --- include/crm/common/unittest_internal.h | 2 + .../tests/output/pcmk__register_format_test.c | 27 ++++-------- .../output/pcmk__register_formats_test.c | 41 ++++++++----------- .../output/pcmk__unregister_formats_test.c | 8 +--- lib/common/unittest.c | 12 ++++++ 5 files changed, 41 insertions(+), 49 deletions(-) diff --git a/include/crm/common/unittest_internal.h b/include/crm/common/unittest_internal.h index cbd52e1c579..966d1211aa1 100644 --- a/include/crm/common/unittest_internal.h +++ b/include/crm/common/unittest_internal.h @@ -146,6 +146,8 @@ void pcmk__set_testing_output_free(bool value); void pcmk__set_testing_output_and_clear_error(bool value); void pcmk__expect_fake_text_free_priv(void); void pcmk__expect_fake_text_err(void); +pcmk__output_t *pcmk__output_null_create1(char **argv); +pcmk__output_t *pcmk__output_null_create2(char **argv); /*! * \internal diff --git a/lib/common/tests/output/pcmk__register_format_test.c b/lib/common/tests/output/pcmk__register_format_test.c index 55eedbfcde0..29a1ba3d173 100644 --- a/lib/common/tests/output/pcmk__register_format_test.c +++ b/lib/common/tests/output/pcmk__register_format_test.c @@ -11,24 +11,15 @@ #include -static pcmk__output_t * -null_create_fn(char **argv) -{ - return NULL; -} - -static pcmk__output_t * -null_create_fn_2(char **argv) -{ - return NULL; -} - static void invalid_params(void **state) { pcmk__assert_asserts(pcmk__register_format(NULL, "fake", NULL, NULL)); - pcmk__assert_asserts(pcmk__register_format(NULL, "", null_create_fn, NULL)); - pcmk__assert_asserts(pcmk__register_format(NULL, NULL, null_create_fn, + pcmk__assert_asserts(pcmk__register_format(NULL, "", + pcmk__output_null_create1, + NULL)); + pcmk__assert_asserts(pcmk__register_format(NULL, NULL, + pcmk__output_null_create1, NULL)); } @@ -45,26 +36,26 @@ add_format(void **state) /* Add a fake formatter and check that it's the only item in the hash * table */ - rc = pcmk__register_format(NULL, "fake", null_create_fn, NULL); + rc = pcmk__register_format(NULL, "fake", pcmk__output_null_create1, NULL); assert_int_equal(rc, pcmk_rc_ok); formatters = pcmk__output_formatters(); assert_int_equal(g_hash_table_size(formatters), 1); value = g_hash_table_lookup(formatters, "fake"); - assert_ptr_equal(value, null_create_fn); + assert_ptr_equal(value, pcmk__output_null_create1); /* Add a second fake formatter that should overwrite the first one, leaving * only one item (with the new function) in the hash table */ - rc = pcmk__register_format(NULL, "fake", null_create_fn_2, NULL); + rc = pcmk__register_format(NULL, "fake", pcmk__output_null_create2, NULL); assert_int_equal(rc, pcmk_rc_ok); formatters = pcmk__output_formatters(); assert_int_equal(g_hash_table_size(formatters), 1); value = g_hash_table_lookup(formatters, "fake"); - assert_ptr_equal(value, null_create_fn_2); + assert_ptr_equal(value, pcmk__output_null_create2); pcmk__unregister_formats(); } diff --git a/lib/common/tests/output/pcmk__register_formats_test.c b/lib/common/tests/output/pcmk__register_formats_test.c index 0bf0cfd52da..7743bc12ddf 100644 --- a/lib/common/tests/output/pcmk__register_formats_test.c +++ b/lib/common/tests/output/pcmk__register_formats_test.c @@ -11,18 +11,6 @@ #include -static pcmk__output_t * -null_create_fn(char **argv) -{ - return NULL; -} - -static pcmk__output_t * -null_create_fn_2(char **argv) -{ - return NULL; -} - static void no_formats(void **state) { @@ -37,7 +25,7 @@ invalid_entries(void **state) * the marker for the end of the format table. */ pcmk__supported_format_t formats[] = { - { "", null_create_fn, NULL }, + { "", pcmk__output_null_create1, NULL }, { NULL }, }; @@ -50,8 +38,8 @@ valid_entries(void **state) GHashTable *formatters = NULL; pcmk__supported_format_t formats[] = { - { "fmt1", null_create_fn, NULL }, - { "fmt2", null_create_fn_2, NULL }, + { "fmt1", pcmk__output_null_create1, NULL }, + { "fmt2", pcmk__output_null_create2, NULL }, { NULL }, }; @@ -59,8 +47,10 @@ valid_entries(void **state) formatters = pcmk__output_formatters(); assert_int_equal(g_hash_table_size(formatters), 2); - assert_ptr_equal(g_hash_table_lookup(formatters, "fmt1"), null_create_fn); - assert_ptr_equal(g_hash_table_lookup(formatters, "fmt2"), null_create_fn_2); + assert_ptr_equal(g_hash_table_lookup(formatters, "fmt1"), + pcmk__output_null_create1); + assert_ptr_equal(g_hash_table_lookup(formatters, "fmt2"), + pcmk__output_null_create2); pcmk__unregister_formats(); } @@ -71,8 +61,8 @@ duplicate_keys(void **state) GHashTable *formatters = NULL; pcmk__supported_format_t formats[] = { - { "fmt1", null_create_fn, NULL }, - { "fmt1", null_create_fn_2, NULL }, + { "fmt1", pcmk__output_null_create1, NULL }, + { "fmt1", pcmk__output_null_create2, NULL }, { NULL }, }; @@ -80,7 +70,8 @@ duplicate_keys(void **state) formatters = pcmk__output_formatters(); assert_int_equal(g_hash_table_size(formatters), 1); - assert_ptr_equal(g_hash_table_lookup(formatters, "fmt1"), null_create_fn_2); + assert_ptr_equal(g_hash_table_lookup(formatters, "fmt1"), + pcmk__output_null_create2); pcmk__unregister_formats(); } @@ -91,8 +82,8 @@ duplicate_values(void **state) GHashTable *formatters = NULL; pcmk__supported_format_t formats[] = { - { "fmt1", null_create_fn, NULL }, - { "fmt2", null_create_fn, NULL }, + { "fmt1", pcmk__output_null_create1, NULL }, + { "fmt2", pcmk__output_null_create1, NULL }, { NULL }, }; @@ -100,8 +91,10 @@ duplicate_values(void **state) formatters = pcmk__output_formatters(); assert_int_equal(g_hash_table_size(formatters), 2); - assert_ptr_equal(g_hash_table_lookup(formatters, "fmt1"), null_create_fn); - assert_ptr_equal(g_hash_table_lookup(formatters, "fmt2"), null_create_fn); + assert_ptr_equal(g_hash_table_lookup(formatters, "fmt1"), + pcmk__output_null_create1); + assert_ptr_equal(g_hash_table_lookup(formatters, "fmt2"), + pcmk__output_null_create1); pcmk__unregister_formats(); } diff --git a/lib/common/tests/output/pcmk__unregister_formats_test.c b/lib/common/tests/output/pcmk__unregister_formats_test.c index 08818fea59b..6c979cb1d40 100644 --- a/lib/common/tests/output/pcmk__unregister_formats_test.c +++ b/lib/common/tests/output/pcmk__unregister_formats_test.c @@ -11,12 +11,6 @@ #include -static pcmk__output_t * -null_create_fn(char **argv) -{ - return NULL; -} - static void invalid_params(void **state) { @@ -30,7 +24,7 @@ invalid_params(void **state) static void non_null_formatters(void **state) { - pcmk__register_format(NULL, "fake", null_create_fn, NULL); + pcmk__register_format(NULL, "fake", pcmk__output_null_create1, NULL); pcmk__unregister_formats(); assert_null(pcmk__output_formatters()); diff --git a/lib/common/unittest.c b/lib/common/unittest.c index 77ded725011..7d2daffd383 100644 --- a/lib/common/unittest.c +++ b/lib/common/unittest.c @@ -268,4 +268,16 @@ pcmk__expect_fake_text_err(void) expect_function_call(fake_text_err); } +pcmk__output_t * +pcmk__output_null_create1(char **argv) +{ + return NULL; +} + +pcmk__output_t * +pcmk__output_null_create2(char **argv) +{ + return NULL; +} + // LCOV_EXCL_STOP From eb148414b02cab566d034dd8933b0a654400a9a4 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Thu, 18 Dec 2025 19:58:55 -0800 Subject: [PATCH 9/9] Refactor: libcrmcommon: Reduce duplication of null output message funcs Signed-off-by: Reid Wahl --- include/crm/common/unittest_internal.h | 2 + .../tests/output/pcmk__output_free_test.c | 8 +--- .../output/pcmk__register_message_test.c | 29 ++++------- .../output/pcmk__register_messages_test.c | 48 +++++++------------ lib/common/unittest.c | 12 +++++ 5 files changed, 43 insertions(+), 56 deletions(-) diff --git a/include/crm/common/unittest_internal.h b/include/crm/common/unittest_internal.h index 966d1211aa1..d65f83e1f8f 100644 --- a/include/crm/common/unittest_internal.h +++ b/include/crm/common/unittest_internal.h @@ -148,6 +148,8 @@ void pcmk__expect_fake_text_free_priv(void); void pcmk__expect_fake_text_err(void); pcmk__output_t *pcmk__output_null_create1(char **argv); pcmk__output_t *pcmk__output_null_create2(char **argv); +int pcmk__output_message_dummy1(pcmk__output_t *out, va_list args); +int pcmk__output_message_dummy2(pcmk__output_t *out, va_list args); /*! * \internal diff --git a/lib/common/tests/output/pcmk__output_free_test.c b/lib/common/tests/output/pcmk__output_free_test.c index b202647f0a1..e8555cc7126 100644 --- a/lib/common/tests/output/pcmk__output_free_test.c +++ b/lib/common/tests/output/pcmk__output_free_test.c @@ -13,12 +13,6 @@ #include -static int -null_message_fn(pcmk__output_t *out, va_list args) -{ - return pcmk_rc_ok; -} - static int setup(void **state) { @@ -52,7 +46,7 @@ messages(void **state) pcmk__output_t *out = NULL; pcmk__output_new(&out, "text", NULL, NULL); - pcmk__register_message(out, "fake", null_message_fn); + pcmk__register_message(out, "fake", pcmk__output_message_dummy1); pcmk__expect_fake_text_free_priv(); pcmk__output_free(out); diff --git a/lib/common/tests/output/pcmk__register_message_test.c b/lib/common/tests/output/pcmk__register_message_test.c index a1f939b7252..381063ec6ab 100644 --- a/lib/common/tests/output/pcmk__register_message_test.c +++ b/lib/common/tests/output/pcmk__register_message_test.c @@ -15,18 +15,6 @@ #include "../../crmcommon_private.h" -static int -null_message_fn(pcmk__output_t *out, va_list args) -{ - return pcmk_rc_ok; -} - -static int -null_message_fn_2(pcmk__output_t *out, va_list args) -{ - return pcmk_rc_ok; -} - static void null_params(void **state) { @@ -34,9 +22,12 @@ null_params(void **state) pcmk__output_new(&out, "text", NULL, NULL); - pcmk__assert_asserts(pcmk__register_message(NULL, "fake", null_message_fn)); - pcmk__assert_asserts(pcmk__register_message(out, NULL, null_message_fn)); - pcmk__assert_asserts(pcmk__register_message(out, "", null_message_fn)); + pcmk__assert_asserts(pcmk__register_message(NULL, "fake", + pcmk__output_message_dummy1)); + pcmk__assert_asserts(pcmk__register_message(out, NULL, + pcmk__output_message_dummy1)); + pcmk__assert_asserts(pcmk__register_message(out, "", + pcmk__output_message_dummy1)); pcmk__assert_asserts(pcmk__register_message(out, "fake", NULL)); pcmk__output_free(out); @@ -53,18 +44,18 @@ add_message(void **state) assert_int_equal(g_hash_table_size(out->messages), 0); /* Add a fake function and check that it's the only item in the hash table. */ - pcmk__register_message(out, "fake", null_message_fn); + pcmk__register_message(out, "fake", pcmk__output_message_dummy1); assert_int_equal(g_hash_table_size(out->messages), 1); assert_ptr_equal(g_hash_table_lookup(out->messages, "fake"), - null_message_fn); + pcmk__output_message_dummy1); /* Add a second fake function which should overwrite the first one, leaving * only one item in the hash table but pointing at the new function. */ - pcmk__register_message(out, "fake", null_message_fn_2); + pcmk__register_message(out, "fake", pcmk__output_message_dummy2); assert_int_equal(g_hash_table_size(out->messages), 1); assert_ptr_equal(g_hash_table_lookup(out->messages, "fake"), - null_message_fn_2); + pcmk__output_message_dummy2); pcmk__output_free(out); } diff --git a/lib/common/tests/output/pcmk__register_messages_test.c b/lib/common/tests/output/pcmk__register_messages_test.c index 6919073154e..ef08f52319f 100644 --- a/lib/common/tests/output/pcmk__register_messages_test.c +++ b/lib/common/tests/output/pcmk__register_messages_test.c @@ -15,18 +15,6 @@ #include "../../crmcommon_private.h" -static int -null_message_fn(pcmk__output_t *out, va_list args) -{ - return pcmk_rc_ok; -} - -static int -null_message_fn_2(pcmk__output_t *out, va_list args) -{ - return pcmk_rc_ok; -} - static void invalid_entries(void **state) { @@ -36,8 +24,8 @@ invalid_entries(void **state) /* We can't test a NULL message_id here because that's the marker for * the end of the table. */ - { "", "", null_message_fn }, - { "", NULL, null_message_fn }, + { "", "", pcmk__output_message_dummy1 }, + { "", NULL, pcmk__output_message_dummy1 }, { "", "text", NULL }, { NULL }, }; @@ -56,8 +44,8 @@ valid_entries(void **state) pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { - { "msg1", "text", null_message_fn }, - { "msg2", "text", null_message_fn_2 }, + { "msg1", "text", pcmk__output_message_dummy1 }, + { "msg2", "text", pcmk__output_message_dummy2 }, { NULL }, }; @@ -66,9 +54,9 @@ valid_entries(void **state) pcmk__register_messages(out, entries); assert_int_equal(g_hash_table_size(out->messages), 2); assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), - null_message_fn); + pcmk__output_message_dummy1); assert_ptr_equal(g_hash_table_lookup(out->messages, "msg2"), - null_message_fn_2); + pcmk__output_message_dummy2); pcmk__output_free(out); } @@ -79,8 +67,8 @@ duplicate_message_ids(void **state) pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { - { "msg1", "text", null_message_fn }, - { "msg1", "text", null_message_fn_2 }, + { "msg1", "text", pcmk__output_message_dummy1 }, + { "msg1", "text", pcmk__output_message_dummy2 }, { NULL }, }; @@ -89,7 +77,7 @@ duplicate_message_ids(void **state) pcmk__register_messages(out, entries); assert_int_equal(g_hash_table_size(out->messages), 1); assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), - null_message_fn_2); + pcmk__output_message_dummy2); pcmk__output_free(out); } @@ -100,8 +88,8 @@ duplicate_functions(void **state) pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { - { "msg1", "text", null_message_fn }, - { "msg2", "text", null_message_fn }, + { "msg1", "text", pcmk__output_message_dummy1 }, + { "msg2", "text", pcmk__output_message_dummy1 }, { NULL }, }; @@ -110,9 +98,9 @@ duplicate_functions(void **state) pcmk__register_messages(out, entries); assert_int_equal(g_hash_table_size(out->messages), 2); assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), - null_message_fn); + pcmk__output_message_dummy1); assert_ptr_equal(g_hash_table_lookup(out->messages, "msg2"), - null_message_fn); + pcmk__output_message_dummy1); pcmk__output_free(out); } @@ -123,7 +111,7 @@ default_handler(void **state) pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { - { "msg1", "default", null_message_fn }, + { "msg1", "default", pcmk__output_message_dummy1 }, { NULL }, }; @@ -132,7 +120,7 @@ default_handler(void **state) pcmk__register_messages(out, entries); assert_int_equal(g_hash_table_size(out->messages), 1); assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), - null_message_fn); + pcmk__output_message_dummy1); pcmk__output_free(out); } @@ -143,8 +131,8 @@ override_default_handler(void **state) pcmk__output_t *out = NULL; pcmk__message_entry_t entries[] = { - { "msg1", "default", null_message_fn }, - { "msg1", "text", null_message_fn_2 }, + { "msg1", "default", pcmk__output_message_dummy1 }, + { "msg1", "text", pcmk__output_message_dummy2 }, { NULL }, }; @@ -153,7 +141,7 @@ override_default_handler(void **state) pcmk__register_messages(out, entries); assert_int_equal(g_hash_table_size(out->messages), 1); assert_ptr_equal(g_hash_table_lookup(out->messages, "msg1"), - null_message_fn_2); + pcmk__output_message_dummy2); pcmk__output_free(out); } diff --git a/lib/common/unittest.c b/lib/common/unittest.c index 7d2daffd383..66fa748af0c 100644 --- a/lib/common/unittest.c +++ b/lib/common/unittest.c @@ -280,4 +280,16 @@ pcmk__output_null_create2(char **argv) return NULL; } +int +pcmk__output_message_dummy1(pcmk__output_t *out, va_list args) +{ + return pcmk_rc_ok; +} + +int +pcmk__output_message_dummy2(pcmk__output_t *out, va_list args) +{ + return pcmk_rc_ok; +} + // LCOV_EXCL_STOP