This source file includes following definitions.
- run_one_test
- null_invalid
- spec_id_missing
- invalid_range
- time_satisfies_year_spec
- time_after_year_spec
- time_satisfies_year_range
- time_before_year_range
- time_after_year_range
- range_without_start_year_passes
- range_without_end_year_passes
- yeardays_satisfies
- time_after_yeardays_spec
- yeardays_feb_29_satisfies
- exact_ymd_satisfies
- range_in_month_satisfies
- exact_ymd_after_range
- time_after_monthdays_range
1
2
3
4
5
6
7
8
9
10 #include <crm_internal.h>
11
12 #include <errno.h>
13 #include <glib.h>
14
15 #include <crm/common/xml.h>
16 #include <crm/common/rules_internal.h>
17 #include <crm/common/unittest_internal.h>
18 #include "crmcommon_private.h"
19
20 static void
21 run_one_test(const char *t, const char *x, int expected)
22 {
23 crm_time_t *tm = crm_time_new(t);
24 xmlNodePtr xml = pcmk__xml_parse(x);
25
26 assert_int_equal(pcmk__evaluate_date_spec(xml, tm), expected);
27
28 crm_time_free(tm);
29 pcmk__xml_free(xml);
30 }
31
32 static void
33 null_invalid(void **state)
34 {
35 xmlNodePtr xml = pcmk__xml_parse("<" PCMK_XE_DATE_SPEC " "
36 PCMK_XA_ID "='spec' "
37 PCMK_XA_YEARS "='2019'/>");
38 crm_time_t *tm = crm_time_new(NULL);
39
40 assert_int_equal(pcmk__evaluate_date_spec(NULL, NULL), EINVAL);
41 assert_int_equal(pcmk__evaluate_date_spec(xml, NULL), EINVAL);
42 assert_int_equal(pcmk__evaluate_date_spec(NULL, tm), EINVAL);
43
44 crm_time_free(tm);
45 pcmk__xml_free(xml);
46 }
47
48 static void
49 spec_id_missing(void **state)
50 {
51 run_one_test("2020-01-01", "<date_spec years='2020'/>",
52 pcmk_rc_unpack_error);
53 }
54
55 static void
56 invalid_range(void **state)
57 {
58 run_one_test("2020-01-01", "<date_spec years='not-a-year' months='1'/>",
59 pcmk_rc_unpack_error);
60 }
61
62 static void
63 time_satisfies_year_spec(void **state)
64 {
65 run_one_test("2020-01-01",
66 "<date_spec " PCMK_XA_ID "='spec' years='2020'/>",
67 pcmk_rc_ok);
68 }
69
70 static void
71 time_after_year_spec(void **state)
72 {
73 run_one_test("2020-01-01",
74 "<" PCMK_XE_DATE_SPEC " "
75 PCMK_XA_ID "='spec' "
76 PCMK_XA_YEARS "='2019'/>",
77 pcmk_rc_after_range);
78 }
79
80 static void
81 time_satisfies_year_range(void **state)
82 {
83 run_one_test("2020-01-01",
84 "<" PCMK_XE_DATE_SPEC " "
85 PCMK_XA_ID "='spec' "
86 PCMK_XA_YEARS "='2010-2030'/>",
87 pcmk_rc_ok);
88 }
89
90 static void
91 time_before_year_range(void **state)
92 {
93 run_one_test("2000-01-01",
94 "<" PCMK_XE_DATE_SPEC " "
95 PCMK_XA_ID "='spec' "
96 PCMK_XA_YEARS "='2010-2030'/>",
97 pcmk_rc_before_range);
98 }
99
100 static void
101 time_after_year_range(void **state)
102 {
103 run_one_test("2020-01-01",
104 "<" PCMK_XE_DATE_SPEC " "
105 PCMK_XA_ID "='spec' "
106 PCMK_XA_YEARS "='2010-2015'/>",
107 pcmk_rc_after_range);
108 }
109
110 static void
111 range_without_start_year_passes(void **state)
112 {
113 run_one_test("2010-01-01",
114 "<" PCMK_XE_DATE_SPEC " "
115 PCMK_XA_ID "='spec' "
116 PCMK_XA_YEARS "='-2020'/>",
117 pcmk_rc_ok);
118 }
119
120 static void
121 range_without_end_year_passes(void **state)
122 {
123 run_one_test("2010-01-01",
124 "<" PCMK_XE_DATE_SPEC " "
125 PCMK_XA_ID "='spec' "
126 PCMK_XA_YEARS "='2000-'/>",
127 pcmk_rc_ok);
128 run_one_test("2000-10-01",
129 "<" PCMK_XE_DATE_SPEC " "
130 PCMK_XA_ID "='spec' "
131 PCMK_XA_YEARS "='2000-'/>",
132 pcmk_rc_ok);
133 }
134
135 static void
136 yeardays_satisfies(void **state)
137 {
138 run_one_test("2020-01-30",
139 "<" PCMK_XE_DATE_SPEC " "
140 PCMK_XA_ID "='spec' "
141 PCMK_XA_YEARDAYS "='30'/>",
142 pcmk_rc_ok);
143 }
144
145 static void
146 time_after_yeardays_spec(void **state)
147 {
148 run_one_test("2020-02-15",
149 "<" PCMK_XE_DATE_SPEC " "
150 PCMK_XA_ID "='spec' "
151 PCMK_XA_YEARDAYS "='40'/>",
152 pcmk_rc_after_range);
153 }
154
155 static void
156 yeardays_feb_29_satisfies(void **state)
157 {
158 run_one_test("2016-02-29",
159 "<" PCMK_XE_DATE_SPEC " "
160 PCMK_XA_ID "='spec' "
161 PCMK_XA_YEARDAYS "='60'/>",
162 pcmk_rc_ok);
163 }
164
165 static void
166 exact_ymd_satisfies(void **state)
167 {
168 run_one_test("2001-12-31",
169 "<" PCMK_XE_DATE_SPEC " "
170 PCMK_XA_ID "='spec' "
171 PCMK_XA_YEARS "='2001' "
172 PCMK_XA_MONTHS "='12' "
173 PCMK_XA_MONTHDAYS "='31'/>",
174 pcmk_rc_ok);
175 }
176
177 static void
178 range_in_month_satisfies(void **state)
179 {
180 run_one_test("2001-06-10",
181 "<" PCMK_XE_DATE_SPEC " "
182 PCMK_XA_ID "='spec' "
183 PCMK_XA_YEARS "='2001' "
184 PCMK_XA_MONTHS "='6' "
185 PCMK_XA_MONTHDAYS "='1-10'/>",
186 pcmk_rc_ok);
187 }
188
189 static void
190 exact_ymd_after_range(void **state)
191 {
192 run_one_test("2001-12-31",
193 "<" PCMK_XE_DATE_SPEC " "
194 PCMK_XA_ID "='spec' "
195 PCMK_XA_YEARS "='2001' "
196 PCMK_XA_MONTHS "='12' "
197 PCMK_XA_MONTHDAYS "='30'/>",
198 pcmk_rc_after_range);
199 }
200
201 static void
202 time_after_monthdays_range(void **state)
203 {
204 run_one_test("2001-06-10",
205 "<" PCMK_XE_DATE_SPEC " "
206 PCMK_XA_ID "='spec' "
207 PCMK_XA_YEARS "='2001' "
208 PCMK_XA_MONTHS "='6' "
209 PCMK_XA_MONTHDAYS "='11-15'/>",
210 pcmk_rc_before_range);
211 }
212
213 PCMK__UNIT_TEST(pcmk__xml_test_setup_group, pcmk__xml_test_teardown_group,
214 cmocka_unit_test(null_invalid),
215 cmocka_unit_test(spec_id_missing),
216 cmocka_unit_test(invalid_range),
217 cmocka_unit_test(time_satisfies_year_spec),
218 cmocka_unit_test(time_after_year_spec),
219 cmocka_unit_test(time_satisfies_year_range),
220 cmocka_unit_test(time_before_year_range),
221 cmocka_unit_test(time_after_year_range),
222 cmocka_unit_test(range_without_start_year_passes),
223 cmocka_unit_test(range_without_end_year_passes),
224 cmocka_unit_test(yeardays_satisfies),
225 cmocka_unit_test(time_after_yeardays_spec),
226 cmocka_unit_test(yeardays_feb_29_satisfies),
227 cmocka_unit_test(exact_ymd_satisfies),
228 cmocka_unit_test(range_in_month_satisfies),
229 cmocka_unit_test(exact_ymd_after_range),
230 cmocka_unit_test(time_after_monthdays_range))