This source file includes following definitions.
- assert_in_patchset
- null_patchset_asserts
- create_op
- delete_op
- modify_op
- move_op
1
2
3
4
5
6
7
8
9
10 #include <crm_internal.h>
11
12 #include <crm/common/unittest_internal.h>
13 #include <crm/common/xml.h>
14 #include <crm/common/xml_internal.h>
15
16 #define ORIG_CIB \
17 "<" PCMK_XE_CIB " " PCMK_XA_ADMIN_EPOCH "=\"0\"" \
18 " " PCMK_XA_EPOCH "=\"0\"" \
19 " " PCMK_XA_NUM_UPDATES "=\"0\">" \
20 "<" PCMK_XE_CONFIGURATION ">" \
21 "<" PCMK_XE_CRM_CONFIG "/>" \
22 "<" PCMK_XE_NODES ">" \
23 "<" PCMK_XE_NODE " " PCMK_XA_ID "=\"1\"" \
24 " " PCMK_XA_UNAME "=\"node-1\"/>" \
25 "</" PCMK_XE_NODES ">" \
26 "<" PCMK_XE_RESOURCES "/>" \
27 "<" PCMK_XE_CONSTRAINTS "/>" \
28 "</" PCMK_XE_CONFIGURATION ">" \
29 "<" PCMK_XE_STATUS "/>" \
30 "</" PCMK_XE_CIB ">"
31
32 static void
33 assert_in_patchset(const char *source_s, const char *target_s,
34 const char *element, bool reference)
35 {
36 xmlNode *source = pcmk__xml_parse(source_s);
37 xmlNode *target = pcmk__xml_parse(target_s);
38 xmlNode *patchset = NULL;
39
40 xml_track_changes(target, NULL, NULL, false);
41 xml_calculate_significant_changes(source, target);
42 patchset = xml_create_patchset(2, source, target, NULL, false);
43
44 if (reference) {
45 assert_true(pcmk__cib_element_in_patchset(patchset, element));
46 } else {
47 assert_false(pcmk__cib_element_in_patchset(patchset, element));
48 }
49
50 pcmk__xml_free(source);
51 pcmk__xml_free(target);
52 pcmk__xml_free(patchset);
53 }
54
55 static void
56 null_patchset_asserts(void **state)
57 {
58 pcmk__assert_asserts(pcmk__cib_element_in_patchset(NULL, NULL));
59 pcmk__assert_asserts(pcmk__cib_element_in_patchset(NULL, PCMK_XE_NODES));
60 }
61
62
63 #define CREATE_CIB \
64 "<" PCMK_XE_CIB " " PCMK_XA_ADMIN_EPOCH "=\"0\"" \
65 " " PCMK_XA_EPOCH "=\"0\"" \
66 " " PCMK_XA_NUM_UPDATES "=\"0\">" \
67 "<" PCMK_XE_CONFIGURATION ">" \
68 "<" PCMK_XE_CRM_CONFIG "/>" \
69 "<" PCMK_XE_NODES ">" \
70 "<" PCMK_XE_NODE " " PCMK_XA_ID "=\"1\"" \
71 " " PCMK_XA_UNAME "=\"node-1\"/>" \
72 "</" PCMK_XE_NODES ">" \
73 "<" PCMK_XE_RESOURCES "/>" \
74 "<" PCMK_XE_CONSTRAINTS "/>" \
75 "<" PCMK_XE_ALERTS "/>" \
76 "</" PCMK_XE_CONFIGURATION ">" \
77 "<" PCMK_XE_STATUS "/>" \
78 "</" PCMK_XE_CIB ">"
79
80 static void
81 create_op(void **state)
82 {
83
84 assert_in_patchset(ORIG_CIB, CREATE_CIB, PCMK_XE_ALERTS, true);
85
86
87 assert_in_patchset(ORIG_CIB, CREATE_CIB, PCMK_XE_CONFIGURATION, true);
88 assert_in_patchset(ORIG_CIB, CREATE_CIB, NULL, true);
89
90
91 assert_in_patchset(ORIG_CIB, CREATE_CIB, PCMK_XE_STATUS, false);
92 }
93
94 static void
95 delete_op(void **state)
96 {
97
98 assert_in_patchset(CREATE_CIB, ORIG_CIB, PCMK_XE_ALERTS, true);
99
100
101 assert_in_patchset(CREATE_CIB, ORIG_CIB, PCMK_XE_CONFIGURATION, true);
102 assert_in_patchset(CREATE_CIB, ORIG_CIB, NULL, true);
103
104
105 assert_in_patchset(CREATE_CIB, ORIG_CIB, PCMK_XE_STATUS, false);
106 }
107
108
109 #define MODIFY_ADD_CIB \
110 "<" PCMK_XE_CIB " " PCMK_XA_ADMIN_EPOCH "=\"0\"" \
111 " " PCMK_XA_EPOCH "=\"0\"" \
112 " " PCMK_XA_NUM_UPDATES "=\"0\"" \
113 " " PCMK_XA_CRM_FEATURE_SET "=\"3.19.7\">" \
114 "<" PCMK_XE_CONFIGURATION ">" \
115 "<" PCMK_XE_CRM_CONFIG "/>" \
116 "<" PCMK_XE_NODES ">" \
117 "<" PCMK_XE_NODE " " PCMK_XA_ID "=\"1\"" \
118 " " PCMK_XA_UNAME "=\"node-1\"/>" \
119 "</" PCMK_XE_NODES ">" \
120 "<" PCMK_XE_RESOURCES "/>" \
121 "<" PCMK_XE_CONSTRAINTS "/>" \
122 "</" PCMK_XE_CONFIGURATION ">" \
123 "<" PCMK_XE_STATUS "/>" \
124 "</" PCMK_XE_CIB ">"
125
126
127 #define MODIFY_UPDATE_CIB \
128 "<" PCMK_XE_CIB " " PCMK_XA_ADMIN_EPOCH "=\"0\"" \
129 " " PCMK_XA_EPOCH "=\"0\"" \
130 " " PCMK_XA_NUM_UPDATES "=\"1\">" \
131 "<" PCMK_XE_CONFIGURATION ">" \
132 "<" PCMK_XE_CRM_CONFIG "/>" \
133 "<" PCMK_XE_NODES ">" \
134 "<" PCMK_XE_NODE " " PCMK_XA_ID "=\"1\"" \
135 " " PCMK_XA_UNAME "=\"node-1\"/>" \
136 "</" PCMK_XE_NODES ">" \
137 "<" PCMK_XE_RESOURCES "/>" \
138 "<" PCMK_XE_CONSTRAINTS "/>" \
139 "</" PCMK_XE_CONFIGURATION ">" \
140 "<" PCMK_XE_STATUS "/>" \
141 "</" PCMK_XE_CIB ">"
142
143
144 #define MODIFY_ADD_NODE_CIB \
145 "<" PCMK_XE_CIB " " PCMK_XA_ADMIN_EPOCH "=\"0\"" \
146 " " PCMK_XA_EPOCH "=\"0\"" \
147 " " PCMK_XA_NUM_UPDATES "=\"0\">" \
148 "<" PCMK_XE_CONFIGURATION ">" \
149 "<" PCMK_XE_CRM_CONFIG "/>" \
150 "<" PCMK_XE_NODES ">" \
151 "<" PCMK_XE_NODE " " PCMK_XA_ID "=\"1\"" \
152 " " PCMK_XA_UNAME "=\"node-1\"" \
153 " " PCMK_XA_TYPE "=\"member\"/>" \
154 "</" PCMK_XE_NODES ">" \
155 "<" PCMK_XE_RESOURCES "/>" \
156 "<" PCMK_XE_CONSTRAINTS "/>" \
157 "</" PCMK_XE_CONFIGURATION ">" \
158 "<" PCMK_XE_STATUS "/>" \
159 "</" PCMK_XE_CIB ">"
160
161
162 #define MODIFY_UPDATE_NODE_CIB \
163 "<" PCMK_XE_CIB " " PCMK_XA_ADMIN_EPOCH "=\"0\"" \
164 " " PCMK_XA_EPOCH "=\"0\"" \
165 " " PCMK_XA_NUM_UPDATES "=\"0\">" \
166 "<" PCMK_XE_CONFIGURATION ">" \
167 "<" PCMK_XE_CRM_CONFIG "/>" \
168 "<" PCMK_XE_NODES ">" \
169 "<" PCMK_XE_NODE " " PCMK_XA_ID "=\"1\"" \
170 " " PCMK_XA_UNAME "=\"node-2\"/>" \
171 "</" PCMK_XE_NODES ">" \
172 "<" PCMK_XE_RESOURCES "/>" \
173 "<" PCMK_XE_CONSTRAINTS "/>" \
174 "</" PCMK_XE_CONFIGURATION ">" \
175 "<" PCMK_XE_STATUS "/>" \
176 "</" PCMK_XE_CIB ">"
177
178 static void
179 modify_op(void **state)
180 {
181
182 assert_in_patchset(ORIG_CIB, MODIFY_ADD_CIB, PCMK_XE_CIB, true);
183
184
185 assert_in_patchset(ORIG_CIB, MODIFY_UPDATE_CIB, PCMK_XE_CIB, true);
186
187
188 assert_in_patchset(MODIFY_ADD_CIB, ORIG_CIB, PCMK_XE_CIB, true);
189
190
191 assert_in_patchset(ORIG_CIB, MODIFY_ADD_NODE_CIB, PCMK_XE_CIB, true);
192 assert_in_patchset(ORIG_CIB, MODIFY_ADD_NODE_CIB, NULL, true);
193
194
195 assert_in_patchset(ORIG_CIB, MODIFY_UPDATE_NODE_CIB, PCMK_XE_CIB, true);
196 assert_in_patchset(ORIG_CIB, MODIFY_UPDATE_NODE_CIB, NULL, true);
197
198
199 assert_in_patchset(MODIFY_ADD_NODE_CIB, ORIG_CIB, PCMK_XE_CIB, true);
200 assert_in_patchset(MODIFY_ADD_NODE_CIB, ORIG_CIB, NULL, true);
201
202
203 assert_in_patchset(ORIG_CIB, MODIFY_ADD_CIB, PCMK_XE_STATUS, false);
204 assert_in_patchset(ORIG_CIB, MODIFY_UPDATE_CIB, PCMK_XE_STATUS, false);
205 assert_in_patchset(ORIG_CIB, MODIFY_ADD_NODE_CIB, PCMK_XE_STATUS, false);
206 assert_in_patchset(ORIG_CIB, MODIFY_UPDATE_NODE_CIB, PCMK_XE_STATUS, false);
207 }
208
209
210 #define MOVE_CIB \
211 "<" PCMK_XE_CIB " " PCMK_XA_ADMIN_EPOCH "=\"0\"" \
212 " " PCMK_XA_EPOCH "=\"0\"" \
213 " " PCMK_XA_NUM_UPDATES "=\"0\">" \
214 "<" PCMK_XE_CONFIGURATION ">" \
215 "<" PCMK_XE_CRM_CONFIG "/>" \
216 "<" PCMK_XE_NODES "/>" \
217 "<" PCMK_XE_CONSTRAINTS "/>" \
218 "<" PCMK_XE_RESOURCES "/>" \
219 "</" PCMK_XE_CONFIGURATION ">" \
220 "<" PCMK_XE_STATUS "/>" \
221 "</" PCMK_XE_CIB ">"
222
223 static void
224 move_op(void **state)
225 {
226
227 assert_in_patchset(ORIG_CIB, MOVE_CIB, PCMK_XE_RESOURCES, true);
228 assert_in_patchset(ORIG_CIB, MOVE_CIB, PCMK_XE_CONSTRAINTS, true);
229
230
231 assert_in_patchset(ORIG_CIB, MOVE_CIB, PCMK_XE_CONFIGURATION, true);
232 assert_in_patchset(ORIG_CIB, MOVE_CIB, NULL, true);
233
234
235 assert_in_patchset(ORIG_CIB, MOVE_CIB, PCMK_XE_STATUS, false);
236 }
237
238 PCMK__UNIT_TEST(pcmk__xml_test_setup_group, pcmk__xml_test_teardown_group,
239 cmocka_unit_test(null_patchset_asserts),
240 cmocka_unit_test(create_op),
241 cmocka_unit_test(delete_op),
242 cmocka_unit_test(modify_op),
243 cmocka_unit_test(move_op))