pacemaker 2.1.4-dc6eb4362e
Scalable High-Availability cluster resource manager
parse_op_key_test.c
Go to the documentation of this file.
1/*
2 * Copyright 2020-2021 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 Lesser General Public License
7 * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
8 */
9
10#include <crm_internal.h>
11
12#include <glib.h>
13#include <stdarg.h>
14#include <stddef.h>
15#include <stdint.h>
16#include <stdlib.h>
17#include <setjmp.h>
18#include <cmocka.h>
19
20static void
21basic(void **state)
22{
23 char *rsc = NULL;
24 char *ty = NULL;
25 guint ms = 0;
26
27 assert_true(parse_op_key("Fencing_monitor_60000", &rsc, &ty, &ms));
28 assert_string_equal(rsc, "Fencing");
29 assert_string_equal(ty, "monitor");
30 assert_int_equal(ms, 60000);
31 free(rsc);
32 free(ty);
33}
34
35static void
36colon_in_rsc(void **state)
37{
38 char *rsc = NULL;
39 char *ty = NULL;
40 guint ms = 0;
41
42 assert_true(parse_op_key("ClusterIP:0_start_0", &rsc, &ty, &ms));
43 assert_string_equal(rsc, "ClusterIP:0");
44 assert_string_equal(ty, "start");
45 assert_int_equal(ms, 0);
46 free(rsc);
47 free(ty);
48
49 assert_true(parse_op_key("imagestoreclone:1_post_notify_stop_0", &rsc, &ty, &ms));
50 assert_string_equal(rsc, "imagestoreclone:1");
51 assert_string_equal(ty, "post_notify_stop");
52 assert_int_equal(ms, 0);
53 free(rsc);
54 free(ty);
55}
56
57static void
58dashes_in_rsc(void **state)
59{
60 char *rsc = NULL;
61 char *ty = NULL;
62 guint ms = 0;
63
64 assert_true(parse_op_key("httpd-bundle-0_monitor_30000", &rsc, &ty, &ms));
65 assert_string_equal(rsc, "httpd-bundle-0");
66 assert_string_equal(ty, "monitor");
67 assert_int_equal(ms, 30000);
68 free(rsc);
69 free(ty);
70
71 assert_true(parse_op_key("httpd-bundle-ip-192.168.122.132_start_0", &rsc, &ty, &ms));
72 assert_string_equal(rsc, "httpd-bundle-ip-192.168.122.132");
73 assert_string_equal(ty, "start");
74 assert_int_equal(ms, 0);
75 free(rsc);
76 free(ty);
77}
78
79static void
80migrate_to_from(void **state)
81{
82 char *rsc = NULL;
83 char *ty = NULL;
84 guint ms = 0;
85
86 assert_true(parse_op_key("vm_migrate_from_0", &rsc, &ty, &ms));
87 assert_string_equal(rsc, "vm");
88 assert_string_equal(ty, "migrate_from");
89 assert_int_equal(ms, 0);
90 free(rsc);
91 free(ty);
92
93 assert_true(parse_op_key("vm_migrate_to_0", &rsc, &ty, &ms));
94 assert_string_equal(rsc, "vm");
95 assert_string_equal(ty, "migrate_to");
96 assert_int_equal(ms, 0);
97 free(rsc);
98 free(ty);
99
100 assert_true(parse_op_key("vm_idcc_devel_migrate_to_0", &rsc, &ty, &ms));
101 assert_string_equal(rsc, "vm_idcc_devel");
102 assert_string_equal(ty, "migrate_to");
103 assert_int_equal(ms, 0);
104 free(rsc);
105 free(ty);
106}
107
108static void
109pre_post(void **state)
110{
111 char *rsc = NULL;
112 char *ty = NULL;
113 guint ms = 0;
114
115 assert_true(parse_op_key("rsc_drbd_7788:1_post_notify_start_0", &rsc, &ty, &ms));
116 assert_string_equal(rsc, "rsc_drbd_7788:1");
117 assert_string_equal(ty, "post_notify_start");
118 assert_int_equal(ms, 0);
119 free(rsc);
120 free(ty);
121
122 assert_true(parse_op_key("rabbitmq-bundle-clone_pre_notify_stop_0", &rsc, &ty, &ms));
123 assert_string_equal(rsc, "rabbitmq-bundle-clone");
124 assert_string_equal(ty, "pre_notify_stop");
125 assert_int_equal(ms, 0);
126 free(rsc);
127 free(ty);
128
129 assert_true(parse_op_key("post_notify_start_0", &rsc, &ty, &ms));
130 assert_string_equal(rsc, "post_notify");
131 assert_string_equal(ty, "start");
132 assert_int_equal(ms, 0);
133 free(rsc);
134 free(ty);
135}
136
137static void
138skip_rsc(void **state)
139{
140 char *ty = NULL;
141 guint ms = 0;
142
143 assert_true(parse_op_key("Fencing_monitor_60000", NULL, &ty, &ms));
144 assert_string_equal(ty, "monitor");
145 assert_int_equal(ms, 60000);
146 free(ty);
147}
148
149static void
150skip_ty(void **state)
151{
152 char *rsc = NULL;
153 guint ms = 0;
154
155 assert_true(parse_op_key("Fencing_monitor_60000", &rsc, NULL, &ms));
156 assert_string_equal(rsc, "Fencing");
157 assert_int_equal(ms, 60000);
158 free(rsc);
159}
160
161static void
162skip_ms(void **state)
163{
164 char *rsc = NULL;
165 char *ty = NULL;
166
167 assert_true(parse_op_key("Fencing_monitor_60000", &rsc, &ty, NULL));
168 assert_string_equal(rsc, "Fencing");
169 assert_string_equal(ty, "monitor");
170 free(rsc);
171 free(ty);
172}
173
174static void
175empty_input(void **state)
176{
177 char *rsc = NULL;
178 char *ty = NULL;
179 guint ms = 0;
180
181 assert_false(parse_op_key("", &rsc, &ty, &ms));
182 assert_null(rsc);
183 assert_null(ty);
184 assert_int_equal(ms, 0);
185
186 assert_false(parse_op_key(NULL, &rsc, &ty, &ms));
187 assert_null(rsc);
188 assert_null(ty);
189 assert_int_equal(ms, 0);
190}
191
192static void
193malformed_input(void **state)
194{
195 char *rsc = NULL;
196 char *ty = NULL;
197 guint ms = 0;
198
199 assert_false(parse_op_key("httpd-bundle-0", &rsc, &ty, &ms));
200 assert_null(rsc);
201 assert_null(ty);
202 assert_int_equal(ms, 0);
203
204 assert_false(parse_op_key("httpd-bundle-0_monitor", &rsc, &ty, &ms));
205 assert_null(rsc);
206 assert_null(ty);
207 assert_int_equal(ms, 0);
208
209 assert_false(parse_op_key("httpd-bundle-0_30000", &rsc, &ty, &ms));
210 assert_null(rsc);
211 assert_null(ty);
212 assert_int_equal(ms, 0);
213}
214
215int main(int argc, char **argv)
216{
217 const struct CMUnitTest tests[] = {
218 cmocka_unit_test(basic),
219 cmocka_unit_test(colon_in_rsc),
220 cmocka_unit_test(dashes_in_rsc),
221 cmocka_unit_test(migrate_to_from),
222 cmocka_unit_test(pre_post),
223
224 cmocka_unit_test(skip_rsc),
225 cmocka_unit_test(skip_ty),
226 cmocka_unit_test(skip_ms),
227
228 cmocka_unit_test(empty_input),
229 cmocka_unit_test(malformed_input),
230 };
231
232 cmocka_set_message_output(CM_OUTPUT_TAP);
233 return cmocka_run_group_tests(tests, NULL, NULL);
234}
gboolean parse_op_key(const char *key, char **rsc_id, char **op_type, guint *interval_ms)
Definition: operations.c:185
int main(int argc, char **argv)