35 assert_date_expression(
const xmlNode *xml,
const char *now_s,
36 const char *next_change_s,
const char *reference_s,
41 bool check_next_change = (next_change_s != NULL) && (reference_s != NULL);
43 if (check_next_change) {
52 if (check_next_change) {
61 #define EXPR_LT_VALID \ 62 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 63 PCMK_XA_OPERATION "='" PCMK_VALUE_LT "' " \ 64 PCMK_XA_END "='2024-02-01 15:00:00' />" 67 null_invalid(
void **state)
81 null_next_change_ok(
void **state)
89 #define EXPR_ID_MISSING \ 90 "<" PCMK_XE_DATE_EXPRESSION " " \ 91 PCMK_XA_OPERATION "='" PCMK_VALUE_LT "' " \ 92 PCMK_XA_END "='2024-02-01 15:00:00' />" 95 id_missing(
void **state)
103 #define EXPR_OP_INVALID \ 104 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 105 PCMK_XA_OPERATION "='not-a-choice' />" 108 op_invalid(
void **state)
116 #define EXPR_LT_MISSING_END \ 117 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 118 PCMK_XA_OPERATION "='" PCMK_VALUE_LT "' />" 121 lt_missing_end(
void **state)
129 #define EXPR_LT_INVALID_END \ 130 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 131 PCMK_XA_OPERATION "='" PCMK_VALUE_LT "' " \ 132 PCMK_XA_END "='not-a-datetime' />" 135 lt_invalid_end(
void **state)
144 lt_valid(
void **state)
149 assert_date_expression(xml,
"2023-01-01 05:00:00",
"2024-02-01 10:00:00",
153 assert_date_expression(xml,
"2024-02-01 14:59:59",
"2024-02-01 18:00:00",
157 assert_date_expression(xml,
"2024-02-01 15:00:00",
"2024-02-01 20:00:00",
161 assert_date_expression(xml,
"2024-03-01 12:00:00",
"2024-02-01 20:00:00",
167 #define EXPR_GT_MISSING_START \ 168 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 169 PCMK_XA_OPERATION "='" PCMK_VALUE_GT "' />" 172 gt_missing_start(
void **state)
180 #define EXPR_GT_INVALID_START \ 181 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 182 PCMK_XA_OPERATION "='" PCMK_VALUE_GT "' " \ 183 PCMK_XA_START "='not-a-datetime' />" 186 gt_invalid_start(
void **state)
194 #define EXPR_GT_VALID \ 195 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 196 PCMK_XA_OPERATION "='" PCMK_VALUE_GT "' " \ 197 PCMK_XA_START "='2024-02-01 12:00:00' />" 200 gt_valid(
void **state)
205 assert_date_expression(xml,
"2024-01-01 04:30:05",
"2024-01-01 11:00:00",
209 assert_date_expression(xml,
"2024-02-01 11:59:59",
"2024-02-01 18:00:00",
213 assert_date_expression(xml,
"2024-02-01 12:00:00",
"2024-02-01 18:00:00",
217 assert_date_expression(xml,
"2024-02-01 12:00:01",
"2024-02-01 18:00:00",
221 assert_date_expression(xml,
"2024-03-01 05:03:11",
"2024-04-04 04:04:04",
227 #define EXPR_RANGE_MISSING \ 228 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 229 PCMK_XA_OPERATION "='" PCMK_VALUE_IN_RANGE "' />" 232 range_missing(
void **state)
244 #define EXPR_RANGE_INVALID_START_INVALID_END \ 245 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 246 PCMK_XA_OPERATION "='" PCMK_VALUE_IN_RANGE "' " \ 247 PCMK_XA_START "='not-a-date' " \ 248 PCMK_XA_END "='not-a-date' />" 251 range_invalid_start_invalid_end(
void **state)
259 #define EXPR_RANGE_INVALID_START_ONLY \ 260 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 261 PCMK_XA_OPERATION "='" PCMK_VALUE_IN_RANGE "' " \ 262 PCMK_XA_START "='not-a-date' />" 265 range_invalid_start_only(
void **state)
273 #define EXPR_RANGE_VALID_START_ONLY \ 274 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 275 PCMK_XA_OPERATION "='" PCMK_VALUE_IN_RANGE "' " \ 276 PCMK_XA_START "='2024-02-01 12:00:00' />" 279 range_valid_start_only(
void **state)
284 assert_date_expression(xml,
"2024-01-01 04:30:05",
"2024-01-01 11:00:00",
288 assert_date_expression(xml,
"2024-02-01 11:59:59",
"2024-02-01 18:00:00",
292 assert_date_expression(xml,
"2024-02-01 12:00:00",
"2024-02-01 18:00:00",
296 assert_date_expression(xml,
"2024-03-01 05:03:11",
"2024-04-04 04:04:04",
302 #define EXPR_RANGE_INVALID_END_ONLY \ 303 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 304 PCMK_XA_OPERATION "='" PCMK_VALUE_IN_RANGE "' " \ 305 PCMK_XA_END "='not-a-date' />" 308 range_invalid_end_only(
void **state)
316 #define EXPR_RANGE_VALID_END_ONLY \ 317 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 318 PCMK_XA_OPERATION "='" PCMK_VALUE_IN_RANGE "' " \ 319 PCMK_XA_END "='2024-02-01 15:00:00' />" 322 range_valid_end_only(
void **state)
327 assert_date_expression(xml,
"2024-01-01 04:30:05",
"2024-01-01 11:00:00",
331 assert_date_expression(xml,
"2024-02-01 14:59:59",
"2024-02-01 18:00:00",
335 assert_date_expression(xml,
"2024-02-01 15:00:00",
"2024-02-01 18:00:00",
339 assert_date_expression(xml,
"2024-02-01 15:00:01",
"2024-04-04 04:04:04",
345 #define EXPR_RANGE_VALID_START_INVALID_END \ 346 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 347 PCMK_XA_OPERATION "='" PCMK_VALUE_IN_RANGE "' " \ 348 PCMK_XA_START "='2024-02-01 12:00:00' " \ 349 PCMK_XA_END "='not-a-date' />" 352 range_valid_start_invalid_end(
void **state)
356 assert_date_expression(xml,
"2024-01-01 04:30:05", NULL, NULL,
361 #define EXPR_RANGE_INVALID_START_VALID_END \ 362 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 363 PCMK_XA_OPERATION "='" PCMK_VALUE_IN_RANGE "' " \ 364 PCMK_XA_START "='not-a-date' " \ 365 PCMK_XA_END "='2024-02-01 15:00:00' />" 368 range_invalid_start_valid_end(
void **state)
372 assert_date_expression(xml,
"2024-01-01 04:30:05", NULL, NULL,
377 #define EXPR_RANGE_VALID_START_VALID_END \ 378 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 379 PCMK_XA_OPERATION "='" PCMK_VALUE_IN_RANGE "' " \ 380 PCMK_XA_START "='2024-02-01 12:00:00' " \ 381 PCMK_XA_END "='2024-02-01 15:00:00' />" 384 range_valid_start_valid_end(
void **state)
389 assert_date_expression(xml,
"2024-01-01 04:30:05",
"2024-01-01 11:00:00",
393 assert_date_expression(xml,
"2024-02-01 11:59:59",
"2024-02-01 14:00:00",
397 assert_date_expression(xml,
"2024-02-01 12:00:00",
"2024-02-01 14:30:00",
401 assert_date_expression(xml,
"2024-02-01 14:03:11",
"2024-04-04 04:04:04",
405 assert_date_expression(xml,
"2024-02-01 15:00:00",
"2028-04-04 04:04:04",
409 assert_date_expression(xml,
"2024-02-01 15:00:01",
"2028-04-04 04:04:04",
415 #define EXPR_RANGE_VALID_START_INVALID_DURATION \ 416 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 417 PCMK_XA_OPERATION "='" PCMK_VALUE_IN_RANGE "' " \ 418 PCMK_XA_START "='2024-02-01 12:00:00'>" \ 419 "<" PCMK_XE_DURATION " " PCMK_XA_ID "='d' " \ 420 PCMK_XA_HOURS "='not-a-number' />" \ 421 "</" PCMK_XE_DATE_EXPRESSION ">" 424 range_valid_start_invalid_duration(
void **state)
428 assert_date_expression(xml,
"2024-02-01 04:30:05", NULL, NULL,
433 #define EXPR_RANGE_VALID_START_VALID_DURATION \ 434 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 435 PCMK_XA_OPERATION "='" PCMK_VALUE_IN_RANGE "' " \ 436 PCMK_XA_START "='2024-02-01 12:00:00'>" \ 437 "<" PCMK_XE_DURATION " " PCMK_XA_ID "='d' " \ 438 PCMK_XA_HOURS "='3' />" \ 439 "</" PCMK_XE_DATE_EXPRESSION ">" 442 range_valid_start_valid_duration(
void **state)
447 assert_date_expression(xml,
"2024-01-01 04:30:05",
"2024-01-01 11:00:00",
451 assert_date_expression(xml,
"2024-02-01 11:59:59",
"2024-02-01 14:00:00",
455 assert_date_expression(xml,
"2024-02-01 12:00:00",
"2024-02-01 14:30:00",
459 assert_date_expression(xml,
"2024-02-01 14:03:11",
"2024-04-04 04:04:04",
463 assert_date_expression(xml,
"2024-02-01 15:00:00",
"2028-04-04 04:04:04",
467 assert_date_expression(xml,
"2024-02-01 15:00:01",
"2028-04-04 04:04:04",
473 #define EXPR_RANGE_VALID_START_DURATION_MISSING_ID \ 474 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='d' " \ 475 PCMK_XA_OPERATION "='" PCMK_VALUE_IN_RANGE "' " \ 476 PCMK_XA_START "='2024-02-01 12:00:00'>" \ 477 "<" PCMK_XE_DURATION " " PCMK_XA_HOURS "='3' />" \ 478 "</" PCMK_XE_DATE_EXPRESSION ">" 481 range_valid_start_duration_missing_id(
void **state)
483 xmlNodePtr xml = NULL;
487 assert_date_expression(xml,
"2024-02-01 04:30:05", NULL, NULL,
492 #define EXPR_SPEC_MISSING \ 493 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 494 PCMK_XA_OPERATION "='" PCMK_VALUE_DATE_SPEC "' />" 497 spec_missing(
void **state)
505 #define EXPR_SPEC_INVALID \ 506 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 507 PCMK_XA_OPERATION "='" PCMK_VALUE_DATE_SPEC "'>" \ 508 "<" PCMK_XE_DATE_SPEC " " PCMK_XA_ID "='s' " \ 509 PCMK_XA_MONTHS "='not-a-number'/>" \ 510 "</" PCMK_XE_DATE_EXPRESSION ">" 513 spec_invalid(
void **state)
521 #define EXPR_SPEC_VALID \ 522 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 523 PCMK_XA_OPERATION "='" PCMK_VALUE_DATE_SPEC "'>" \ 524 "<" PCMK_XE_DATE_SPEC " " PCMK_XA_ID "='s' " \ 525 PCMK_XA_MONTHS "='2'/>" \ 526 "</" PCMK_XE_DATE_EXPRESSION ">" 529 spec_valid(
void **state)
535 assert_date_expression(xml,
"2024-01-01 23:59:59", NULL, NULL,
539 assert_date_expression(xml,
"2024-02-01 00:00:00", NULL, NULL,
pcmk_rc_ok);
542 assert_date_expression(xml,
"2024-02-22 22:22:22", NULL, NULL,
pcmk_rc_ok);
545 assert_date_expression(xml,
"2024-02-29 23:59:59", NULL, NULL,
pcmk_rc_ok);
548 assert_date_expression(xml,
"2024-03-01 00:00:00", NULL, NULL,
554 #define EXPR_SPEC_MISSING_ID \ 555 "<" PCMK_XE_DATE_EXPRESSION " " PCMK_XA_ID "='e' " \ 556 PCMK_XA_OPERATION "='" PCMK_VALUE_DATE_SPEC "'>" \ 557 "<" PCMK_XE_DATE_SPEC " " \ 558 PCMK_XA_MONTHS "='2'/>" \ 559 "</" PCMK_XE_DATE_EXPRESSION ">" 562 spec_missing_id(
void **state)
566 assert_date_expression(xml,
"2024-01-01 23:59:59", NULL, NULL,
572 cmocka_unit_test(null_invalid),
573 cmocka_unit_test(null_next_change_ok),
574 cmocka_unit_test(id_missing),
575 cmocka_unit_test(op_invalid),
576 cmocka_unit_test(lt_missing_end),
577 cmocka_unit_test(lt_invalid_end),
578 cmocka_unit_test(lt_valid),
579 cmocka_unit_test(gt_missing_start),
580 cmocka_unit_test(gt_invalid_start),
581 cmocka_unit_test(gt_valid),
582 cmocka_unit_test(range_missing),
583 cmocka_unit_test(range_invalid_start_invalid_end),
584 cmocka_unit_test(range_invalid_start_only),
585 cmocka_unit_test(range_valid_start_only),
586 cmocka_unit_test(range_invalid_end_only),
587 cmocka_unit_test(range_valid_end_only),
588 cmocka_unit_test(range_valid_start_invalid_end),
589 cmocka_unit_test(range_invalid_start_valid_end),
590 cmocka_unit_test(range_valid_start_valid_end),
591 cmocka_unit_test(range_valid_start_invalid_duration),
592 cmocka_unit_test(range_valid_start_valid_duration),
593 cmocka_unit_test(range_valid_start_duration_missing_id),
594 cmocka_unit_test(spec_missing),
595 cmocka_unit_test(spec_invalid),
596 cmocka_unit_test(spec_valid),
597 cmocka_unit_test(spec_missing_id))
#define EXPR_RANGE_INVALID_START_VALID_END
#define EXPR_RANGE_MISSING
struct crm_time_s crm_time_t
#define EXPR_GT_MISSING_START
#define EXPR_SPEC_MISSING_ID
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)
#define EXPR_SPEC_MISSING
#define EXPR_LT_INVALID_END
void pcmk__xml_free(xmlNode *xml)
#define EXPR_RANGE_VALID_START_DURATION_MISSING_ID
#define EXPR_RANGE_VALID_START_INVALID_END
int pcmk__xml_test_setup_group(void **state)
Wrappers for and extensions to libxml2.
#define EXPR_RANGE_VALID_START_VALID_DURATION
#define EXPR_SPEC_INVALID
#define EXPR_RANGE_VALID_END_ONLY
int pcmk__xml_test_teardown_group(void **state)
xmlNode * pcmk__xml_parse(const char *input)
int crm_time_compare(const crm_time_t *a, const crm_time_t *b)
#define EXPR_RANGE_VALID_START_VALID_END
#define EXPR_GT_INVALID_START
#define EXPR_RANGE_VALID_START_INVALID_DURATION
#define EXPR_RANGE_INVALID_END_ONLY
#define EXPR_RANGE_INVALID_START_ONLY
#define EXPR_RANGE_VALID_START_ONLY
crm_time_t * crm_time_new(const char *string)
#define EXPR_LT_MISSING_END
int pcmk__evaluate_date_expression(const xmlNode *date_expression, const crm_time_t *now, crm_time_t *next_change)
#define EXPR_RANGE_INVALID_START_INVALID_END
void crm_time_free(crm_time_t *dt)