MCPcopy Create free account
hub / github.com/ClusterLabs/pacemaker / test_rule

Function test_rule

lib/pengine/rules.c:56–94  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

54}
55
56gboolean
57test_rule(xmlNode * rule, GHashTable * node_hash, enum rsc_role_e role, crm_time_t * now)
58{
59 xmlNode *expr = NULL;
60 gboolean test = TRUE;
61 gboolean empty = TRUE;
62 gboolean passed = TRUE;
63 gboolean do_and = TRUE;
64 const char *value = NULL;
65
66 rule = expand_idref(rule, NULL);
67 value = crm_element_value(rule, XML_RULE_ATTR_BOOLEAN_OP);
68 if (safe_str_eq(value, "or")) {
69 do_and = FALSE;
70 passed = FALSE;
71 }
72
73 crm_trace("Testing rule %s", ID(rule));
74 for (expr = __xml_first_child(rule); expr != NULL; expr = __xml_next(expr)) {
75 test = test_expression(expr, node_hash, role, now);
76 empty = FALSE;
77
78 if (test && do_and == FALSE) {
79 crm_trace("Expression %s/%s passed", ID(rule), ID(expr));
80 return TRUE;
81
82 } else if (test == FALSE && do_and) {
83 crm_trace("Expression %s/%s failed", ID(rule), ID(expr));
84 return FALSE;
85 }
86 }
87
88 if (empty) {
89 crm_err("Invalid Rule %s: rules must contain at least one expression", ID(rule));
90 }
91
92 crm_trace("Rule %s %s", ID(rule), passed ? "passed" : "failed");
93 return passed;
94}
95
96gboolean
97test_expression(xmlNode * expr, GHashTable * node_hash, enum rsc_role_e role, crm_time_t * now)

Callers 3

test_rulesetFunction · 0.85
test_expressionFunction · 0.85
generate_location_ruleFunction · 0.85

Calls 5

expand_idrefFunction · 0.85
crm_element_valueFunction · 0.85
__xml_first_childFunction · 0.85
__xml_nextFunction · 0.85
test_expressionFunction · 0.85

Tested by

no test coverage detected