pacemaker 3.0.1-16e74fc4da
Scalable High-Availability cluster resource manager
Loading...
Searching...
No Matches
pcmk__call_message_test.c
Go to the documentation of this file.
1/*
2 * Copyright 2022 the Pacemaker project contributors
3 *
4 * The version control history for this file may have further details.
5 *
6 * This source code is licensed under the GNU General Public License version 2
7 * or later (GPLv2+) WITHOUT ANY WARRANTY.
8 */
9
10#include <crm_internal.h>
11
14
15static int
16default_message_fn(pcmk__output_t *out, va_list args) {
17 function_called();
18 return pcmk_rc_ok;
19}
20
21static int
22failed_message_fn(pcmk__output_t *out, va_list args) {
23 function_called();
24 return pcmk_rc_no_output;
25}
26
27static int
28message_fn_1(pcmk__output_t *out, va_list args) {
29 function_called();
30 return pcmk_rc_ok;
31}
32
33static int
34message_fn_2(pcmk__output_t *out, va_list args) {
35 function_called();
36 return pcmk_rc_ok;
37}
38
39static bool
40fake_text_init(pcmk__output_t *out) {
41 return true;
42}
43
44static void
45fake_text_free_priv(pcmk__output_t *out) {
46 /* This function intentionally left blank */
47}
48
49static pcmk__output_t *
50mk_fake_text_output(char **argv) {
51 pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t));
52
53 if (retval == NULL) {
54 return NULL;
55 }
56
57 retval->fmt_name = "text";
58 retval->init = fake_text_init;
59 retval->free_priv = fake_text_free_priv;
60
63
64 return retval;
65}
66
67static int
68setup(void **state) {
69 pcmk__register_format(NULL, "text", mk_fake_text_output, NULL);
70 return 0;
71}
72
73static int
74teardown(void **state) {
76 return 0;
77}
78
79static void
80no_such_message(void **state) {
81 pcmk__output_t *out = NULL;
82
83 pcmk__output_new(&out, "text", NULL, NULL);
84
85 assert_int_equal(out->message(out, "fake"), EINVAL);
86 pcmk__assert_asserts(out->message(out, ""));
87 pcmk__assert_asserts(out->message(out, NULL));
88
90}
91
92static void
93message_return_value(void **state) {
94 pcmk__output_t *out = NULL;
95
96 pcmk__message_entry_t entries[] = {
97 { "msg1", "text", message_fn_1 },
98 { "msg2", "text", message_fn_2 },
99 { "fail", "text", failed_message_fn },
100 { NULL },
101 };
102
103 pcmk__output_new(&out, "text", NULL, NULL);
104 pcmk__register_messages(out, entries);
105
106 expect_function_call(message_fn_1);
107 assert_int_equal(out->message(out, "msg1"), pcmk_rc_ok);
108 expect_function_call(message_fn_2);
109 assert_int_equal(out->message(out, "msg2"), pcmk_rc_ok);
110 expect_function_call(failed_message_fn);
111 assert_int_equal(out->message(out, "fail"), pcmk_rc_no_output);
112
114}
115
116static void
117wrong_format(void **state) {
118 pcmk__output_t *out = NULL;
119
120 pcmk__message_entry_t entries[] = {
121 { "msg1", "xml", message_fn_1 },
122 { NULL },
123 };
124
125 pcmk__output_new(&out, "text", NULL, NULL);
126 pcmk__register_messages(out, entries);
127
128 assert_int_equal(out->message(out, "msg1"), EINVAL);
129
131}
132
133static void
134default_called(void **state) {
135 pcmk__output_t *out = NULL;
136
137 pcmk__message_entry_t entries[] = {
138 { "msg1", "default", default_message_fn },
139 { "msg1", "xml", message_fn_1 },
140 { NULL },
141 };
142
143 pcmk__output_new(&out, "text", NULL, NULL);
144 pcmk__register_messages(out, entries);
145
146 expect_function_call(default_message_fn);
147 assert_int_equal(out->message(out, "msg1"), pcmk_rc_ok);
148
150}
151
152PCMK__UNIT_TEST(NULL, NULL,
153 cmocka_unit_test_setup_teardown(no_such_message, setup, teardown),
154 cmocka_unit_test_setup_teardown(message_return_value, setup, teardown),
155 cmocka_unit_test_setup_teardown(wrong_format, setup, teardown),
156 cmocka_unit_test_setup_teardown(default_called, setup, teardown))
Formatted output for pacemaker tools.
void pcmk__register_messages(pcmk__output_t *out, const pcmk__message_entry_t *table)
Definition output.c:206
int pcmk__register_format(GOptionGroup *group, const char *name, pcmk__output_factory_t create, const GOptionEntry *options)
Definition output.c:127
void pcmk__output_free(pcmk__output_t *out)
Definition output.c:30
int pcmk__output_new(pcmk__output_t **out, const char *fmt_name, const char *filename, char **argv)
Definition output.c:113
int pcmk__call_message(pcmk__output_t *out, const char *message_id,...)
Definition output.c:176
void pcmk__register_message(pcmk__output_t *out, const char *message_id, pcmk__message_fn_t fn)
Definition output.c:198
void pcmk__unregister_formats(void)
Definition output.c:168
@ pcmk_rc_no_output
Definition results.h:128
@ pcmk_rc_ok
Definition results.h:159
This structure contains everything that makes up a single output formatter.
int(* message)(pcmk__output_t *out, const char *message_id,...)
const char * fmt_name
The name of this output formatter.
void(* register_message)(pcmk__output_t *out, const char *message_id, pcmk__message_fn_t fn)
bool(* init)(pcmk__output_t *out)
void(* free_priv)(pcmk__output_t *out)
#define pcmk__assert_asserts(stmt)
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)