13#include <libxml/tree.h>
29 "<" PCMK_XE_META_ATTRIBUTES " " PCMK_XA_ID "='ia1' " \
30 PCMK_XA_SCORE "='100' >" \
31 "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp1-1' " \
32 PCMK_XA_NAME "='name1' " PCMK_XA_VALUE "='1' />\n" \
33 "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp1-2' " \
34 PCMK_XA_NAME "='name2' " PCMK_XA_VALUE "='1' />\n" \
35 "<" PCMK_XE_RULE " " PCMK_XA_ID "='rp' >\n" \
36 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='ep' " \
37 PCMK_XA_OPERATION "='" PCMK_VALUE_GT "' " \
38 PCMK_XA_START "='2024-11-05 00:00:00' />\n" \
39 "</" PCMK_XE_RULE ">\n" \
40 "</" PCMK_XE_META_ATTRIBUTES ">\n" \
41 "<" PCMK_XE_INSTANCE_ATTRIBUTES " " PCMK_XA_ID "='ia2' " \
42 PCMK_XA_SCORE "='2' >" \
43 "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp2-1' " \
44 PCMK_XA_NAME "='name1' " PCMK_XA_VALUE "='2' />\n" \
45 "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp2-2' " \
46 PCMK_XA_NAME "='name2' " PCMK_XA_VALUE "='2' />\n" \
47 "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp2-3' " \
48 PCMK_XA_NAME "='name3' " PCMK_XA_VALUE "='2' />\n" \
49 "</" PCMK_XE_INSTANCE_ATTRIBUTES ">\n" \
50 "<" PCMK_XE_INSTANCE_ATTRIBUTES " " PCMK_XA_ID "='ia3' " \
51 PCMK_XA_SCORE "='30' >" \
52 "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp3-1' " \
53 PCMK_XA_NAME "='name1' " PCMK_XA_VALUE "='3' />\n" \
54 "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp3-2' " \
55 PCMK_XA_NAME "='name2' " PCMK_XA_VALUE "='3' />\n" \
56 "<" PCMK_XE_NVPAIR " " PCMK_XA_ID "='nvp3-3' " \
57 PCMK_XA_NAME "='name3' " PCMK_XA_VALUE "='3' />\n" \
58 "</" PCMK_XE_INSTANCE_ATTRIBUTES ">\n" \
74 &rule_input, values, next_change);
75 assert_int_equal(g_hash_table_size(values), 0);
76 g_hash_table_destroy(values);
82null_table(
void **state)
94 "id1", &rule_input, NULL,
102rule_passes(
void **state)
112 assert_non_null(xml);
115 assert_int_equal(g_hash_table_size(values), 3);
116 assert_string_equal(g_hash_table_lookup(values,
"name1"),
"1");
117 assert_string_equal(g_hash_table_lookup(values,
"name2"),
"1");
118 assert_string_equal(g_hash_table_lookup(values,
"name3"),
"3");
123 g_hash_table_destroy(values);
127rule_fails(
void **state)
140 assert_non_null(xml);
143 assert_int_equal(g_hash_table_size(values), 3);
144 assert_string_equal(g_hash_table_lookup(values,
"name1"),
"3");
145 assert_string_equal(g_hash_table_lookup(values,
"name2"),
"3");
146 assert_string_equal(g_hash_table_lookup(values,
"name3"),
"3");
153 g_hash_table_destroy(values);
157element_name(
void **state)
166 assert_non_null(xml);
174 assert_int_equal(g_hash_table_size(values), 2);
175 assert_string_equal(g_hash_table_lookup(values,
"name1"),
"1");
176 assert_string_equal(g_hash_table_lookup(values,
"name2"),
"1");
177 assert_null(g_hash_table_lookup(values,
"name3"));
178 g_hash_table_remove_all(values);
181 &rule_input, values, NULL);
182 assert_int_equal(g_hash_table_size(values), 3);
183 assert_string_equal(g_hash_table_lookup(values,
"name1"),
"3");
184 assert_string_equal(g_hash_table_lookup(values,
"name2"),
"3");
185 assert_string_equal(g_hash_table_lookup(values,
"name3"),
"3");
189 g_hash_table_destroy(values);
193first_id(
void **state)
198 assert_non_null(xml);
203 assert_int_equal(g_hash_table_size(values), 3);
204 assert_string_equal(g_hash_table_lookup(values,
"name1"),
"2");
205 assert_string_equal(g_hash_table_lookup(values,
"name2"),
"2");
206 assert_string_equal(g_hash_table_lookup(values,
"name3"),
"2");
209 g_hash_table_destroy(values);
213 cmocka_unit_test(null_xml),
214 cmocka_unit_test(null_table),
215 cmocka_unit_test(rule_passes),
216 cmocka_unit_test(rule_fails),
217 cmocka_unit_test(element_name),
218 cmocka_unit_test(first_id))
void crm_time_free(crm_time_t *dt)
crm_time_t * crm_time_new(const char *string)
struct crm_time_s crm_time_t
int crm_time_compare(const crm_time_t *a, const crm_time_t *b)
void pcmk_unpack_nvpair_blocks(const xmlNode *xml, const char *element_name, const char *first_id, const pcmk_rule_input_t *rule_input, GHashTable *values, crm_time_t *next_change)
Unpack nvpair blocks contained by an XML element into a hash table, evaluated for any rules.
GHashTable * pcmk__strkey_table(GDestroyNotify key_destroy_func, GDestroyNotify value_destroy_func)
#define pcmk__assert_asserts(stmt)
int pcmk__xml_test_teardown_group(void **state)
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)
int pcmk__xml_test_setup_group(void **state)
Wrappers for and extensions to libxml2.
void pcmk__xml_free(xmlNode *xml)
xmlNode * pcmk__xml_parse(const char *input)
#define PCMK_XE_INSTANCE_ATTRIBUTES
#define PCMK_XE_META_ATTRIBUTES