24#define MATCHED_STRING "server-north"
26static const regmatch_t submatches[] = {
27 { .rm_so = 0, .rm_eo = 12 },
28 { .rm_so = 7, .rm_eo = 12 },
36 .rsc_id_submatches = submatches,
73 g_hash_table_destroy(rule_input.
rsc_meta);
86assert_attr_expression(
const char *xml_string,
int reference_rc)
100#define EXPR_SOURCE_LITERAL_PASSES \
101 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
102 PCMK_XA_ATTRIBUTE "='foo' " \
103 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
104 PCMK_XA_VALUE "='bar' " \
105 PCMK_XA_VALUE_SOURCE "='" PCMK_VALUE_LITERAL "' />"
108null_invalid(
void **state)
124#define EXPR_ID_MISSING \
125 "<" PCMK_XE_EXPRESSION " " \
126 PCMK_XA_ATTRIBUTE "='foo' " \
127 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
128 PCMK_XA_VALUE "='bar' />"
131id_missing(
void **state)
142#define EXPR_ATTR_MISSING \
143 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
144 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
145 PCMK_XA_VALUE "='bar' />"
148attr_missing(
void **state)
153#define EXPR_ATTR_SUBMATCH_PASSES \
154 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
155 PCMK_XA_ATTRIBUTE "='prefer-%1' " \
156 PCMK_XA_OPERATION "='" PCMK_VALUE_DEFINED "' />"
159attr_with_submatch_passes(
void **state)
164#define EXPR_ATTR_SUBMATCH_FAILS \
165 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
166 PCMK_XA_ATTRIBUTE "='undefined-%1' " \
167 PCMK_XA_OPERATION "='" PCMK_VALUE_DEFINED "' />"
170attr_with_submatch_fails(
void **state)
180#define EXPR_SOURCE_MISSING \
181 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
182 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
183 PCMK_XA_ATTRIBUTE "='foo' " \
184 PCMK_XA_VALUE "='bar' />"
187source_missing(
void **state)
193#define EXPR_SOURCE_INVALID \
194 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
195 PCMK_XA_ATTRIBUTE "='foo' " \
196 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
197 PCMK_XA_VALUE "='bar' " \
198 PCMK_XA_VALUE_SOURCE "='not-a-source' />"
201source_invalid(
void **state)
208source_literal_passes(
void **state)
213#define EXPR_SOURCE_LITERAL_VALUE_FAILS \
214 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
215 PCMK_XA_ATTRIBUTE "='foo' " \
216 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
217 PCMK_XA_VALUE "='wrong-value' " \
218 PCMK_XA_VALUE_SOURCE "='" PCMK_VALUE_LITERAL "' />"
221source_literal_value_fails(
void **state)
227#define EXPR_SOURCE_LITERAL_ATTR_FAILS \
228 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
229 PCMK_XA_ATTRIBUTE "='not-an-attribute' " \
230 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
231 PCMK_XA_VALUE "='bar' " \
232 PCMK_XA_VALUE_SOURCE "='" PCMK_VALUE_LITERAL "' />"
235source_literal_attr_fails(
void **state)
241#define EXPR_SOURCE_PARAM_MISSING \
242 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
243 PCMK_XA_ATTRIBUTE "='foo' " \
244 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
245 PCMK_XA_VALUE "='not-a-param' " \
246 PCMK_XA_VALUE_SOURCE "='" PCMK_VALUE_PARAM "' />"
249source_params_missing(
void **state)
254#define EXPR_SOURCE_PARAM_PASSES \
255 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
256 PCMK_XA_ATTRIBUTE "='foo' " \
257 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
258 PCMK_XA_VALUE "='foo-param' " \
259 PCMK_XA_VALUE_SOURCE "='" PCMK_VALUE_PARAM "' />"
262source_params_passes(
void **state)
267#define EXPR_SOURCE_PARAM_FAILS \
268 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
269 PCMK_XA_ATTRIBUTE "='foo' " \
270 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
271 PCMK_XA_VALUE "='myparam' " \
272 PCMK_XA_VALUE_SOURCE "='" PCMK_VALUE_PARAM "' />"
275source_params_fails(
void **state)
280#define EXPR_SOURCE_META_MISSING \
281 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
282 PCMK_XA_ATTRIBUTE "='foo' " \
283 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
284 PCMK_XA_VALUE "='not-a-meta' " \
285 PCMK_XA_VALUE_SOURCE "='" PCMK_VALUE_META "' />"
288source_meta_missing(
void **state)
293#define EXPR_SOURCE_META_PASSES \
294 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
295 PCMK_XA_ATTRIBUTE "='foo' " \
296 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
297 PCMK_XA_VALUE "='foo-meta' " \
298 PCMK_XA_VALUE_SOURCE "='" PCMK_VALUE_META "' />"
301source_meta_passes(
void **state)
306#define EXPR_SOURCE_META_FAILS \
307 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
308 PCMK_XA_ATTRIBUTE "='foo' " \
309 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
310 PCMK_XA_VALUE "='mymeta' " \
311 PCMK_XA_VALUE_SOURCE "='" PCMK_VALUE_META "' />"
314source_meta_fails(
void **state)
324#define EXPR_TYPE_DEFAULT_NUMBER \
325 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
326 PCMK_XA_OPERATION "='" PCMK_VALUE_GT "' " \
327 PCMK_XA_ATTRIBUTE "='num' " \
328 PCMK_XA_VALUE "='2.5' />"
331type_default_number(
void **state)
337#define EXPR_TYPE_DEFAULT_INT \
338 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
339 PCMK_XA_OPERATION "='" PCMK_VALUE_GT "' " \
340 PCMK_XA_ATTRIBUTE "='num' " \
341 PCMK_XA_VALUE "='2' />"
344type_default_int(
void **state)
350#define EXPR_TYPE_STRING_PASSES \
351 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
352 PCMK_XA_TYPE "='" PCMK_VALUE_STRING "' " \
353 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
354 PCMK_XA_ATTRIBUTE "='foo' " \
355 PCMK_XA_VALUE "='bar' />"
358type_string_passes(
void **state)
363#define EXPR_TYPE_STRING_FAILS \
364 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
365 PCMK_XA_TYPE "='" PCMK_VALUE_STRING "' " \
366 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
367 PCMK_XA_ATTRIBUTE "='foo' " \
368 PCMK_XA_VALUE "='bat' />"
371type_string_fails(
void **state)
376#define EXPR_TYPE_INTEGER_PASSES \
377 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
378 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
379 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
380 PCMK_XA_ATTRIBUTE "='num' " \
381 PCMK_XA_VALUE "='10' />"
384type_integer_passes(
void **state)
389#define EXPR_TYPE_INTEGER_FAILS \
390 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
391 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
392 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
393 PCMK_XA_ATTRIBUTE "='num' " \
394 PCMK_XA_VALUE "='11' />"
397type_integer_fails(
void **state)
402#define EXPR_TYPE_INTEGER_TRUNCATION \
403 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
404 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
405 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
406 PCMK_XA_ATTRIBUTE "='num' " \
407 PCMK_XA_VALUE "='10.5' />"
410type_integer_truncation(
void **state)
415#define EXPR_TYPE_NUMBER_PASSES \
416 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
417 PCMK_XA_TYPE "='" PCMK_VALUE_NUMBER "' " \
418 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
419 PCMK_XA_ATTRIBUTE "='num' " \
420 PCMK_XA_VALUE "='10.0' />"
423type_number_passes(
void **state)
428#define EXPR_TYPE_NUMBER_FAILS \
429 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
430 PCMK_XA_TYPE "='" PCMK_VALUE_NUMBER "' " \
431 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
432 PCMK_XA_ATTRIBUTE "='num' " \
433 PCMK_XA_VALUE "='10.1' />"
436type_number_fails(
void **state)
441#define EXPR_TYPE_VERSION_PASSES \
442 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
443 PCMK_XA_TYPE "='" PCMK_VALUE_VERSION "' " \
444 PCMK_XA_OPERATION "='" PCMK_VALUE_GT "' " \
445 PCMK_XA_ATTRIBUTE "='ver' " \
446 PCMK_XA_VALUE "='3.4.9' />"
449type_version_passes(
void **state)
454#define EXPR_TYPE_VERSION_EQUALITY \
455 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
456 PCMK_XA_TYPE "='" PCMK_VALUE_VERSION "' " \
457 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
458 PCMK_XA_ATTRIBUTE "='ver' " \
459 PCMK_XA_VALUE "='3.5' />"
462type_version_equality(
void **state)
467#define EXPR_TYPE_VERSION_FAILS \
468 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
469 PCMK_XA_TYPE "='" PCMK_VALUE_VERSION "' " \
470 PCMK_XA_OPERATION "='" PCMK_VALUE_GTE "' " \
471 PCMK_XA_ATTRIBUTE "='ver' " \
472 PCMK_XA_VALUE "='4.0' />"
475type_version_fails(
void **state)
484#define EXPR_OP_MISSING \
485 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
486 PCMK_XA_ATTRIBUTE "='foo' " \
487 PCMK_XA_VALUE "='bar' />"
490op_missing(
void **state)
495#define EXPR_OP_INVALID \
496 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
497 PCMK_XA_ATTRIBUTE "='foo' " \
498 PCMK_XA_OPERATION "='not-an-operation' " \
499 PCMK_XA_VALUE "='bar' />"
502op_invalid(
void **state)
507#define EXPR_OP_LT_PASSES \
508 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
509 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
510 PCMK_XA_OPERATION "='" PCMK_VALUE_LT "' " \
511 PCMK_XA_ATTRIBUTE "='num' " \
512 PCMK_XA_VALUE "='20' />"
515op_lt_passes(
void **state)
520#define EXPR_OP_LT_FAILS \
521 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
522 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
523 PCMK_XA_OPERATION "='" PCMK_VALUE_LT "' " \
524 PCMK_XA_ATTRIBUTE "='num' " \
525 PCMK_XA_VALUE "='2' />"
528op_lt_fails(
void **state)
533#define EXPR_OP_GT_PASSES \
534 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
535 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
536 PCMK_XA_OPERATION "='" PCMK_VALUE_GT "' " \
537 PCMK_XA_ATTRIBUTE "='num' " \
538 PCMK_XA_VALUE "='2' />"
541op_gt_passes(
void **state)
546#define EXPR_OP_GT_FAILS \
547 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
548 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
549 PCMK_XA_OPERATION "='" PCMK_VALUE_GT "' " \
550 PCMK_XA_ATTRIBUTE "='num' " \
551 PCMK_XA_VALUE "='20' />"
554op_gt_fails(
void **state)
559#define EXPR_OP_LTE_LT_PASSES \
560 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
561 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
562 PCMK_XA_OPERATION "='" PCMK_VALUE_LTE "' " \
563 PCMK_XA_ATTRIBUTE "='num' " \
564 PCMK_XA_VALUE "='20' />"
567op_lte_lt_passes(
void **state)
572#define EXPR_OP_LTE_EQ_PASSES \
573 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
574 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
575 PCMK_XA_OPERATION "='" PCMK_VALUE_LTE "' " \
576 PCMK_XA_ATTRIBUTE "='num' " \
577 PCMK_XA_VALUE "='10' />"
580op_lte_eq_passes(
void **state)
585#define EXPR_OP_LTE_FAILS \
586 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
587 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
588 PCMK_XA_OPERATION "='" PCMK_VALUE_LTE "' " \
589 PCMK_XA_ATTRIBUTE "='num' " \
590 PCMK_XA_VALUE "='9' />"
593op_lte_fails(
void **state)
598#define EXPR_OP_GTE_GT_PASSES \
599 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
600 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
601 PCMK_XA_OPERATION "='" PCMK_VALUE_GTE "' " \
602 PCMK_XA_ATTRIBUTE "='num' " \
603 PCMK_XA_VALUE "='1' />"
606op_gte_gt_passes(
void **state)
611#define EXPR_OP_GTE_EQ_PASSES \
612 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
613 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
614 PCMK_XA_OPERATION "='" PCMK_VALUE_GTE "' " \
615 PCMK_XA_ATTRIBUTE "='num' " \
616 PCMK_XA_VALUE "='10' />"
619op_gte_eq_passes(
void **state)
624#define EXPR_OP_GTE_FAILS \
625 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
626 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
627 PCMK_XA_OPERATION "='" PCMK_VALUE_GTE "' " \
628 PCMK_XA_ATTRIBUTE "='num' " \
629 PCMK_XA_VALUE "='11' />"
632op_gte_fails(
void **state)
638#define EXPR_OP_EQ_PASSES \
639 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
640 PCMK_XA_TYPE "='" PCMK_VALUE_NUMBER "' " \
641 PCMK_XA_ATTRIBUTE "='foo' " \
642 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
643 PCMK_XA_VALUE "='bar' " \
644 PCMK_XA_VALUE_SOURCE "='" PCMK_VALUE_LITERAL "' />"
647op_eq_passes(
void **state)
652#define EXPR_OP_EQ_FAILS \
653 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
654 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
655 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' " \
656 PCMK_XA_ATTRIBUTE "='num' " \
657 PCMK_XA_VALUE "='bar' />"
660op_eq_fails(
void **state)
665#define EXPR_OP_NE_PASSES \
666 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
667 PCMK_XA_TYPE "='" PCMK_VALUE_STRING "' " \
668 PCMK_XA_ATTRIBUTE "='foo' " \
669 PCMK_XA_OPERATION "='" PCMK_VALUE_NE "' " \
670 PCMK_XA_VALUE "='bat' " \
671 PCMK_XA_VALUE_SOURCE "='" PCMK_VALUE_LITERAL "' />"
674op_ne_passes(
void **state)
679#define EXPR_OP_NE_FAILS \
680 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
681 PCMK_XA_TYPE "='" PCMK_VALUE_INTEGER "' " \
682 PCMK_XA_OPERATION "='" PCMK_VALUE_NE "' " \
683 PCMK_XA_ATTRIBUTE "='num' " \
684 PCMK_XA_VALUE "='10' />"
687op_ne_fails(
void **state)
692#define EXPR_OP_DEFINED_PASSES \
693 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
694 PCMK_XA_ATTRIBUTE "='foo' " \
695 PCMK_XA_OPERATION "='" PCMK_VALUE_DEFINED "' />"
698op_defined_passes(
void **state)
703#define EXPR_OP_DEFINED_FAILS \
704 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
705 PCMK_XA_ATTRIBUTE "='boo' " \
706 PCMK_XA_OPERATION "='" PCMK_VALUE_DEFINED "' />"
709op_defined_fails(
void **state)
714#define EXPR_OP_DEFINED_WITH_VALUE \
715 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
716 PCMK_XA_ATTRIBUTE "='foo' " \
717 PCMK_XA_VALUE "='bar' " \
718 PCMK_XA_OPERATION "='" PCMK_VALUE_DEFINED "' />"
721op_defined_with_value(
void **state)
727#define EXPR_OP_UNDEFINED_PASSES \
728 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
729 PCMK_XA_ATTRIBUTE "='boo' " \
730 PCMK_XA_OPERATION "='" PCMK_VALUE_NOT_DEFINED "' />"
733op_undefined_passes(
void **state)
738#define EXPR_OP_UNDEFINED_FAILS \
739 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
740 PCMK_XA_ATTRIBUTE "='foo' " \
741 PCMK_XA_OPERATION "='" PCMK_VALUE_NOT_DEFINED "' />"
744op_undefined_fails(
void **state)
754#define EXPR_VALUE_MISSING_DEFINED_OK \
755 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
756 PCMK_XA_ATTRIBUTE "='num' " \
757 PCMK_XA_OPERATION "='" PCMK_VALUE_DEFINED "' />"
760value_missing_defined_ok(
void **state)
765#define EXPR_VALUE_MISSING_EQ_OK \
766 "<" PCMK_XE_EXPRESSION " " PCMK_XA_ID "='e' " \
767 PCMK_XA_ATTRIBUTE "='not-an-attr' " \
768 PCMK_XA_OPERATION "='" PCMK_VALUE_EQ "' />"
771value_missing_eq_ok(
void **state)
778#define expr_test(f) cmocka_unit_test_setup_teardown(f, setup, teardown)
781 cmocka_unit_test(null_invalid),
G_GNUC_INTERNAL int pcmk__evaluate_attr_expression(const xmlNode *expression, const pcmk_rule_input_t *rule_input)
#define EXPR_OP_LTE_LT_PASSES
#define EXPR_OP_GTE_FAILS
#define EXPR_ATTR_SUBMATCH_PASSES
#define EXPR_ATTR_MISSING
#define EXPR_TYPE_STRING_PASSES
#define EXPR_SOURCE_META_FAILS
#define EXPR_SOURCE_LITERAL_VALUE_FAILS
#define EXPR_TYPE_VERSION_PASSES
#define EXPR_SOURCE_MISSING
#define EXPR_OP_GTE_EQ_PASSES
#define EXPR_TYPE_STRING_FAILS
#define EXPR_TYPE_NUMBER_PASSES
#define EXPR_TYPE_DEFAULT_NUMBER
#define EXPR_TYPE_DEFAULT_INT
#define EXPR_SOURCE_PARAM_MISSING
#define EXPR_SOURCE_PARAM_PASSES
#define EXPR_ATTR_SUBMATCH_FAILS
#define EXPR_SOURCE_PARAM_FAILS
#define EXPR_OP_NE_PASSES
#define EXPR_SOURCE_INVALID
#define EXPR_TYPE_NUMBER_FAILS
#define EXPR_VALUE_MISSING_DEFINED_OK
#define EXPR_TYPE_INTEGER_FAILS
#define EXPR_OP_EQ_PASSES
#define EXPR_SOURCE_META_PASSES
#define EXPR_TYPE_INTEGER_TRUNCATION
#define EXPR_TYPE_VERSION_FAILS
#define EXPR_OP_LTE_FAILS
#define EXPR_OP_GT_PASSES
#define EXPR_SOURCE_LITERAL_ATTR_FAILS
#define EXPR_OP_UNDEFINED_PASSES
#define EXPR_OP_DEFINED_WITH_VALUE
#define EXPR_OP_LTE_EQ_PASSES
#define EXPR_SOURCE_LITERAL_PASSES
#define EXPR_OP_DEFINED_FAILS
#define EXPR_VALUE_MISSING_EQ_OK
#define EXPR_TYPE_VERSION_EQUALITY
#define EXPR_TYPE_INTEGER_PASSES
#define EXPR_SOURCE_META_MISSING
#define EXPR_OP_LT_PASSES
#define EXPR_OP_DEFINED_PASSES
#define EXPR_OP_GTE_GT_PASSES
void pcmk__insert_dup(GHashTable *table, const char *name, const char *value)
GHashTable * pcmk__strkey_table(GDestroyNotify key_destroy_func, GDestroyNotify value_destroy_func)
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)
int pcmk__xml_test_setup_group(void **state)
Wrappers for and extensions to libxml2.
void free_xml(xmlNode *child)
xmlNode * pcmk__xml_parse(const char *input)