This source file includes following definitions.
- cib_not_connected
- setup_test
- teardown_test
- bad_arguments
- no_attrs
- remove_missing_attrs
- remove_existing_attr
- remove_granted_without_force
- remove_granted_with_force
1
2
3
4
5
6
7
8
9
10 #include <crm_internal.h>
11
12 #include <crm/cib/internal.h>
13 #include <crm/common/unittest_internal.h>
14 #include <crm/common/xml.h>
15 #include <pacemaker.h>
16
17 static char *cib_path = NULL;
18
19 static void
20 cib_not_connected(void **state)
21 {
22 xmlNode *xml = NULL;
23
24
25
26
27
28 assert_int_equal(pcmk_ticket_remove_attr(&xml, NULL, NULL, false), ENOTCONN);
29 pcmk__assert_validates(xml);
30 free_xml(xml);
31 }
32
33 static int
34 setup_test(void **state)
35 {
36 cib_path = pcmk__cib_test_copy_cib("tickets.xml");
37
38 if (cib_path == NULL) {
39 return -1;
40 }
41
42 return 0;
43 }
44
45 static int
46 teardown_test(void **state)
47 {
48 pcmk__cib_test_cleanup(cib_path);
49 cib_path = NULL;
50 return 0;
51 }
52
53 static void
54 bad_arguments(void **state)
55 {
56 xmlNode *xml = NULL;
57
58 assert_int_equal(pcmk_ticket_remove_attr(NULL, "ticketA", NULL, false), EINVAL);
59
60 assert_int_equal(pcmk_ticket_remove_attr(&xml, NULL, NULL, false), EINVAL);
61 pcmk__assert_validates(xml);
62 free_xml(xml);
63 }
64
65 static void
66 no_attrs(void **state)
67 {
68 GList *attrs = NULL;
69 xmlNode *xml = NULL;
70 xmlNode *xml_search = NULL;
71 cib_t *cib = cib_new();
72
73 cib->cmds->signon(cib, crm_system_name, cib_command);
74
75
76 assert_int_equal(pcmk_ticket_remove_attr(&xml, "XYZ", NULL, false), pcmk_rc_ok);
77 pcmk__assert_validates(xml);
78 free_xml(xml);
79 xml = NULL;
80
81 cib->cmds->query(cib, "//" PCMK__XE_TICKET_STATE "[@" PCMK_XA_ID "=\"XYZ\"]",
82 &xml_search, cib_xpath | cib_scope_local);
83 assert_null(xml_search);
84
85
86 assert_int_equal(pcmk_ticket_remove_attr(&xml, "ticketA", NULL, false), pcmk_rc_ok);
87 pcmk__assert_validates(xml);
88 free_xml(xml);
89 xml = NULL;
90
91 cib->cmds->query(cib, "//" PCMK__XE_TICKET_STATE "[@" PCMK_XA_ID "=\"ticketA\"]",
92 &xml_search, cib_xpath | cib_scope_local);
93 assert_string_equal("1", crm_element_value(xml_search, "owner"));
94 free_xml(xml_search);
95
96
97 assert_int_equal(pcmk_ticket_remove_attr(&xml, "XYZ", attrs, false), pcmk_rc_ok);
98 pcmk__assert_validates(xml);
99 free_xml(xml);
100
101 cib->cmds->query(cib, "//" PCMK__XE_TICKET_STATE "[@" PCMK_XA_ID "=\"XYZ\"]",
102 &xml_search, cib_xpath | cib_scope_local);
103 assert_null(xml_search);
104
105 g_list_free(attrs);
106 cib__clean_up_connection(&cib);
107 }
108
109 static void
110 remove_missing_attrs(void **state)
111 {
112 GList *attrs = NULL;
113 xmlNode *xml = NULL;
114 xmlNode *xml_search = NULL;
115 cib_t *cib;
116
117 attrs = g_list_append(attrs, strdup("XYZ"));
118
119
120 assert_int_equal(pcmk_ticket_remove_attr(&xml, "ticketA", attrs, false), pcmk_rc_ok);
121 pcmk__assert_validates(xml);
122 free_xml(xml);
123
124 cib = cib_new();
125 cib->cmds->signon(cib, crm_system_name, cib_command);
126 cib->cmds->query(cib, "//" PCMK__XE_TICKET_STATE "[@" PCMK_XA_ID "=\"ticketA\"]",
127 &xml_search, cib_xpath | cib_scope_local);
128
129 assert_string_equal("1", crm_element_value(xml_search, "owner"));
130 assert_null(crm_element_value(xml_search, "XYZ"));
131
132 free_xml(xml_search);
133 g_list_free_full(attrs, free);
134 cib__clean_up_connection(&cib);
135 }
136
137 static void
138 remove_existing_attr(void **state)
139 {
140 GList *attrs = NULL;
141 xmlNode *xml = NULL;
142 xmlNode *xml_search = NULL;
143 cib_t *cib;
144
145 attrs = g_list_append(attrs, strdup("owner"));
146
147 assert_int_equal(pcmk_ticket_remove_attr(&xml, "ticketA", attrs, false), pcmk_rc_ok);
148 pcmk__assert_validates(xml);
149 free_xml(xml);
150
151 cib = cib_new();
152 cib->cmds->signon(cib, crm_system_name, cib_command);
153 cib->cmds->query(cib, "//" PCMK__XE_TICKET_STATE "[@" PCMK_XA_ID "=\"ticketA\"]",
154 &xml_search, cib_xpath | cib_scope_local);
155
156 assert_null(crm_element_value(xml_search, "owner"));
157
158 free_xml(xml_search);
159 g_list_free_full(attrs, free);
160 cib__clean_up_connection(&cib);
161 }
162
163 static void
164 remove_granted_without_force(void **state)
165 {
166 GList *attrs = NULL;
167 xmlNode *xml = NULL;
168 xmlNode *xml_search = NULL;
169 cib_t *cib;
170
171 attrs = g_list_append(attrs, strdup(PCMK__XA_GRANTED));
172
173 assert_int_equal(pcmk_ticket_remove_attr(&xml, "ticketB", attrs, false), EACCES);
174 pcmk__assert_validates(xml);
175 free_xml(xml);
176
177 cib = cib_new();
178 cib->cmds->signon(cib, crm_system_name, cib_command);
179 cib->cmds->query(cib, "//" PCMK__XE_TICKET_STATE "[@" PCMK_XA_ID "=\"ticketB\"]",
180 &xml_search, cib_xpath | cib_scope_local);
181
182 assert_string_equal("true", crm_element_value(xml_search, PCMK__XA_GRANTED));
183
184 free_xml(xml_search);
185 g_list_free_full(attrs, free);
186 cib__clean_up_connection(&cib);
187 }
188
189 static void
190 remove_granted_with_force(void **state)
191 {
192 GList *attrs = NULL;
193 xmlNode *xml = NULL;
194 xmlNode *xml_search = NULL;
195 cib_t *cib;
196
197 attrs = g_list_append(attrs, strdup(PCMK__XA_GRANTED));
198
199 assert_int_equal(pcmk_ticket_remove_attr(&xml, "ticketB", attrs, true), pcmk_rc_ok);
200 pcmk__assert_validates(xml);
201 free_xml(xml);
202
203 cib = cib_new();
204 cib->cmds->signon(cib, crm_system_name, cib_command);
205 cib->cmds->query(cib, "//" PCMK__XE_TICKET_STATE "[@" PCMK_XA_ID "=\"ticketB\"]",
206 &xml_search, cib_xpath | cib_scope_local);
207
208 assert_null(crm_element_value(xml_search, PCMK__XA_GRANTED));
209
210 free_xml(xml_search);
211 g_list_free_full(attrs, free);
212 cib__clean_up_connection(&cib);
213 }
214
215
216
217
218
219
220
221
222
223
224 PCMK__UNIT_TEST(pcmk__xml_test_setup_group, pcmk__xml_test_teardown_group,
225 cmocka_unit_test(cib_not_connected),
226 cmocka_unit_test_setup_teardown(bad_arguments, setup_test, teardown_test),
227 cmocka_unit_test_setup_teardown(no_attrs, setup_test, teardown_test),
228 cmocka_unit_test_setup_teardown(remove_missing_attrs, setup_test, teardown_test),
229 cmocka_unit_test_setup_teardown(remove_existing_attr, setup_test, teardown_test),
230 cmocka_unit_test_setup_teardown(remove_granted_without_force, setup_test, teardown_test),
231 cmocka_unit_test_setup_teardown(remove_granted_with_force, setup_test, teardown_test))