This source file includes following definitions.
- null_lowest
- special_id_highest
- null_special_id_ignored
- highest_score_wins
- invalid_score_is_0
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_internal.h>
14
15 #define FIRST_ID "foo"
16
17 #define XML_FIRST_ID "<block " PCMK_XA_ID "=\"" FIRST_ID "\" " \
18 PCMK_XA_SCORE "=\"0\" />"
19 #define XML_NO_ID "<block " PCMK_XA_SCORE "=\"5\" />"
20 #define XML_LOW "<block " PCMK_XA_ID "=\"low\" " PCMK_XA_SCORE "=\"1\" />"
21 #define XML_HIGH "<block " PCMK_XA_ID "=\"high\" " PCMK_XA_SCORE "=\"100\" />"
22 #define XML_BAD "<block " PCMK_XA_ID "=\"high\" " PCMK_XA_SCORE "=\"x\" />"
23
24 static pcmk__nvpair_unpack_t unpack_data = {
25 .first_id = FIRST_ID,
26 };
27
28 static void
29 null_lowest(void **state)
30 {
31 xmlNode *block = pcmk__xml_parse(XML_LOW);
32
33 assert_non_null(block);
34
35 assert_int_equal(pcmk__cmp_nvpair_blocks(NULL, block, NULL), 1);
36 assert_int_equal(pcmk__cmp_nvpair_blocks(block, NULL, NULL), -1);
37 assert_int_equal(pcmk__cmp_nvpair_blocks(NULL, NULL, NULL), 0);
38
39 unpack_data.overwrite = false;
40 assert_int_equal(pcmk__cmp_nvpair_blocks(NULL, block, &unpack_data), 1);
41 assert_int_equal(pcmk__cmp_nvpair_blocks(block, NULL, &unpack_data), -1);
42 assert_int_equal(pcmk__cmp_nvpair_blocks(NULL, NULL, &unpack_data), 0);
43
44 unpack_data.overwrite = true;
45 assert_int_equal(pcmk__cmp_nvpair_blocks(NULL, block, &unpack_data), -1);
46 assert_int_equal(pcmk__cmp_nvpair_blocks(block, NULL, &unpack_data), 1);
47 assert_int_equal(pcmk__cmp_nvpair_blocks(NULL, NULL, &unpack_data), 0);
48
49 pcmk__xml_free(block);
50 }
51
52 static void
53 special_id_highest(void **state)
54 {
55 xmlNode *first_id = pcmk__xml_parse(XML_FIRST_ID);
56 xmlNode *not_first_id = pcmk__xml_parse(XML_HIGH);
57 xmlNode *no_id = pcmk__xml_parse(XML_NO_ID);
58
59 assert_non_null(first_id);
60 assert_non_null(not_first_id);
61 assert_non_null(no_id);
62
63 unpack_data.overwrite = false;
64 assert_int_equal(pcmk__cmp_nvpair_blocks(first_id, not_first_id,
65 &unpack_data), -1);
66 assert_int_equal(pcmk__cmp_nvpair_blocks(not_first_id, first_id,
67 &unpack_data), 1);
68 assert_int_equal(pcmk__cmp_nvpair_blocks(first_id, no_id,
69 &unpack_data), -1);
70 assert_int_equal(pcmk__cmp_nvpair_blocks(no_id, first_id,
71 &unpack_data), 1);
72
73 unpack_data.overwrite = true;
74 assert_int_equal(pcmk__cmp_nvpair_blocks(first_id, not_first_id,
75 &unpack_data), 1);
76 assert_int_equal(pcmk__cmp_nvpair_blocks(not_first_id, first_id,
77 &unpack_data), -1);
78 assert_int_equal(pcmk__cmp_nvpair_blocks(first_id, no_id,
79 &unpack_data), 1);
80 assert_int_equal(pcmk__cmp_nvpair_blocks(no_id, first_id,
81 &unpack_data), -1);
82
83 pcmk__xml_free(first_id);
84 pcmk__xml_free(not_first_id);
85 pcmk__xml_free(no_id);
86 }
87
88 static void
89 null_special_id_ignored(void **state)
90 {
91 xmlNode *no_id = pcmk__xml_parse(XML_NO_ID);
92 xmlNode *high = pcmk__xml_parse(XML_HIGH);
93
94 assert_non_null(no_id);
95 assert_non_null(high);
96
97 unpack_data.first_id = NULL;
98
99 unpack_data.overwrite = false;
100 assert_int_equal(pcmk__cmp_nvpair_blocks(no_id, high, &unpack_data), 1);
101
102 unpack_data.overwrite = true;
103 assert_int_equal(pcmk__cmp_nvpair_blocks(no_id, high, &unpack_data), -1);
104
105 unpack_data.first_id = FIRST_ID;
106
107 pcmk__xml_free(no_id);
108 pcmk__xml_free(high);
109 }
110
111 static void
112 highest_score_wins(void **state)
113 {
114 xmlNode *low = pcmk__xml_parse(XML_LOW);
115 xmlNode *low2 = pcmk__xml_parse(XML_LOW);
116 xmlNode *high = pcmk__xml_parse(XML_HIGH);
117
118 assert_non_null(low);
119 assert_non_null(high);
120
121 unpack_data.overwrite = false;
122 assert_int_equal(pcmk__cmp_nvpair_blocks(low, high, &unpack_data), 1);
123 assert_int_equal(pcmk__cmp_nvpair_blocks(low, low2, &unpack_data), 0);
124
125 unpack_data.overwrite = true;
126 assert_int_equal(pcmk__cmp_nvpair_blocks(low, high, &unpack_data), -1);
127 assert_int_equal(pcmk__cmp_nvpair_blocks(low, low2, &unpack_data), 0);
128
129 pcmk__xml_free(low);
130 pcmk__xml_free(high);
131 }
132
133 static void
134 invalid_score_is_0(void **state)
135 {
136 xmlNode *zero = pcmk__xml_parse(XML_FIRST_ID);
137 xmlNode *bad = pcmk__xml_parse(XML_BAD);
138
139 assert_non_null(zero);
140 assert_non_null(bad);
141
142 assert_int_equal(pcmk__cmp_nvpair_blocks(zero, bad, NULL), 0);
143 assert_int_equal(pcmk__cmp_nvpair_blocks(bad, zero, NULL), 0);
144
145 pcmk__xml_free(zero);
146 pcmk__xml_free(bad);
147 }
148
149 PCMK__UNIT_TEST(pcmk__xml_test_setup_group, pcmk__xml_test_teardown_group,
150 cmocka_unit_test(null_lowest),
151 cmocka_unit_test(special_id_highest),
152 cmocka_unit_test(null_special_id_ignored),
153 cmocka_unit_test(highest_score_wins),
154 cmocka_unit_test(invalid_score_is_0))