pacemaker 2.1.5-a3f44794f94
Scalable High-Availability cluster resource manager
pe_cron_range_satisfied_test.c
Go to the documentation of this file.
1/*
2 * Copyright 2020-2021 the Pacemaker project contributors
3 *
4 * The version control history for this file may have further details.
5 *
6 * This source code is licensed under the GNU Lesser General Public License
7 * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
8 */
9
10#include <crm_internal.h>
11
12#include <glib.h>
13
15#include <crm/common/xml.h>
17
18static void
19run_one_test(const char *t, const char *x, int expected) {
20 crm_time_t *tm = crm_time_new(t);
21 xmlNodePtr xml = string2xml(x);
22
23 assert_int_equal(pe_cron_range_satisfied(tm, xml), expected);
24
25 crm_time_free(tm);
26 free_xml(xml);
27}
28
29static void
30no_time_given(void **state) {
31 assert_int_equal(pe_cron_range_satisfied(NULL, NULL), pcmk_rc_op_unsatisfied);
32}
33
34static void
35any_time_satisfies_empty_spec(void **state) {
36 crm_time_t *tm = crm_time_new(NULL);
37
38 assert_int_equal(pe_cron_range_satisfied(tm, NULL), pcmk_rc_ok);
39
40 crm_time_free(tm);
41}
42
43static void
44time_satisfies_year_spec(void **state) {
45 run_one_test("2020-01-01", "<date_spec id='spec' years='2020'/>", pcmk_rc_ok);
46}
47
48static void
49time_after_year_spec(void **state) {
50 run_one_test("2020-01-01", "<date_spec id='spec' years='2019'/>", pcmk_rc_after_range);
51}
52
53static void
54time_satisfies_year_range(void **state) {
55 run_one_test("2020-01-01", "<date_spec id='spec' years='2010-2030'/>", pcmk_rc_ok);
56}
57
58static void
59time_before_year_range(void **state) {
60 run_one_test("2000-01-01", "<date_spec id='spec' years='2010-2030'/>", pcmk_rc_before_range);
61}
62
63static void
64time_after_year_range(void **state) {
65 run_one_test("2020-01-01", "<date_spec id='spec' years='2010-2015'/>", pcmk_rc_after_range);
66}
67
68static void
69range_without_start_year_passes(void **state) {
70 run_one_test("2010-01-01", "<date_spec id='spec' years='-2020'/>", pcmk_rc_ok);
71}
72
73static void
74range_without_end_year_passes(void **state) {
75 run_one_test("2010-01-01", "<date_spec id='spec' years='2000-'/>", pcmk_rc_ok);
76 run_one_test("2000-10-01", "<date_spec id='spec' years='2000-'/>", pcmk_rc_ok);
77}
78
79static void
80yeardays_satisfies(void **state) {
81 run_one_test("2020-01-30", "<date_spec id='spec' yeardays='30'/>", pcmk_rc_ok);
82}
83
84static void
85time_after_yeardays_spec(void **state) {
86 run_one_test("2020-02-15", "<date_spec id='spec' yeardays='40'/>", pcmk_rc_after_range);
87}
88
89static void
90yeardays_feb_29_satisfies(void **state) {
91 run_one_test("2016-02-29", "<date_spec id='spec' yeardays='60'/>", pcmk_rc_ok);
92}
93
94static void
95exact_ymd_satisfies(void **state) {
96 run_one_test("2001-12-31", "<date_spec id='spec' years='2001' months='12' monthdays='31'/>", pcmk_rc_ok);
97}
98
99static void
100range_in_month_satisfies(void **state) {
101 run_one_test("2001-06-10", "<date_spec id='spec' years='2001' months='6' monthdays='1-10'/>", pcmk_rc_ok);
102}
103
104static void
105exact_ymd_after_range(void **state) {
106 run_one_test("2001-12-31", "<date_spec id='spec' years='2001' months='12' monthdays='30'/>", pcmk_rc_after_range);
107}
108
109static void
110time_after_monthdays_range(void **state) {
111 run_one_test("2001-06-10", "<date_spec id='spec' years='2001' months='6' monthdays='11-15'/>", pcmk_rc_before_range);
112}
113
114PCMK__UNIT_TEST(NULL, NULL,
115 cmocka_unit_test(no_time_given),
116 cmocka_unit_test(any_time_satisfies_empty_spec),
117 cmocka_unit_test(time_satisfies_year_spec),
118 cmocka_unit_test(time_after_year_spec),
119 cmocka_unit_test(time_satisfies_year_range),
120 cmocka_unit_test(time_before_year_range),
121 cmocka_unit_test(time_after_year_range),
122 cmocka_unit_test(range_without_start_year_passes),
123 cmocka_unit_test(range_without_end_year_passes),
124 cmocka_unit_test(yeardays_satisfies),
125 cmocka_unit_test(time_after_yeardays_spec),
126 cmocka_unit_test(yeardays_feb_29_satisfies),
127 cmocka_unit_test(exact_ymd_satisfies),
128 cmocka_unit_test(range_in_month_satisfies),
129 cmocka_unit_test(exact_ymd_after_range),
130 cmocka_unit_test(time_after_monthdays_range))
void crm_time_free(crm_time_t *dt)
Definition: iso8601.c:140
crm_time_t * crm_time_new(const char *string)
Definition: iso8601.c:92
struct crm_time_s crm_time_t
Definition: iso8601.h:32
@ pcmk_rc_before_range
Definition: results.h:121
@ pcmk_rc_op_unsatisfied
Definition: results.h:123
@ pcmk_rc_ok
Definition: results.h:148
@ pcmk_rc_after_range
Definition: results.h:119
int pe_cron_range_satisfied(crm_time_t *now, xmlNode *cron_spec)
Definition: rules.c:238
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)
Wrappers for and extensions to libxml2.
xmlNode * string2xml(const char *input)
Definition: xml.c:930
void free_xml(xmlNode *child)
Definition: xml.c:885