Skip to content

Commit 1cd77bd

Browse files
authored
Merge pull request #4046 from nrwahl2/nrwahl2-unit_test2
Reduce duplication in unit tests
2 parents 15832c8 + eb14841 commit 1cd77bd

13 files changed

Lines changed: 357 additions & 413 deletions

include/crm/common/output_internal.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -997,6 +997,9 @@ pcmk__output_select_rc(int old_rc, int new_rc)
997997
* inspect the internal formatters hash table.
998998
*/
999999
GHashTable *pcmk__output_formatters(void);
1000+
1001+
// Add this one so that we can restore a saved table
1002+
void pcmk__set_output_formatters(GHashTable *value);
10001003
#endif
10011004

10021005
#define PCMK__OUTPUT_SPACER_IF(out_obj, cond) \

include/crm/common/unittest_internal.h

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
#include <cmocka.h>
2323

24-
#include <crm/common/xml.h>
24+
#include <crm/common/internal.h> // pcmk__output_t
2525

2626
#ifdef __cplusplus
2727
extern "C" {
@@ -138,6 +138,19 @@ void pcmk__cib_test_cleanup(char *out_path);
138138

139139
void pcmk__test_init_logging(const char *name, const char *filename);
140140

141+
pcmk__output_t *pcmk__mk_fake_text_output(char **argv);
142+
int pcmk__output_test_setup_group(void **state);
143+
int pcmk__output_test_teardown_group(void **state);
144+
void pcmk__set_fake_text_init_succeeds(bool value);
145+
void pcmk__set_testing_output_free(bool value);
146+
void pcmk__set_testing_output_and_clear_error(bool value);
147+
void pcmk__expect_fake_text_free_priv(void);
148+
void pcmk__expect_fake_text_err(void);
149+
pcmk__output_t *pcmk__output_null_create1(char **argv);
150+
pcmk__output_t *pcmk__output_null_create2(char **argv);
151+
int pcmk__output_message_dummy1(pcmk__output_t *out, va_list args);
152+
int pcmk__output_message_dummy2(pcmk__output_t *out, va_list args);
153+
141154
/*!
142155
* \internal
143156
* \brief Assert that a statement aborts through pcmk__assert().

lib/common/output.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ GHashTable *
2525
pcmk__output_formatters(void) {
2626
return formatters;
2727
}
28+
29+
void
30+
pcmk__set_output_formatters(GHashTable *value)
31+
{
32+
formatters = value;
33+
}
2834
// LCOV_EXCL_STOP
2935
#endif
3036

lib/common/tests/output/pcmk__call_message_test.c

Lines changed: 21 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -14,71 +14,36 @@
1414
#include <crm/common/unittest_internal.h>
1515

1616
static int
17-
default_message_fn(pcmk__output_t *out, va_list args) {
17+
default_message_fn(pcmk__output_t *out, va_list args)
18+
{
1819
function_called();
1920
return pcmk_rc_ok;
2021
}
2122

2223
static int
23-
failed_message_fn(pcmk__output_t *out, va_list args) {
24+
failed_message_fn(pcmk__output_t *out, va_list args)
25+
{
2426
function_called();
2527
return pcmk_rc_no_output;
2628
}
2729

2830
static int
29-
message_fn_1(pcmk__output_t *out, va_list args) {
31+
message_fn_1(pcmk__output_t *out, va_list args)
32+
{
3033
function_called();
3134
return pcmk_rc_ok;
3235
}
3336

3437
static int
35-
message_fn_2(pcmk__output_t *out, va_list args) {
38+
message_fn_2(pcmk__output_t *out, va_list args)
39+
{
3640
function_called();
3741
return pcmk_rc_ok;
3842
}
3943

40-
static bool
41-
fake_text_init(pcmk__output_t *out) {
42-
return true;
43-
}
44-
45-
static void
46-
fake_text_free_priv(pcmk__output_t *out) {
47-
/* This function intentionally left blank */
48-
}
49-
50-
static pcmk__output_t *
51-
mk_fake_text_output(char **argv) {
52-
pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t));
53-
54-
if (retval == NULL) {
55-
return NULL;
56-
}
57-
58-
retval->fmt_name = "text";
59-
retval->init = fake_text_init;
60-
retval->free_priv = fake_text_free_priv;
61-
62-
retval->register_message = pcmk__register_message;
63-
retval->message = pcmk__call_message;
64-
65-
return retval;
66-
}
67-
68-
static int
69-
setup(void **state) {
70-
pcmk__register_format(NULL, "text", mk_fake_text_output, NULL);
71-
return 0;
72-
}
73-
74-
static int
75-
teardown(void **state) {
76-
pcmk__unregister_formats();
77-
return 0;
78-
}
79-
8044
static void
81-
no_such_message(void **state) {
45+
no_such_message(void **state)
46+
{
8247
pcmk__output_t *out = NULL;
8348

8449
pcmk__output_new(&out, "text", NULL, NULL);
@@ -91,7 +56,8 @@ no_such_message(void **state) {
9156
}
9257

9358
static void
94-
message_return_value(void **state) {
59+
message_return_value(void **state)
60+
{
9561
pcmk__output_t *out = NULL;
9662

9763
pcmk__message_entry_t entries[] = {
@@ -115,7 +81,8 @@ message_return_value(void **state) {
11581
}
11682

11783
static void
118-
wrong_format(void **state) {
84+
wrong_format(void **state)
85+
{
11986
pcmk__output_t *out = NULL;
12087

12188
pcmk__message_entry_t entries[] = {
@@ -132,7 +99,8 @@ wrong_format(void **state) {
13299
}
133100

134101
static void
135-
default_called(void **state) {
102+
default_called(void **state)
103+
{
136104
pcmk__output_t *out = NULL;
137105

138106
pcmk__message_entry_t entries[] = {
@@ -150,8 +118,8 @@ default_called(void **state) {
150118
pcmk__output_free(out);
151119
}
152120

153-
PCMK__UNIT_TEST(NULL, NULL,
154-
cmocka_unit_test_setup_teardown(no_such_message, setup, teardown),
155-
cmocka_unit_test_setup_teardown(message_return_value, setup, teardown),
156-
cmocka_unit_test_setup_teardown(wrong_format, setup, teardown),
157-
cmocka_unit_test_setup_teardown(default_called, setup, teardown))
121+
PCMK__UNIT_TEST(pcmk__output_test_setup_group, pcmk__output_test_teardown_group,
122+
cmocka_unit_test(no_such_message),
123+
cmocka_unit_test(message_return_value),
124+
cmocka_unit_test(wrong_format),
125+
cmocka_unit_test(default_called))

lib/common/tests/output/pcmk__output_and_clear_error_test.c

Lines changed: 13 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -15,69 +15,38 @@
1515

1616
#include <glib.h>
1717

18-
static bool
19-
fake_text_init(pcmk__output_t *out) {
20-
return true;
21-
}
22-
23-
static void
24-
fake_text_free_priv(pcmk__output_t *out) {
25-
/* This function intentionally left blank */
26-
}
27-
28-
G_GNUC_PRINTF(2, 3)
29-
static void
30-
fake_text_err(pcmk__output_t *out, const char *format, ...) {
31-
function_called();
32-
}
33-
34-
static pcmk__output_t *
35-
mk_fake_text_output(char **argv) {
36-
pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t));
37-
38-
if (retval == NULL) {
39-
return NULL;
40-
}
41-
42-
retval->fmt_name = "text";
43-
retval->init = fake_text_init;
44-
retval->free_priv = fake_text_free_priv;
45-
46-
retval->register_message = pcmk__register_message;
47-
retval->message = pcmk__call_message;
48-
49-
retval->err = fake_text_err;
50-
51-
return retval;
52-
}
53-
5418
static int
55-
setup(void **state) {
56-
pcmk__register_format(NULL, "text", mk_fake_text_output, NULL);
19+
setup(void **state)
20+
{
21+
pcmk__set_testing_output_and_clear_error(true);
22+
pcmk__output_test_setup_group(state);
5723
return 0;
5824
}
5925

6026
static int
61-
teardown(void **state) {
62-
pcmk__unregister_formats();
27+
teardown(void **state)
28+
{
29+
pcmk__output_test_teardown_group(state);
30+
pcmk__set_testing_output_and_clear_error(false);
6331
return 0;
6432
}
6533

6634
static void
67-
standard_usage(void **state) {
35+
standard_usage(void **state)
36+
{
6837
GError *error = NULL;
6938
pcmk__output_t *out = NULL;
7039

7140
pcmk__output_new(&out, "text", NULL, NULL);
7241
g_set_error(&error, PCMK__RC_ERROR, pcmk_rc_bad_nvpair,
7342
"some error message");
7443

75-
expect_function_call(fake_text_err);
44+
pcmk__expect_fake_text_err();
7645
pcmk__output_and_clear_error(&error, out);
7746

7847
pcmk__output_free(out);
7948
assert_null(error);
8049
}
8150

82-
PCMK__UNIT_TEST(NULL, NULL,
83-
cmocka_unit_test_setup_teardown(standard_usage, setup, teardown))
51+
PCMK__UNIT_TEST(setup, teardown,
52+
cmocka_unit_test(standard_usage))

lib/common/tests/output/pcmk__output_free_test.c

Lines changed: 18 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -14,72 +14,44 @@
1414
#include <crm/common/unittest_internal.h>
1515

1616
static int
17-
null_message_fn(pcmk__output_t *out, va_list args) {
18-
return pcmk_rc_ok;
19-
}
20-
21-
static bool
22-
fake_text_init(pcmk__output_t *out) {
23-
return true;
24-
}
25-
26-
static void
27-
fake_text_free_priv(pcmk__output_t *out) {
28-
function_called();
29-
/* This function intentionally left blank */
30-
}
31-
32-
static pcmk__output_t *
33-
mk_fake_text_output(char **argv) {
34-
pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t));
35-
36-
if (retval == NULL) {
37-
return NULL;
38-
}
39-
40-
retval->fmt_name = "text";
41-
retval->init = fake_text_init;
42-
retval->free_priv = fake_text_free_priv;
43-
44-
retval->register_message = pcmk__register_message;
45-
retval->message = pcmk__call_message;
46-
47-
return retval;
48-
}
49-
50-
static int
51-
setup(void **state) {
52-
pcmk__register_format(NULL, "text", mk_fake_text_output, NULL);
17+
setup(void **state)
18+
{
19+
pcmk__set_testing_output_free(true);
20+
pcmk__output_test_setup_group(state);
5321
return 0;
5422
}
5523

5624
static int
57-
teardown(void **state) {
58-
pcmk__unregister_formats();
25+
teardown(void **state)
26+
{
27+
pcmk__output_test_teardown_group(state);
28+
pcmk__set_testing_output_free(false);
5929
return 0;
6030
}
6131

6232
static void
63-
no_messages(void **state) {
33+
no_messages(void **state)
34+
{
6435
pcmk__output_t *out = NULL;
6536

6637
pcmk__output_new(&out, "text", NULL, NULL);
6738

68-
expect_function_call(fake_text_free_priv);
39+
pcmk__expect_fake_text_free_priv();
6940
pcmk__output_free(out);
7041
}
7142

7243
static void
73-
messages(void **state) {
44+
messages(void **state)
45+
{
7446
pcmk__output_t *out = NULL;
7547

7648
pcmk__output_new(&out, "text", NULL, NULL);
77-
pcmk__register_message(out, "fake", null_message_fn);
49+
pcmk__register_message(out, "fake", pcmk__output_message_dummy1);
7850

79-
expect_function_call(fake_text_free_priv);
51+
pcmk__expect_fake_text_free_priv();
8052
pcmk__output_free(out);
8153
}
8254

83-
PCMK__UNIT_TEST(NULL, NULL,
84-
cmocka_unit_test_setup_teardown(no_messages, setup, teardown),
85-
cmocka_unit_test_setup_teardown(messages, setup, teardown))
55+
PCMK__UNIT_TEST(setup, teardown,
56+
cmocka_unit_test(no_messages),
57+
cmocka_unit_test(messages))

0 commit comments

Comments
 (0)