This source file includes following definitions.
- setup_test
- teardown_test
- bad_arguments
- unknown_ticket
- verify_results
- attribute_exists
- default_no_ticket
- default_no_attribute
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
16 #include <libxml/xpath.h>
17
18 #include <pacemaker.h>
19
20 static char *cib_path = NULL;
21
22 static int
23 setup_test(void **state)
24 {
25 cib_path = pcmk__cib_test_copy_cib("tickets.xml");
26
27 if (cib_path == NULL) {
28 return -1;
29 }
30
31 return 0;
32 }
33
34 static int
35 teardown_test(void **state)
36 {
37 pcmk__cib_test_cleanup(cib_path);
38 cib_path = NULL;
39 return 0;
40 }
41
42 static void
43 bad_arguments(void **state)
44 {
45 xmlNode *xml = NULL;
46
47 assert_int_equal(pcmk_ticket_get_attr(NULL, "ticketA", "XYZ", NULL), EINVAL);
48
49 assert_int_equal(pcmk_ticket_get_attr(&xml, NULL, "attrA", NULL), EINVAL);
50 pcmk__assert_validates(xml);
51 pcmk__xml_free(xml);
52 xml = NULL;
53
54 assert_int_equal(pcmk_ticket_get_attr(&xml, "ticketA", NULL, NULL), EINVAL);
55 pcmk__assert_validates(xml);
56 pcmk__xml_free(xml);
57 }
58
59 static void
60 unknown_ticket(void **state)
61 {
62 xmlNode *xml = NULL;
63
64
65
66
67
68 assert_int_equal(pcmk_ticket_get_attr(&xml, "XYZ", "attrA", NULL), ENXIO);
69 pcmk__assert_validates(xml);
70 pcmk__xml_free(xml);
71 xml = NULL;
72
73 assert_int_equal(pcmk_ticket_get_attr(&xml, "ticketA", "XYZ", NULL), ENXIO);
74 pcmk__assert_validates(xml);
75 pcmk__xml_free(xml);
76 }
77
78 static void
79 verify_results(xmlNode *xml, const char *ticket_id, const char *attr_name,
80 const char *attr_value)
81 {
82 xmlNode *node = NULL;
83 xmlXPathObject *xpath_obj = NULL;
84
85
86
87
88 xpath_obj = pcmk__xpath_search(xml->doc,
89 "//" PCMK_XE_PACEMAKER_RESULT
90 "/" PCMK_XE_TICKETS "/" PCMK_XE_TICKET);
91 assert_int_equal(pcmk__xpath_num_results(xpath_obj), 1);
92
93 node = pcmk__xpath_result(xpath_obj, 0);
94 assert_non_null(node);
95 assert_string_equal(crm_element_value(node, PCMK_XA_ID), ticket_id);
96 xmlXPathFreeObject(xpath_obj);
97
98
99
100
101 xpath_obj = pcmk__xpath_search(xml->doc,
102 "//" PCMK_XE_PACEMAKER_RESULT
103 "/" PCMK_XE_TICKETS "/" PCMK_XE_TICKET
104 "/" PCMK_XE_ATTRIBUTE);
105 assert_int_equal(pcmk__xpath_num_results(xpath_obj), 1);
106
107 node = pcmk__xpath_result(xpath_obj, 0);
108 assert_non_null(node);
109 assert_string_equal(crm_element_value(node, PCMK_XA_NAME), attr_name);
110 assert_string_equal(crm_element_value(node, PCMK_XA_VALUE), attr_value);
111
112 xmlXPathFreeObject(xpath_obj);
113 }
114
115 static void
116 attribute_exists(void **state)
117 {
118 xmlNode *xml = NULL;
119
120 assert_int_equal(pcmk_ticket_get_attr(&xml, "ticketA", "owner", NULL), pcmk_rc_ok);
121 pcmk__assert_validates(xml);
122
123 verify_results(xml, "ticketA", "owner", "1");
124
125 pcmk__xml_free(xml);
126 }
127
128 static void
129 default_no_ticket(void **state)
130 {
131 xmlNode *xml = NULL;
132
133 assert_int_equal(pcmk_ticket_get_attr(&xml, "ticketX", "ABC", "DEFAULT"), pcmk_rc_ok);
134 pcmk__assert_validates(xml);
135
136 verify_results(xml, "ticketX", "ABC", "DEFAULT");
137
138 pcmk__xml_free(xml);
139 }
140
141 static void
142 default_no_attribute(void **state)
143 {
144 xmlNode *xml = NULL;
145
146 assert_int_equal(pcmk_ticket_get_attr(&xml, "ticketA", "ABC", "DEFAULT"), pcmk_rc_ok);
147 pcmk__assert_validates(xml);
148
149 verify_results(xml, "ticketA", "ABC", "DEFAULT");
150
151 pcmk__xml_free(xml);
152 }
153
154 PCMK__UNIT_TEST(pcmk__xml_test_setup_group, pcmk__xml_test_teardown_group,
155 cmocka_unit_test_setup_teardown(bad_arguments, setup_test, teardown_test),
156 cmocka_unit_test_setup_teardown(unknown_ticket, setup_test, teardown_test),
157 cmocka_unit_test_setup_teardown(attribute_exists, setup_test, teardown_test),
158 cmocka_unit_test_setup_teardown(default_no_ticket, setup_test, teardown_test),
159 cmocka_unit_test_setup_teardown(default_no_attribute, setup_test, teardown_test))