2 The software in this package is distributed under the GNU General
3 Public License version 2 (with a special exception described below).
5 A copy of GNU General Public License (GPL) is included in this distribution,
6 in the file COPYING.GPL.
8 As a special exception, if other files instantiate templates or use macros
9 or inline functions from this file, or you compile this file and link it
10 with other works to produce a work based on this file, this file
11 does not by itself cause the resulting work to be covered
12 by the GNU General Public License.
14 However the source code for this file must still be made available
15 in accordance with section (3) of the GNU General Public License.
17 This exception does not invalidate any other reasons why a work based
18 on this file might be covered by the GNU General Public License.
21 * @brief unit test for cron functions.
23 * @copyright Copyright © 2009 by Intra2net AG
27 #define BOOST_TEST_DYN_LINK
28 #include <boost/test/unit_test.hpp>
37 using namespace I2n::Time;
39 class TestCronIntervalFuncFixture
42 TestCronIntervalFuncFixture()
44 // our check-values are set for Germany
45 setenv("TZ",":Europe/Berlin",1);
49 BOOST_FIXTURE_TEST_SUITE(TestCronIntervalFunc, TestCronIntervalFuncFixture)
51 BOOST_AUTO_TEST_CASE(IntervalBeginToday)
53 WeekCron cron("2345",3600,7200,10);
54 BOOST_CHECK_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
57 BOOST_AUTO_TEST_CASE(IntervalDoneToday)
59 WeekCron cron("2345",3600);
60 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233150000));
63 BOOST_AUTO_TEST_CASE(IntervalBeginNow)
65 WeekCron cron("2345",3600,7200,10);
66 BOOST_CHECK_EQUAL( static_cast<time_t>(1233100810), cron.get_next_run(1233100800));
69 BOOST_AUTO_TEST_CASE(IntervalBeginStep)
71 WeekCron cron("2345",3600,7200,10);
72 BOOST_CHECK_EQUAL( static_cast<time_t>(1233100820), cron.get_next_run(1233100810));
75 BOOST_AUTO_TEST_CASE(IntervalWithin)
77 WeekCron cron("2345",3600,7200,10);
78 BOOST_CHECK_EQUAL( static_cast<time_t>(1233100830), cron.get_next_run(1233100822));
81 BOOST_AUTO_TEST_CASE(IntervalLaststep1)
83 WeekCron cron("2345",3600,7200,11);
84 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
87 BOOST_AUTO_TEST_CASE(IntervalLaststep2)
89 WeekCron cron("2345",3600,7200,11);
90 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
93 BOOST_AUTO_TEST_CASE(IntervalLaststep3)
95 WeekCron cron("2345",3600,7199,10);
96 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104397));
99 BOOST_AUTO_TEST_CASE(IntervalLaststep4)
101 WeekCron cron("2345",3600,7200,3599);
102 BOOST_CHECK_EQUAL( static_cast<time_t>(1233104399), cron.get_next_run(1233104398));
105 BOOST_AUTO_TEST_CASE(IntervalLaststep5)
107 WeekCron cron("2345",3600,7200,3598);
108 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
111 BOOST_AUTO_TEST_CASE(IntervalLaststepMatch)
113 WeekCron cron("2345",3600,7200,10);
114 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
117 BOOST_AUTO_TEST_CASE(IntervalEnd)
119 WeekCron cron("2345",3600,7200,10);
120 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104400));
123 BOOST_AUTO_TEST_CASE(IntervalBigstep)
125 WeekCron cron("2345",3600,7200,10000);
126 BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
129 BOOST_AUTO_TEST_CASE(IntervalWholeDayStart)
131 WeekCron cron("345",0,86400,10);
132 BOOST_CHECK_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
135 BOOST_AUTO_TEST_CASE(IntervalWholeDayStartNow)
137 WeekCron cron("345",0,86400,10);
138 BOOST_CHECK_EQUAL( static_cast<time_t>(1233097210), cron.get_next_run(1233097200));
141 BOOST_AUTO_TEST_CASE(IntervalWholeDayEnd)
143 WeekCron cron("2",0,86400,10);
144 BOOST_CHECK_EQUAL( static_cast<time_t>(1233615600), cron.get_next_run(1233097199));
147 BOOST_AUTO_TEST_CASE(IntervalWholeDayWithin1)
149 WeekCron cron("2345",0,86400,10);
150 BOOST_CHECK_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097220));
153 BOOST_AUTO_TEST_CASE(IntervalWholeDayWithin2)
155 WeekCron cron("2345",0,86400,10);
156 BOOST_CHECK_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097229));
159 BOOST_AUTO_TEST_CASE(IntervalWholeDayWithinBoundary)
161 WeekCron cron("2345",0,86400,10);
162 BOOST_CHECK_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
165 BOOST_AUTO_TEST_CASE(IntervalBeforeOnce)
167 WeekCron cron("2345",0,3600,3600);
168 BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
171 BOOST_AUTO_TEST_CASE(IntervalBeforeOnceBig)
173 WeekCron cron("2345",0,3600,86400);
174 BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
177 BOOST_AUTO_TEST_CASE(IntervalAfterOnce)
179 WeekCron cron("2345",0,3600,86400);
180 BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
183 BOOST_AUTO_TEST_CASE(IntervalOnceShort)
185 WeekCron cron("2345",0,1,86400);
186 BOOST_CHECK_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
189 BOOST_AUTO_TEST_CASE(IntervalTooShort)
191 WeekCron cron("2345",0,0,86400);
192 BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
195 BOOST_AUTO_TEST_CASE(IntervalOverDSTBackwards1)
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));
203 BOOST_AUTO_TEST_CASE(IntervalOverDSTBackwards2)
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));
211 BOOST_AUTO_TEST_CASE(IntervalOverDSTBackwards3)
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));
219 BOOST_AUTO_TEST_CASE(IntervalOverDSTBackwards4)
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));
227 BOOST_AUTO_TEST_CASE(IntervalInFirstDSTBackwards1)
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));
235 BOOST_AUTO_TEST_CASE(IntervalInFirstDSTBackwards2)
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));
243 BOOST_AUTO_TEST_CASE(IntervalInSecondDSTBackwards1)
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));
251 BOOST_AUTO_TEST_CASE(IntervalInSecondDSTBackwards2)
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));
259 BOOST_AUTO_TEST_CASE(IntervalOutFirstDSTBackwards1)
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));
267 BOOST_AUTO_TEST_CASE(IntervalOutFirstDSTBackwards2)
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));
275 BOOST_AUTO_TEST_CASE(IntervalOutSecondDSTBackwards1)
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));
283 BOOST_AUTO_TEST_CASE(IntervalDSTBackwardsWholeday1)
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));
291 BOOST_AUTO_TEST_CASE(IntervalDSTBackwardsWholeday2)
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));
299 BOOST_AUTO_TEST_CASE(IntervalDSTBackwardsWholeday3)
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));
307 BOOST_AUTO_TEST_CASE(IntervalOverDSTForward1)
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));
315 BOOST_AUTO_TEST_CASE(IntervalOverDSTForward2)
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));
323 BOOST_AUTO_TEST_CASE(IntervalOverDSTForward3)
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));
331 BOOST_AUTO_TEST_CASE(IntervalInDSTForward1)
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));
339 BOOST_AUTO_TEST_CASE(IntervalInDSTForward2)
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));
347 BOOST_AUTO_TEST_CASE(IntervalInDSTForward3)
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));
355 BOOST_AUTO_TEST_CASE(IntervalOutDSTForward)
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));
363 BOOST_AUTO_TEST_CASE(IntervalDuringDSTForward)
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));
371 BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday1)
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));
379 BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday2)
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));
387 BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday3)
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));
395 BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday4)
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));
403 BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday5)
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));
411 BOOST_AUTO_TEST_SUITE_END()