pacemaker  3.0.0-d8340737c4
Scalable High-Availability cluster resource manager
pcmk_xe_mask_probe_failure_test.c
Go to the documentation of this file.
1 /*
2  * Copyright 2021-2024 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 
12 #include <crm/common/probes.h>
14 
15 static void
16 op_is_not_probe_test(void **state) {
17  xmlNode *node = NULL;
18 
19  /* Not worth testing this thoroughly since it's just a duplicate of whether
20  * pcmk_op_is_probe works or not.
21  */
22 
25  "=\"" PCMK_ACTION_START "\" "
26  PCMK_META_INTERVAL "=\"0\"/>");
27  assert_false(pcmk_xe_mask_probe_failure(node));
28  pcmk__xml_free(node);
29 }
30 
31 static void
32 op_does_not_have_right_values_test(void **state) {
33  xmlNode *node = NULL;
34  char *s = NULL;
35 
38  "=\"" PCMK_ACTION_MONITOR "\" "
39  PCMK_META_INTERVAL "=\"0\"/>");
40  assert_false(pcmk_xe_mask_probe_failure(node));
41  pcmk__xml_free(node);
42 
45  PCMK_META_INTERVAL "=\"0\" "
46  PCMK__XA_RC_CODE "=\"%d\" "
47  PCMK__XA_OP_STATUS "=\"\"/>",
48  PCMK_OCF_OK);
49  node = pcmk__xml_parse(s);
50  assert_false(pcmk_xe_mask_probe_failure(node));
51  free(s);
52  pcmk__xml_free(node);
53 }
54 
55 static void
56 check_values_test(void **state) {
57  xmlNode *node = NULL;
58  char *s = NULL;
59 
60  /* PCMK_EXEC_NOT_SUPPORTED */
63  PCMK_META_INTERVAL "=\"0\" "
64  PCMK__XA_RC_CODE "=\"%d\" "
65  PCMK__XA_OP_STATUS "=\"%d\"/>",
67  node = pcmk__xml_parse(s);
68  assert_false(pcmk_xe_mask_probe_failure(node));
69  free(s);
70  pcmk__xml_free(node);
71 
74  PCMK_META_INTERVAL "=\"0\" "
75  PCMK__XA_RC_CODE "=\"%d\" "
76  PCMK__XA_OP_STATUS "=\"%d\"/>",
78  node = pcmk__xml_parse(s);
79  assert_true(pcmk_xe_mask_probe_failure(node));
80  free(s);
81  pcmk__xml_free(node);
82 
83  /* PCMK_EXEC_DONE */
86  PCMK_META_INTERVAL "=\"0\" "
87  PCMK__XA_RC_CODE "=\"%d\" "
88  PCMK__XA_OP_STATUS "=\"%d\"/>",
90  node = pcmk__xml_parse(s);
91  assert_false(pcmk_xe_mask_probe_failure(node));
92  free(s);
93  pcmk__xml_free(node);
94 
97  PCMK_META_INTERVAL "=\"0\" "
98  PCMK__XA_RC_CODE "=\"%d\" "
99  PCMK__XA_OP_STATUS "=\"%d\"/>",
101  node = pcmk__xml_parse(s);
102  assert_true(pcmk_xe_mask_probe_failure(node));
103  free(s);
104  pcmk__xml_free(node);
105 
108  PCMK_META_INTERVAL "=\"0\" "
109  PCMK__XA_RC_CODE "=\"%d\" "
110  PCMK__XA_OP_STATUS "=\"%d\"/>",
112  node = pcmk__xml_parse(s);
113  assert_true(pcmk_xe_mask_probe_failure(node));
114  free(s);
115  pcmk__xml_free(node);
116 
119  PCMK_META_INTERVAL "=\"0\" "
120  PCMK__XA_RC_CODE "=\"%d\" "
121  PCMK__XA_OP_STATUS "=\"%d\"/>",
123  node = pcmk__xml_parse(s);
124  assert_false(pcmk_xe_mask_probe_failure(node));
125  free(s);
126  pcmk__xml_free(node);
127 
130  PCMK_META_INTERVAL "=\"0\" "
131  PCMK__XA_RC_CODE "=\"%d\" "
132  PCMK__XA_OP_STATUS "=\"%d\"/>",
134  node = pcmk__xml_parse(s);
135  assert_false(pcmk_xe_mask_probe_failure(node));
136  free(s);
137  pcmk__xml_free(node);
138 
139  /* PCMK_EXEC_NOT_INSTALLED */
142  PCMK_META_INTERVAL "=\"0\" "
143  PCMK__XA_RC_CODE "=\"%d\" "
144  PCMK__XA_OP_STATUS "=\"%d\"/>",
146  node = pcmk__xml_parse(s);
147  assert_true(pcmk_xe_mask_probe_failure(node));
148  free(s);
149  pcmk__xml_free(node);
150 
153  PCMK_META_INTERVAL "=\"0\" "
154  PCMK__XA_RC_CODE "=\"%d\" "
155  PCMK__XA_OP_STATUS "=\"%d\"/>",
157  node = pcmk__xml_parse(s);
158  assert_true(pcmk_xe_mask_probe_failure(node));
159  free(s);
160  pcmk__xml_free(node);
161 
162  /* PCMK_EXEC_ERROR */
165  PCMK_META_INTERVAL "=\"0\" "
166  PCMK__XA_RC_CODE "=\"%d\" "
167  PCMK__XA_OP_STATUS "=\"%d\"/>",
169  node = pcmk__xml_parse(s);
170  assert_false(pcmk_xe_mask_probe_failure(node));
171  free(s);
172  pcmk__xml_free(node);
173 
176  PCMK_META_INTERVAL "=\"0\" "
177  PCMK__XA_RC_CODE "=\"%d\" "
178  PCMK__XA_OP_STATUS "=\"%d\"/>",
180  node = pcmk__xml_parse(s);
181  assert_true(pcmk_xe_mask_probe_failure(node));
182  free(s);
183  pcmk__xml_free(node);
184 
187  PCMK_META_INTERVAL "=\"0\" "
188  PCMK__XA_RC_CODE "=\"%d\" "
189  PCMK__XA_OP_STATUS "=\"%d\"/>",
191  node = pcmk__xml_parse(s);
192  assert_true(pcmk_xe_mask_probe_failure(node));
193  free(s);
194  pcmk__xml_free(node);
195 
198  PCMK_META_INTERVAL "=\"0\" "
199  PCMK__XA_RC_CODE "=\"%d\" "
200  PCMK__XA_OP_STATUS "=\"%d\"/>",
202  node = pcmk__xml_parse(s);
203  assert_false(pcmk_xe_mask_probe_failure(node));
204  free(s);
205  pcmk__xml_free(node);
206 
209  PCMK_META_INTERVAL "=\"0\" "
210  PCMK__XA_RC_CODE "=\"%d\" "
211  PCMK__XA_OP_STATUS "=\"%d\"/>",
213  node = pcmk__xml_parse(s);
214  assert_false(pcmk_xe_mask_probe_failure(node));
215  free(s);
216  pcmk__xml_free(node);
217 
218  /* PCMK_EXEC_ERROR_HARD */
221  PCMK_META_INTERVAL "=\"0\" "
222  PCMK__XA_RC_CODE "=\"%d\" "
223  PCMK__XA_OP_STATUS "=\"%d\"/>",
225  node = pcmk__xml_parse(s);
226  assert_false(pcmk_xe_mask_probe_failure(node));
227  free(s);
228  pcmk__xml_free(node);
229 
232  PCMK_META_INTERVAL "=\"0\" "
233  PCMK__XA_RC_CODE "=\"%d\" "
234  PCMK__XA_OP_STATUS "=\"%d\"/>",
236  node = pcmk__xml_parse(s);
237  assert_true(pcmk_xe_mask_probe_failure(node));
238  free(s);
239  pcmk__xml_free(node);
240 
243  PCMK_META_INTERVAL "=\"0\" "
244  PCMK__XA_RC_CODE "=\"%d\" "
245  PCMK__XA_OP_STATUS "=\"%d\"/>",
247  node = pcmk__xml_parse(s);
248  assert_true(pcmk_xe_mask_probe_failure(node));
249  free(s);
250  pcmk__xml_free(node);
251 
254  PCMK_META_INTERVAL "=\"0\" "
255  PCMK__XA_RC_CODE "=\"%d\" "
256  PCMK__XA_OP_STATUS "=\"%d\"/>",
258  node = pcmk__xml_parse(s);
259  assert_false(pcmk_xe_mask_probe_failure(node));
260  free(s);
261  pcmk__xml_free(node);
262 
265  PCMK_META_INTERVAL "=\"0\" "
266  PCMK__XA_RC_CODE "=\"%d\" "
267  PCMK__XA_OP_STATUS "=\"%d\"/>",
269  node = pcmk__xml_parse(s);
270  assert_false(pcmk_xe_mask_probe_failure(node));
271  free(s);
272  pcmk__xml_free(node);
273 
274  /* PCMK_EXEC_ERROR_FATAL */
277  PCMK_META_INTERVAL "=\"0\" "
278  PCMK__XA_RC_CODE "=\"%d\" "
279  PCMK__XA_OP_STATUS "=\"%d\"/>",
281  node = pcmk__xml_parse(s);
282  assert_false(pcmk_xe_mask_probe_failure(node));
283  free(s);
284  pcmk__xml_free(node);
285 
288  PCMK_META_INTERVAL "=\"0\" "
289  PCMK__XA_RC_CODE "=\"%d\" "
290  PCMK__XA_OP_STATUS "=\"%d\"/>",
292  node = pcmk__xml_parse(s);
293  assert_true(pcmk_xe_mask_probe_failure(node));
294  free(s);
295  pcmk__xml_free(node);
296 
299  PCMK_META_INTERVAL "=\"0\" "
300  PCMK__XA_RC_CODE "=\"%d\" "
301  PCMK__XA_OP_STATUS "=\"%d\"/>",
303  node = pcmk__xml_parse(s);
304  assert_true(pcmk_xe_mask_probe_failure(node));
305  free(s);
306  pcmk__xml_free(node);
307 
310  PCMK_META_INTERVAL "=\"0\" "
311  PCMK__XA_RC_CODE "=\"%d\" "
312  PCMK__XA_OP_STATUS "=\"%d\"/>",
314  node = pcmk__xml_parse(s);
315  assert_false(pcmk_xe_mask_probe_failure(node));
316  free(s);
317  pcmk__xml_free(node);
318 
321  PCMK_META_INTERVAL "=\"0\" "
322  PCMK__XA_RC_CODE "=\"%d\" "
323  PCMK__XA_OP_STATUS "=\"%d\"/>",
325  node = pcmk__xml_parse(s);
326  assert_false(pcmk_xe_mask_probe_failure(node));
327  free(s);
328  pcmk__xml_free(node);
329 }
330 
332  cmocka_unit_test(op_is_not_probe_test),
333  cmocka_unit_test(op_does_not_have_right_values_test),
334  cmocka_unit_test(check_values_test))
#define PCMK__XA_RC_CODE
Scheduler API for probes.
#define PCMK_ACTION_MONITOR
Definition: actions.h:51
Service safely stopped.
Definition: results.h:186
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)
Execution failed, do not retry on node.
Definition: results.h:314
#define PCMK_XA_OPERATION
Definition: xml_names.h:349
void pcmk__xml_free(xmlNode *xml)
Definition: xml.c:789
Parameter invalid (in local context)
Definition: results.h:179
Parameter invalid (inherently)
Definition: results.h:183
#define PCMK_ACTION_START
Definition: actions.h:63
int pcmk__xml_test_setup_group(void **state)
Definition: unittest.c:85
Action completed, result is known.
Definition: results.h:309
Execution failed, do not retry anywhere.
Definition: results.h:315
Dependencies not available locally.
Definition: results.h:182
int pcmk__xml_test_teardown_group(void **state)
Definition: unittest.c:104
xmlNode * pcmk__xml_parse(const char *input)
Definition: xml_io.c:168
bool pcmk_xe_mask_probe_failure(const xmlNode *xml_op)
Check whether an action history entry represents a maskable probe.
Definition: probes.c:70
#define PCMK_META_INTERVAL
Definition: options.h:91
Agent does not implement requested action.
Definition: results.h:312
#define PCMK__XE_LRM_RSC_OP
Success.
Definition: results.h:174
#define PCMK__XA_OP_STATUS
Agent or dependency not available locally.
Definition: results.h:316
Execution failed, may be retried.
Definition: results.h:313
char * crm_strdup_printf(char const *format,...) G_GNUC_PRINTF(1