Replace inet_aton() with inet_pton() to parse IPs correctly (#8825)
[libi2ncommon] / test / test_cron_interval.cpp
... / ...
CommitLineData
1/*
2The software in this package is distributed under the GNU General
3Public License version 2 (with a special exception described below).
4
5A copy of GNU General Public License (GPL) is included in this distribution,
6in the file COPYING.GPL.
7
8As a special exception, if other files instantiate templates or use macros
9or inline functions from this file, or you compile this file and link it
10with other works to produce a work based on this file, this file
11does not by itself cause the resulting work to be covered
12by the GNU General Public License.
13
14However the source code for this file must still be made available
15in accordance with section (3) of the GNU General Public License.
16
17This exception does not invalidate any other reasons why a work based
18on this file might be covered by the GNU General Public License.
19*/
20/** @file
21 * @brief unit test for cron functions.
22 *
23 * @copyright Copyright © 2009 by Intra2net AG
24 *
25 */
26
27#define BOOST_TEST_DYN_LINK
28#include <boost/test/unit_test.hpp>
29
30#include <time.h>
31#include <stdlib.h>
32#include <stdexcept>
33
34#include <cron.hpp>
35
36using namespace std;
37using namespace I2n::Time;
38
39class TestCronIntervalFuncFixture
40{
41public:
42 TestCronIntervalFuncFixture()
43 {
44 // our check-values are set for Germany
45 setenv("TZ",":Europe/Berlin",1);
46 }
47};
48
49BOOST_FIXTURE_TEST_SUITE(TestCronIntervalFunc, TestCronIntervalFuncFixture)
50
51BOOST_AUTO_TEST_CASE(IntervalBeginToday)
52{
53 WeekCron cron("2345",3600,7200,10);
54 BOOST_CHECK_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
55}
56
57BOOST_AUTO_TEST_CASE(IntervalDoneToday)
58{
59 WeekCron cron("2345",3600);
60 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233150000));
61}
62
63BOOST_AUTO_TEST_CASE(IntervalBeginNow)
64{
65 WeekCron cron("2345",3600,7200,10);
66 BOOST_CHECK_EQUAL( static_cast<time_t>(1233100810), cron.get_next_run(1233100800));
67}
68
69BOOST_AUTO_TEST_CASE(IntervalBeginStep)
70{
71 WeekCron cron("2345",3600,7200,10);
72 BOOST_CHECK_EQUAL( static_cast<time_t>(1233100820), cron.get_next_run(1233100810));
73}
74
75BOOST_AUTO_TEST_CASE(IntervalWithin)
76{
77 WeekCron cron("2345",3600,7200,10);
78 BOOST_CHECK_EQUAL( static_cast<time_t>(1233100830), cron.get_next_run(1233100822));
79}
80
81BOOST_AUTO_TEST_CASE(IntervalLaststep1)
82{
83 WeekCron cron("2345",3600,7200,11);
84 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
85}
86
87BOOST_AUTO_TEST_CASE(IntervalLaststep2)
88{
89 WeekCron cron("2345",3600,7200,11);
90 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
91}
92
93BOOST_AUTO_TEST_CASE(IntervalLaststep3)
94{
95 WeekCron cron("2345",3600,7199,10);
96 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104397));
97}
98
99BOOST_AUTO_TEST_CASE(IntervalLaststep4)
100{
101 WeekCron cron("2345",3600,7200,3599);
102 BOOST_CHECK_EQUAL( static_cast<time_t>(1233104399), cron.get_next_run(1233104398));
103}
104
105BOOST_AUTO_TEST_CASE(IntervalLaststep5)
106{
107 WeekCron cron("2345",3600,7200,3598);
108 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
109}
110
111BOOST_AUTO_TEST_CASE(IntervalLaststepMatch)
112{
113 WeekCron cron("2345",3600,7200,10);
114 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
115}
116
117BOOST_AUTO_TEST_CASE(IntervalEnd)
118{
119 WeekCron cron("2345",3600,7200,10);
120 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104400));
121}
122
123BOOST_AUTO_TEST_CASE(IntervalBigstep)
124{
125 WeekCron cron("2345",3600,7200,10000);
126 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
127}
128
129BOOST_AUTO_TEST_CASE(IntervalWholeDayStart)
130{
131 WeekCron cron("345",0,86400,10);
132 BOOST_CHECK_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
133}
134
135BOOST_AUTO_TEST_CASE(IntervalWholeDayStartNow)
136{
137 WeekCron cron("345",0,86400,10);
138 BOOST_CHECK_EQUAL( static_cast<time_t>(1233097210), cron.get_next_run(1233097200));
139}
140
141BOOST_AUTO_TEST_CASE(IntervalWholeDayEnd)
142{
143 WeekCron cron("2",0,86400,10);
144 BOOST_CHECK_EQUAL( static_cast<time_t>(1233615600), cron.get_next_run(1233097199));
145}
146
147BOOST_AUTO_TEST_CASE(IntervalWholeDayWithin1)
148{
149 WeekCron cron("2345",0,86400,10);
150 BOOST_CHECK_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097220));
151}
152
153BOOST_AUTO_TEST_CASE(IntervalWholeDayWithin2)
154{
155 WeekCron cron("2345",0,86400,10);
156 BOOST_CHECK_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097229));
157}
158
159BOOST_AUTO_TEST_CASE(IntervalWholeDayWithinBoundary)
160{
161 WeekCron cron("2345",0,86400,10);
162 BOOST_CHECK_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
163}
164
165BOOST_AUTO_TEST_CASE(IntervalBeforeOnce)
166{
167 WeekCron cron("2345",0,3600,3600);
168 BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
169}
170
171BOOST_AUTO_TEST_CASE(IntervalBeforeOnceBig)
172{
173 WeekCron cron("2345",0,3600,86400);
174 BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
175}
176
177BOOST_AUTO_TEST_CASE(IntervalAfterOnce)
178{
179 WeekCron cron("2345",0,3600,86400);
180 BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
181}
182
183BOOST_AUTO_TEST_CASE(IntervalOnceShort)
184{
185 WeekCron cron("2345",0,1,86400);
186 BOOST_CHECK_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
187}
188
189BOOST_AUTO_TEST_CASE(IntervalTooShort)
190{
191 WeekCron cron("2345",0,0,86400);
192 BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
193}
194
195BOOST_AUTO_TEST_CASE(IntervalOverDSTBackwards1)
196{
197 WeekCron cron("0123456",0,14400,60);
198 // calc at: Sun Oct 26 01:59:59 CEST 2008
199 // expected next run: Sun Oct 26 02:00:00 CEST 2008
200 BOOST_CHECK_EQUAL( static_cast<time_t>(1224979200), cron.get_next_run(1224979199));
201}
202
203BOOST_AUTO_TEST_CASE(IntervalOverDSTBackwards2)
204{
205 WeekCron cron("0123456",0,14400,60);
206 // calc at: Sun Oct 26 02:29:59 CEST 2008
207 // expected next run: Sun Oct 26 02:30:00 CEST 2008
208 BOOST_CHECK_EQUAL( static_cast<time_t>(1224981000), cron.get_next_run(1224980999));
209}
210
211BOOST_AUTO_TEST_CASE(IntervalOverDSTBackwards3)
212{
213 WeekCron cron("0123456",0,14400,60);
214 // calc at: Sun Oct 26 02:59:59 CEST 2008
215 // expected next run: Sun Oct 26 02:00:00 CET 2008
216 BOOST_CHECK_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
217}
218
219BOOST_AUTO_TEST_CASE(IntervalOverDSTBackwards4)
220{
221 WeekCron cron("0123456",0,14400,60);
222 // calc at: Sun Oct 26 02:59:59 CET 2008
223 // expected next run: Sun Oct 26 03:00:00 CET 2008
224 BOOST_CHECK_EQUAL( static_cast<time_t>(1224986400), cron.get_next_run(1224986399));
225}
226
227BOOST_AUTO_TEST_CASE(IntervalInFirstDSTBackwards1)
228{
229 WeekCron cron("0123456",0,9000,60);
230 // calc at: Sun Oct 26 02:28:59 CEST 2008
231 // expected next run: Sun Oct 26 02:29:00 CEST 2008
232 BOOST_CHECK_EQUAL( static_cast<time_t>(1224980940), cron.get_next_run(1224980939));
233}
234
235BOOST_AUTO_TEST_CASE(IntervalInFirstDSTBackwards2)
236{
237 WeekCron cron("0123456",0,9000,60);
238 // calc at: Sun Oct 26 02:29:01 CEST 2008
239 // expected next run: Mon Oct 27 00:00:00 CET 2008
240 BOOST_CHECK_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224980941));
241}
242
243BOOST_AUTO_TEST_CASE(IntervalInSecondDSTBackwards1)
244{
245 WeekCron cron("0123456",0,12600,60);
246 // calc at: Sun Oct 26 02:28:59 CET 2008
247 // expected next run: Sun Oct 26 02:29:00 CET 2008
248 BOOST_CHECK_EQUAL( static_cast<time_t>(1224984540), cron.get_next_run(1224984539));
249}
250
251BOOST_AUTO_TEST_CASE(IntervalInSecondDSTBackwards2)
252{
253 WeekCron cron("0123456",0,12600,60);
254 // calc at: Sun Oct 26 02:29:01 CET 2008
255 // expected next run: Sun Oct 26 02:30:00 CET 2008
256 BOOST_CHECK_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984541));
257}
258
259BOOST_AUTO_TEST_CASE(IntervalOutFirstDSTBackwards1)
260{
261 WeekCron cron("0123456",9000,18000,60);
262 // calc at: Sun Oct 26 02:29:00 CEST 2008
263 // expected next run: Sun Oct 26 02:30:00 CET 2008
264 BOOST_CHECK_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224980940));
265}
266
267BOOST_AUTO_TEST_CASE(IntervalOutFirstDSTBackwards2)
268{
269 WeekCron cron("0123456",9000,18000,60);
270 // calc at: Sun Oct 26 02:29:00 CET 2008
271 // expected next run: Sun Oct 26 02:30:00 CET 2008
272 BOOST_CHECK_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984540));
273}
274
275BOOST_AUTO_TEST_CASE(IntervalOutSecondDSTBackwards1)
276{
277 WeekCron cron("0123456",12600,18000,60);
278 // calc at: Sun Oct 26 02:29:59 CET 2008
279 // expected next run: Sun Oct 26 03:30:00 CET 2008
280 BOOST_CHECK_EQUAL( static_cast<time_t>(1224988200), cron.get_next_run(1224984599));
281}
282
283BOOST_AUTO_TEST_CASE(IntervalDSTBackwardsWholeday1)
284{
285 WeekCron cron("0123456",0,86400,60);
286 // calc at: Sun Oct 26 22:58:59 CET 2008
287 // expected next run: Sun Oct 26 22:59:00 CET 2008
288 BOOST_CHECK_EQUAL( static_cast<time_t>(1225058340), cron.get_next_run(1225058339));
289}
290
291BOOST_AUTO_TEST_CASE(IntervalDSTBackwardsWholeday2)
292{
293 WeekCron cron("0123456",0,86400,60);
294 // calc at: Sun Oct 26 22:59:59 CET 2008
295 // expected next run: Sun Oct 26 23:00:00 CET 2008
296 BOOST_CHECK_EQUAL( static_cast<time_t>(1225058400), cron.get_next_run(1225058399));
297}
298
299BOOST_AUTO_TEST_CASE(IntervalDSTBackwardsWholeday3)
300{
301 WeekCron cron("0123456",0,86400,60);
302 // calc at: Sun Oct 26 23:30:00 CET 2008
303 // expected next run: Sun Oct 26 23:31:00 CET 2008
304 BOOST_CHECK_EQUAL( static_cast<time_t>(1225060260), cron.get_next_run(1225060200));
305}
306
307BOOST_AUTO_TEST_CASE(IntervalOverDSTForward1)
308{
309 WeekCron cron("0123456",0,14400,60);
310 // calc at: Sun Mar 29 01:59:59 CET 2009
311 // expected next run: Sun Mar 29 03:00:00 CEST 2009
312 BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
313}
314
315BOOST_AUTO_TEST_CASE(IntervalOverDSTForward2)
316{
317 WeekCron cron("0123456",0,14400,60);
318 // calc at: Sun Mar 29 03:58:59 CEST 2009
319 // expected next run: Sun Mar 29 03:59:00 CEST 2009
320 BOOST_CHECK_EQUAL( static_cast<time_t>(1238291940), cron.get_next_run(1238291939));
321}
322
323BOOST_AUTO_TEST_CASE(IntervalOverDSTForward3)
324{
325 WeekCron cron("0123456",0,14400,60);
326 // calc at: Sun Mar 29 03:59:59 CEST 2009
327 // expected next run: Mon Mar 30 00:00:00 CEST 2009
328 BOOST_CHECK_EQUAL( static_cast<time_t>(1238364000), cron.get_next_run(1238291999));
329}
330
331BOOST_AUTO_TEST_CASE(IntervalInDSTForward1)
332{
333 WeekCron cron("0123456",3600,9000,60);
334 // calc at: Sun Mar 29 01:59:59 CET 2009
335 // expected next run: Sun Mar 29 03:00:00 CEST 2009
336 BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
337}
338
339BOOST_AUTO_TEST_CASE(IntervalInDSTForward2)
340{
341 WeekCron cron("0123456",3600,9000,60);
342 // calc at: Sun Mar 29 03:29:59 CEST 2009
343 // expected next run: Mon Mar 30 01:00:00 CEST 2009
344 BOOST_CHECK_EQUAL( static_cast<time_t>(1238367600), cron.get_next_run(1238290199));
345}
346
347BOOST_AUTO_TEST_CASE(IntervalInDSTForward3)
348{
349 WeekCron cron("0123456",7200,9000,60);
350 // calc at: Sun Mar 29 01:59:59 CET 2009
351 // expected next run: Sun Mar 29 03:00:00 CEST 2009
352 BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
353}
354
355BOOST_AUTO_TEST_CASE(IntervalOutDSTForward)
356{
357 WeekCron cron("0123456",9000,14400,60);
358 // calc at: Sun Mar 29 03:29:59 CEST 2009
359 // expected next run: Sun Mar 29 03:30:30 CEST 2009
360 BOOST_CHECK_EQUAL( static_cast<time_t>(1238290200), cron.get_next_run(1238290199));
361}
362
363BOOST_AUTO_TEST_CASE(IntervalDuringDSTForward)
364{
365 WeekCron cron("0123456",7200,10800,60);
366 // calc at: Sun Mar 29 01:59:59 CET 2009
367 // expected next run: Sun Mar 29 03:00:00 CEST 2009
368 BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
369}
370
371BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday1)
372{
373 WeekCron cron("03",0,86400,60);
374 // calc at: Sun Mar 29 23:59:59 CEST 2009
375 // expected next run: Wed Apr 1 00:00:00 CEST 2009
376 BOOST_CHECK_EQUAL( static_cast<time_t>(1238536800), cron.get_next_run(1238363999));
377}
378
379BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday2)
380{
381 WeekCron cron("03",0,86400,60);
382 // calc at: Mon Mar 30 00:59:59 CEST 2009
383 // expected next run: Wed Apr 1 00:00:00 CEST 2009
384 BOOST_CHECK_EQUAL( static_cast<time_t>(1238536800), cron.get_next_run(1238367599));
385}
386
387BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday3)
388{
389 WeekCron cron("0123456",0,86340,60);
390 // calc at: Sun Mar 29 11:42:06 CEST 2009
391 // expected next run: Sun Mar 29 11:43:00 CEST 2009
392 BOOST_CHECK_EQUAL( static_cast<time_t>(1238319780), cron.get_next_run(1238319726));
393}
394
395BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday4)
396{
397 WeekCron cron("0123456",3599,86340,60);
398 // calc at: Sun Mar 29 11:42:06 CEST 2009
399 // expected next run: Sun Mar 29 11:42:59 CEST 2009
400 BOOST_CHECK_EQUAL( static_cast<time_t>(1238319779), cron.get_next_run(1238319726));
401}
402
403BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday5)
404{
405 WeekCron cron("0123456",3600,86340,60);
406 // calc at: Sun Mar 29 11:42:06 CEST 2009
407 // expected next run: Sun Mar 29 11:43:00 CEST 2009
408 BOOST_CHECK_EQUAL( static_cast<time_t>(1238319780), cron.get_next_run(1238319726));
409}
410
411BOOST_AUTO_TEST_SUITE_END()