add option to forward environment to pipestream
[libi2ncommon] / test / test_cron_interval.cpp
CommitLineData
0e23f538
TJ
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*/
ac1367c0
GE
20/** @file
21 * @brief unit test for cron functions.
22 *
23 * @copyright Copyright © 2009 by Intra2net AG
ac1367c0
GE
24 *
25 */
26
9fe0853b
TJ
27#define BOOST_TEST_DYN_LINK
28#include <boost/test/unit_test.hpp>
ac1367c0
GE
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;
ac1367c0 38
9fe0853b
TJ
39class TestCronIntervalFuncFixture
40{
ac1367c0 41public:
9fe0853b 42 TestCronIntervalFuncFixture()
ac1367c0
GE
43 {
44 // our check-values are set for Germany
45 setenv("TZ",":Europe/Berlin",1);
46 }
9fe0853b 47};
ac1367c0 48
9fe0853b 49BOOST_FIXTURE_TEST_SUITE(TestCronIntervalFunc, TestCronIntervalFuncFixture)
ac1367c0 50
9fe0853b
TJ
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}
ac1367c0 56
9fe0853b
TJ
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}
ac1367c0 62
9fe0853b
TJ
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}
ac1367c0 68
9fe0853b
TJ
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}
ac1367c0 74
9fe0853b
TJ
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}
ac1367c0 80
9fe0853b
TJ
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}
ac1367c0 86
9fe0853b
TJ
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}
ac1367c0 92
9fe0853b
TJ
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}
ac1367c0 98
9fe0853b
TJ
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}
ac1367c0 104
9fe0853b
TJ
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}
ac1367c0 110
9fe0853b
TJ
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}
ac1367c0 116
9fe0853b
TJ
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}
ac1367c0 122
9fe0853b
TJ
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}
ac1367c0 128
9fe0853b
TJ
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}
ac1367c0 134
9fe0853b
TJ
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}
ac1367c0 140
9fe0853b
TJ
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}
ac1367c0 146
9fe0853b
TJ
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}
ac1367c0 152
9fe0853b
TJ
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}
ac1367c0 158
9fe0853b
TJ
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}
ac1367c0 164
9fe0853b
TJ
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}
ac1367c0 170
9fe0853b
TJ
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}
ac1367c0 176
9fe0853b
TJ
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}
ac1367c0 182
9fe0853b
TJ
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}
ac1367c0 188
9fe0853b
TJ
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}
ac1367c0 194
9fe0853b
TJ
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}
ac1367c0 202
9fe0853b
TJ
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}
ac1367c0 210
9fe0853b
TJ
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}
ac1367c0 218
9fe0853b
TJ
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}
ac1367c0 226
9fe0853b
TJ
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}
ac1367c0 234
9fe0853b
TJ
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}
ac1367c0 242
9fe0853b
TJ
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}
ac1367c0 250
9fe0853b
TJ
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}
ac1367c0 258
9fe0853b
TJ
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}
ac1367c0 266
9fe0853b
TJ
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}
ac1367c0 274
9fe0853b
TJ
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}
94278e1f 282
9fe0853b
TJ
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}
94278e1f 290
9fe0853b
TJ
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}
94278e1f 298
9fe0853b
TJ
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}
94278e1f 306
9fe0853b
TJ
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}
94278e1f 314
9fe0853b
TJ
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}
94278e1f 322
9fe0853b
TJ
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}
94278e1f 330
9fe0853b
TJ
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
0bd1e98c 336 BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
9fe0853b 337}
94278e1f 338
9fe0853b
TJ
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}
94278e1f 346
9fe0853b
TJ
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
0bd1e98c 352 BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
9fe0853b 353}
300d1c09 354
9fe0853b
TJ
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}
300d1c09 362
9fe0853b
TJ
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
0bd1e98c 368 BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
9fe0853b 369}
36f76c47 370
9fe0853b
TJ
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}
94278e1f 378
9fe0853b
TJ
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}
94278e1f 386
9fe0853b
TJ
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}
1e372638 394
9fe0853b
TJ
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}
1e372638 402
9fe0853b
TJ
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}
ac1367c0 410
9fe0853b 411BOOST_AUTO_TEST_SUITE_END()