METASOURCES = AUTO
check_PROGRAMS = test
test_SOURCES = ip_range.cpp stringfunc.cpp test.cpp test_containerfunc.cpp \
- test_cron.cpp test_filefunc.cpp test_global_config.cpp test_logging.cpp \
- test_pidfile.cpp test_timefunc.cpp
+ test_cron_interval.cpp test_cron_point.cpp test_filefunc.cpp test_global_config.cpp \
+ test_logging.cpp test_pidfile.cpp test_timefunc.cpp
test_LDADD = $(top_builddir)/src/libi2ncommon.la \
$(top_builddir)/configlib/libi2ncommon_config.la @CPPUNIT_LIBS@
+++ /dev/null
-/** @file
- * @brief unit test for cron functions.
- *
- * @copyright Copyright © 2009 by Intra2net AG
- * @license commercial
- * @contact info@intra2net.com
- *
- */
-
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <time.h>
-#include <stdlib.h>
-#include <stdexcept>
-
-#include <cron.hpp>
-
-using namespace std;
-using namespace I2n::Time;
-using namespace CppUnit;
-
-class TestCronFunc : public TestFixture
-{
- CPPUNIT_TEST_SUITE(TestCronFunc);
-
- // Points in time
- CPPUNIT_TEST(NotYetToday);
- CPPUNIT_TEST(LaterToday);
- CPPUNIT_TEST(Now);
- CPPUNIT_TEST(Tomorrow);
- CPPUNIT_TEST(NextWeek);
- CPPUNIT_TEST(NextWeekFromToday);
- CPPUNIT_TEST(StartMidnight);
- CPPUNIT_TEST(StartMidnightTomorrow);
- CPPUNIT_TEST(StartLastDaysec);
- CPPUNIT_TEST(HalfOpenInterval);
- CPPUNIT_TEST(LongBeforeDSTBackwards);
- CPPUNIT_TEST(BeforeDSTBackwards);
- CPPUNIT_TEST(AtDSTBackwards);
- CPPUNIT_TEST(DuringDSTBackwards);
- CPPUNIT_TEST(EndDSTBackwards1);
- CPPUNIT_TEST(EndDSTBackwards2);
- CPPUNIT_TEST(EndDSTBackwards3);
- CPPUNIT_TEST(EndDSTBackwards4);
- CPPUNIT_TEST(OverDSTBackwards);
- CPPUNIT_TEST(OverDSTBackwardsDaychange);
- CPPUNIT_TEST(LongBeforeDSTForward);
- CPPUNIT_TEST(BeforeDSTForward);
- CPPUNIT_TEST(AtDSTForward);
- CPPUNIT_TEST(DuringDSTForward);
- CPPUNIT_TEST(EndDSTForward1);
- CPPUNIT_TEST(EndDSTForward2);
- CPPUNIT_TEST(EndDSTForward3);
- CPPUNIT_TEST(OverDSTForward);
- CPPUNIT_TEST(OverDSTForwardDaychange);
-
- // Intervals
- CPPUNIT_TEST(IntervalBeginToday);
- CPPUNIT_TEST(IntervalDoneToday);
- CPPUNIT_TEST(IntervalBeginNow);
- CPPUNIT_TEST(IntervalBeginStep);
- CPPUNIT_TEST(IntervalWithin);
- CPPUNIT_TEST(IntervalLaststep1);
- CPPUNIT_TEST(IntervalLaststep2);
- CPPUNIT_TEST(IntervalLaststep3);
- CPPUNIT_TEST(IntervalLaststep4);
- CPPUNIT_TEST(IntervalLaststep5);
- CPPUNIT_TEST(IntervalLaststepMatch);
- CPPUNIT_TEST(IntervalEnd);
- CPPUNIT_TEST(IntervalBigstep);
- CPPUNIT_TEST(IntervalWholeDayStart);
- CPPUNIT_TEST(IntervalWholeDayStartNow);
- CPPUNIT_TEST(IntervalWholeDayEnd);
- CPPUNIT_TEST(IntervalWholeDayWithin1);
- CPPUNIT_TEST(IntervalWholeDayWithin2);
- CPPUNIT_TEST(IntervalWholeDayWithinBoundary);
- CPPUNIT_TEST(IntervalBeforeOnce);
- CPPUNIT_TEST(IntervalBeforeOnceBig);
- CPPUNIT_TEST(IntervalAfterOnce);
- CPPUNIT_TEST(IntervalOnceShort);
- CPPUNIT_TEST(IntervalTooShort);
- CPPUNIT_TEST(IntervalOverDSTBackwards1);
- CPPUNIT_TEST(IntervalOverDSTBackwards2);
- CPPUNIT_TEST(IntervalOverDSTBackwards3);
- CPPUNIT_TEST(IntervalOverDSTBackwards4);
- CPPUNIT_TEST(IntervalInFirstDSTBackwards1);
- CPPUNIT_TEST(IntervalInFirstDSTBackwards2);
- CPPUNIT_TEST(IntervalInSecondDSTBackwards1);
- CPPUNIT_TEST(IntervalInSecondDSTBackwards2);
- CPPUNIT_TEST(IntervalOutFirstDSTBackwards1);
- CPPUNIT_TEST(IntervalOutFirstDSTBackwards2);
- CPPUNIT_TEST(IntervalOutFirstDSTBackwards3);
- CPPUNIT_TEST(IntervalOutFirstDSTBackwards4);
- CPPUNIT_TEST(IntervalOutSecondDSTBackwards1);
- CPPUNIT_TEST(IntervalOutSecondDSTBackwards2);
- CPPUNIT_TEST(IntervalOutSecondDSTBackwards3);
- CPPUNIT_TEST(IntervalOutSecondDSTBackwards4);
-
- CPPUNIT_TEST(StartHourStaysTheSameTill2038);
-
- CPPUNIT_TEST_SUITE_END();
-
-public:
-
- void setUp()
- {
- // our check-values are set for Germany
- setenv("TZ",":Europe/Berlin",1);
- }
-
- void tearDown()
- { }
-
- /////////////////////////////////////////////////////
- // Points in time
- /////////////////////////////////////////////////////
-
- void NotYetToday()
- {
- WeekCron cron("2345",3600);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
- }
-
- void Now()
- {
- WeekCron cron("2345",3600);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
- }
-
- void LaterToday()
- {
- WeekCron cron("2345",3600);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100801));
- }
-
- void Tomorrow()
- {
- WeekCron cron("45",3600);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233099657));
- }
-
- void NextWeek()
- {
- WeekCron cron("1",3600);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233532800), cron.get_next_run(1233099657));
- }
-
- void NextWeekFromToday()
- {
- WeekCron cron("13",3600);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233532800), cron.get_next_run(1233100801));
- }
-
- void StartMidnight()
- {
- WeekCron cron("2345",0);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
- }
-
- void StartMidnightTomorrow()
- {
- WeekCron cron("2345",0);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
- }
-
- void StartLastDaysec()
- {
- WeekCron cron("2345",86399);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183599), cron.get_next_run(1233097200));
- }
-
- void HalfOpenInterval()
- {
- WeekCron cron("2345",86400);
- CPPUNIT_ASSERT_THROW(cron.get_next_run(1233097200),std::runtime_error);
- }
-
- void LongBeforeDSTBackwards()
- {
- WeekCron cron("0123456",75600);
- // calc at: Sun Oct 26 00:00:00 CEST 2008
- // expected next run: Sun Oct 26 20:00:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225047600), cron.get_next_run(1224968400));
- }
-
- void BeforeDSTBackwards()
- {
- WeekCron cron("0123456",7200);
- // calc at: Sun Oct 26 02:59:59 CEST 2008
- // expected next run: Sun Oct 26 02:00:00 CET 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224979200), cron.get_next_run(1224979199));
- }
-
- void AtDSTBackwards()
- {
- WeekCron cron("0123456",7200);
- // calc at: Sun Oct 26 02:00:00 CET 2008
- // expected next run: Mon Oct 27 02:00:00 CET 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225069200), cron.get_next_run(1224979200));
- }
-
- void DuringDSTBackwards()
- {
- WeekCron cron("0123456",7200);
- // calc at: Sun Oct 26 02:00:01 CET 2008
- // expected next run: Mon Oct 27 02:00:00 CET 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225069200), cron.get_next_run(1224979201));
- }
-
- void EndDSTBackwards1()
- {
- WeekCron cron("0123456",10800);
- // calc at: Sun Oct 26 02:00:00 CET 2008
- // expected next run: Sun Oct 26 02:00:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224979200));
- }
-
- void EndDSTBackwards2()
- {
- WeekCron cron("0123456",10800);
- // calc at: Sun Oct 26 02:00:01 CET 2008
- // expected next run: Sun Oct 26 02:00:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224979201));
- }
-
- void EndDSTBackwards3()
- {
- WeekCron cron("0123456",10799);
- // calc at: Sun Oct 26 02:00:01 CET 2008
- // expected next run: Sun Oct 26 02:59:59 CET 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982799), cron.get_next_run(1224979201));
- }
-
- void EndDSTBackwards4()
- {
- WeekCron cron("0123456",10799);
- // calc at: Sun Oct 26 02:03:20 2008
- // expected next run: Mon Oct 27 02:59:59 CET 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225072799), cron.get_next_run(1224983000));
- }
-
- void OverDSTBackwards()
- {
- WeekCron cron("234",10800);
- // calc at: Sat Oct 25 05:00:00 2008
- // expected next run: Tue Oct 28 03:00:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225159200), cron.get_next_run(1224903600));
- }
-
- void OverDSTBackwardsDaychange()
- {
- WeekCron cron("234",0);
- // calc at: Sat Oct 25 00:00:00 2008
- // expected next run: Tue Oct 28 00:00:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225148400), cron.get_next_run(1224885600));
- }
-
- void LongBeforeDSTForward()
- {
- WeekCron cron("0123456",75600);
- // calc at: Sat Mar 28 22:00:00 CET 2009
- // expected next run: Sun Mar 29 22:00:00 2009
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238356800), cron.get_next_run(1238274000));
- }
-
- void BeforeDSTForward()
- {
- WeekCron cron("0123456",7200);
- // calc at: Sun Mar 29 01:59:59 CET 2009
- // expected next run: Sun Mar 29 03:00:00 CEST 2009
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
- }
-
- void AtDSTForward()
- {
- WeekCron cron("0123456",7200);
- // calc at: Sun Mar 29 03:00:00 CEST 2009
- // expected next run: Mon Mar 30 02:00:00 2009
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238371200), cron.get_next_run(1238288400));
- }
-
- void DuringDSTForward()
- {
- WeekCron cron("0123456",9000);
- // calc at: Sun Mar 29 01:59:59 CET 2009
- // expected next run: Sun Mar 29 03:30:00 CEST 2009
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238290200), cron.get_next_run(1238288399));
- }
-
- void EndDSTForward1()
- {
- WeekCron cron("0123456",10800);
- // calc at: Sun Mar 29 01:59:59 CET 2009
- // expected next run: Sun Mar 29 04:00:00 2009
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238292000), cron.get_next_run(1238288399));
- }
-
- void EndDSTForward2()
- {
- WeekCron cron("0123456",10800);
- // calc at: Sun Mar 29 03:00:00 2009
- // expected next run: Sun Mar 29 04:00:00 2009
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238292000), cron.get_next_run(1238288400));
- }
-
- void EndDSTForward3()
- {
- WeekCron cron("0123456",10800);
- // calc at: Sun Mar 29 04:00:00 2009
- // expected next run: Mon Mar 30 03:00:00 2009
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238374800), cron.get_next_run(1238292000));
- }
-
- void OverDSTForward()
- {
- WeekCron cron("234",10800);
- // calc at: Sat Mar 28 23:00:00 2009
- // expected next run: Tue Mar 31 03:00:00 2009
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238461200), cron.get_next_run(1238277600));
- }
-
- void OverDSTForwardDaychange()
- {
- WeekCron cron("1234",0);
- // calc at: Sun Mar 29 00:00:00 2009
- // expected next run: Mon Mar 30 00:00:00 2009
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238364000), cron.get_next_run(1238281200));
- }
-
-
-
- /////////////////////////////////////////////////////
- // Intervals
- /////////////////////////////////////////////////////
-
- void IntervalBeginToday()
- {
- WeekCron cron("2345",3600,7200,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
- }
-
- void IntervalDoneToday()
- {
- WeekCron cron("2345",3600);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233150000));
- }
-
- void IntervalBeginNow()
- {
- WeekCron cron("2345",3600,7200,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100810), cron.get_next_run(1233100800));
- }
-
- void IntervalBeginStep()
- {
- WeekCron cron("2345",3600,7200,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100820), cron.get_next_run(1233100810));
- }
-
- void IntervalWithin()
- {
- WeekCron cron("2345",3600,7200,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100830), cron.get_next_run(1233100822));
- }
-
- void IntervalLaststep1()
- {
- WeekCron cron("2345",3600,7200,11);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
- }
-
- void IntervalLaststep2()
- {
- WeekCron cron("2345",3600,7200,11);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
- }
-
- void IntervalLaststep3()
- {
- WeekCron cron("2345",3600,7199,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104397));
- }
-
- void IntervalLaststep4()
- {
- WeekCron cron("2345",3600,7200,3599);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233104399), cron.get_next_run(1233104398));
- }
-
- void IntervalLaststep5()
- {
- WeekCron cron("2345",3600,7200,3598);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
- }
-
- void IntervalLaststepMatch()
- {
- WeekCron cron("2345",3600,7200,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
- }
-
- void IntervalEnd()
- {
- WeekCron cron("2345",3600,7200,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104400));
- }
-
- void IntervalBigstep()
- {
- WeekCron cron("2345",3600,7200,10000);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
- }
-
- void IntervalWholeDayStart()
- {
- WeekCron cron("345",0,86400,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
- }
-
- void IntervalWholeDayStartNow()
- {
- WeekCron cron("345",0,86400,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097210), cron.get_next_run(1233097200));
- }
-
- void IntervalWholeDayEnd()
- {
- WeekCron cron("2",0,86400,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233615600), cron.get_next_run(1233097199));
- }
-
- void IntervalWholeDayWithin1()
- {
- WeekCron cron("2345",0,86400,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097220));
- }
-
- void IntervalWholeDayWithin2()
- {
- WeekCron cron("2345",0,86400,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097229));
- }
-
- void IntervalWholeDayWithinBoundary()
- {
- WeekCron cron("2345",0,86400,10);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
- }
-
- void IntervalBeforeOnce()
- {
- WeekCron cron("2345",0,3600,3600);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
- }
-
- void IntervalBeforeOnceBig()
- {
- WeekCron cron("2345",0,3600,86400);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
- }
-
- void IntervalAfterOnce()
- {
- WeekCron cron("2345",0,3600,86400);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
- }
-
- void IntervalOnceShort()
- {
- WeekCron cron("2345",0,1,86400);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
- }
-
- void IntervalTooShort()
- {
- WeekCron cron("2345",0,0,86400);
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
- }
-
- void IntervalOverDSTBackwards1()
- {
- WeekCron cron("0123456",0,14400,60);
- // calc at: Sun Oct 26 01:59:59 2008
- // expected next run: Sun Oct 26 02:00:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224979200), cron.get_next_run(1224979199));
- }
-
- void IntervalOverDSTBackwards2()
- {
- WeekCron cron("0123456",0,14400,60);
- // calc at: Sun Oct 26 02:29:59 2008
- // expected next run: Sun Oct 26 02:30:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981000), cron.get_next_run(1224980999));
- }
-
- void IntervalOverDSTBackwards3()
- {
- WeekCron cron("0123456",0,14400,60);
- // calc at: Sun Oct 26 02:59:59 2008
- // expected next run: Sun Oct 26 02:00:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
- }
-
- void IntervalOverDSTBackwards4()
- {
- WeekCron cron("0123456",0,14400,60);
- // calc at: Sun Oct 26 02:59:59 2008
- // expected next run: Mon Oct 27 00:00:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224986399));
- }
-
- void IntervalInFirstDSTBackwards1()
- {
- WeekCron cron("0123456",0,9000,60);
- // calc at: Sun Oct 26 02:28:59 2008
- // expected next run: Sun Oct 26 02:29:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224980940), cron.get_next_run(1224980939));
- }
-
- void IntervalInFirstDSTBackwards2()
- {
- WeekCron cron("0123456",0,9000,60);
- // calc at: Sun Oct 26 02:29:01 2008
- // expected next run: Mon Oct 27 00:00:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224980941));
- }
-
- void IntervalInSecondDSTBackwards1()
- {
- WeekCron cron("0123456",0,12600,60);
- // calc at: Sun Oct 26 02:28:59 2008
- // expected next run: Sun Oct 26 02:29:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984540), cron.get_next_run(1224984539));
- }
-
- void IntervalInSecondDSTBackwards2()
- {
- WeekCron cron("0123456",0,12600,60);
- // calc at: Sun Oct 26 02:29:01 2008
- // expected next run: Mon Oct 27 00:00:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224984541));
- }
-
- void IntervalOutFirstDSTBackwards1()
- {
- WeekCron cron("0123456",9000,18000,60);
- // calc at: Sun Oct 26 02:29:00 2008
- // expected next run: Sun Oct 26 02:30:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981000), cron.get_next_run(1224980940));
- }
-
- void IntervalOutFirstDSTBackwards2()
- {
- WeekCron cron("0123456",9000,18000,60);
- // calc at: Sun Oct 26 02:30:00 2008
- // expected next run: Sun Oct 26 02:31:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981060), cron.get_next_run(1224981000));
- }
-
- void IntervalOutFirstDSTBackwards3()
- {
- WeekCron cron("0123456",9000,18000,60);
- // calc at: Sun Oct 26 02:59:59 CEST 2008
- // expected next run: Sun Oct 26 02:00:00 CET 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
- }
-
- void IntervalOutFirstDSTBackwards4()
- {
- WeekCron cron("0123456",9000,18000,60);
- // calc at: Sun Oct 26 02:29:00 2008
- // expected next run: Sun Oct 26 02:30:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984540));
- }
-
- void IntervalOutSecondDSTBackwards1()
- {
- WeekCron cron("0123456",12600,18000,60);
- // calc at: Sun Oct 26 02:29:59 2008
- // expected next run: Sun Oct 26 02:30:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984599));
- }
-
- void IntervalOutSecondDSTBackwards2()
- {
- WeekCron cron("0123456",12600,18000,60);
- // calc at: Sun Oct 26 02:30:00 2008
- // expected next run: Sun Oct 26 02:31:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984660), cron.get_next_run(1224984600));
- }
-
- void IntervalOutSecondDSTBackwards3()
- {
- WeekCron cron("0123456",12600,18000,60);
- // calc at: Sun Oct 26 02:59:59 2008
- // expected next run: Sun Oct 26 03:00:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986400), cron.get_next_run(1224986399));
- }
-
- void IntervalOutSecondDSTBackwards4()
- {
- WeekCron cron("0123456",12600,18000,60);
- // calc at: Sun Oct 26 03:00:00 2008
- // expected next run: Sun Oct 26 03:01:00 2008
- CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986460), cron.get_next_run(1224986400));
- }
-
- void StartHourStaysTheSameTill2038()
- {
- int daysec = 79200;
-
- // Schedule daily at 22h from 1970 till 01.01.2038. Check every 90 minutes.
- WeekCron cron("0123456", daysec);
- for (time_t now = 86400*15; now < 2145916800; now += 90*60)
- {
- time_t result = cron.get_next_run(now);
-
- // Calculate unix time for the begin of the day
- struct tm calc_daybegin;
- bool conversion_ok = (localtime_r(&result, &calc_daybegin) != NULL);
- CPPUNIT_ASSERT_EQUAL(true, conversion_ok);
-
- calc_daybegin.tm_hour=0;
- calc_daybegin.tm_min=0;
- calc_daybegin.tm_sec=0;
- // tm_isdst=-1 means to use the dst in use at the given time
- calc_daybegin.tm_isdst=-1;
-
- time_t daybegin = mktime(&calc_daybegin);
-
- CPPUNIT_ASSERT_EQUAL(daybegin + daysec, result);
- }
- }
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(TestCronFunc);
--- /dev/null
+/** @file
+ * @brief unit test for cron functions.
+ *
+ * @copyright Copyright © 2009 by Intra2net AG
+ * @license commercial
+ * @contact info@intra2net.com
+ *
+ */
+
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <time.h>
+#include <stdlib.h>
+#include <stdexcept>
+
+#include <cron.hpp>
+
+using namespace std;
+using namespace I2n::Time;
+using namespace CppUnit;
+
+class TestCronIntervalFunc : public TestFixture
+{
+ CPPUNIT_TEST_SUITE(TestCronIntervalFunc);
+
+ // Intervals
+ CPPUNIT_TEST(IntervalBeginToday);
+ CPPUNIT_TEST(IntervalDoneToday);
+ CPPUNIT_TEST(IntervalBeginNow);
+ CPPUNIT_TEST(IntervalBeginStep);
+ CPPUNIT_TEST(IntervalWithin);
+ CPPUNIT_TEST(IntervalLaststep1);
+ CPPUNIT_TEST(IntervalLaststep2);
+ CPPUNIT_TEST(IntervalLaststep3);
+ CPPUNIT_TEST(IntervalLaststep4);
+ CPPUNIT_TEST(IntervalLaststep5);
+ CPPUNIT_TEST(IntervalLaststepMatch);
+ CPPUNIT_TEST(IntervalEnd);
+ CPPUNIT_TEST(IntervalBigstep);
+ CPPUNIT_TEST(IntervalWholeDayStart);
+ CPPUNIT_TEST(IntervalWholeDayStartNow);
+ CPPUNIT_TEST(IntervalWholeDayEnd);
+ CPPUNIT_TEST(IntervalWholeDayWithin1);
+ CPPUNIT_TEST(IntervalWholeDayWithin2);
+ CPPUNIT_TEST(IntervalWholeDayWithinBoundary);
+ CPPUNIT_TEST(IntervalBeforeOnce);
+ CPPUNIT_TEST(IntervalBeforeOnceBig);
+ CPPUNIT_TEST(IntervalAfterOnce);
+ CPPUNIT_TEST(IntervalOnceShort);
+ CPPUNIT_TEST(IntervalTooShort);
+ CPPUNIT_TEST(IntervalOverDSTBackwards1);
+ CPPUNIT_TEST(IntervalOverDSTBackwards2);
+ CPPUNIT_TEST(IntervalOverDSTBackwards3);
+ CPPUNIT_TEST(IntervalOverDSTBackwards4);
+ CPPUNIT_TEST(IntervalInFirstDSTBackwards1);
+ CPPUNIT_TEST(IntervalInFirstDSTBackwards2);
+ CPPUNIT_TEST(IntervalInSecondDSTBackwards1);
+ CPPUNIT_TEST(IntervalInSecondDSTBackwards2);
+ CPPUNIT_TEST(IntervalOutFirstDSTBackwards1);
+ CPPUNIT_TEST(IntervalOutFirstDSTBackwards2);
+ CPPUNIT_TEST(IntervalOutFirstDSTBackwards3);
+ CPPUNIT_TEST(IntervalOutFirstDSTBackwards4);
+ CPPUNIT_TEST(IntervalOutSecondDSTBackwards1);
+ CPPUNIT_TEST(IntervalOutSecondDSTBackwards2);
+ CPPUNIT_TEST(IntervalOutSecondDSTBackwards3);
+ CPPUNIT_TEST(IntervalOutSecondDSTBackwards4);
+
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+
+ void setUp()
+ {
+ // our check-values are set for Germany
+ setenv("TZ",":Europe/Berlin",1);
+ }
+
+ void tearDown()
+ { }
+
+
+ void IntervalBeginToday()
+ {
+ WeekCron cron("2345",3600,7200,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
+ }
+
+ void IntervalDoneToday()
+ {
+ WeekCron cron("2345",3600);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233150000));
+ }
+
+ void IntervalBeginNow()
+ {
+ WeekCron cron("2345",3600,7200,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100810), cron.get_next_run(1233100800));
+ }
+
+ void IntervalBeginStep()
+ {
+ WeekCron cron("2345",3600,7200,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100820), cron.get_next_run(1233100810));
+ }
+
+ void IntervalWithin()
+ {
+ WeekCron cron("2345",3600,7200,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100830), cron.get_next_run(1233100822));
+ }
+
+ void IntervalLaststep1()
+ {
+ WeekCron cron("2345",3600,7200,11);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
+ }
+
+ void IntervalLaststep2()
+ {
+ WeekCron cron("2345",3600,7200,11);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
+ }
+
+ void IntervalLaststep3()
+ {
+ WeekCron cron("2345",3600,7199,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104397));
+ }
+
+ void IntervalLaststep4()
+ {
+ WeekCron cron("2345",3600,7200,3599);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233104399), cron.get_next_run(1233104398));
+ }
+
+ void IntervalLaststep5()
+ {
+ WeekCron cron("2345",3600,7200,3598);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
+ }
+
+ void IntervalLaststepMatch()
+ {
+ WeekCron cron("2345",3600,7200,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
+ }
+
+ void IntervalEnd()
+ {
+ WeekCron cron("2345",3600,7200,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104400));
+ }
+
+ void IntervalBigstep()
+ {
+ WeekCron cron("2345",3600,7200,10000);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
+ }
+
+ void IntervalWholeDayStart()
+ {
+ WeekCron cron("345",0,86400,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
+ }
+
+ void IntervalWholeDayStartNow()
+ {
+ WeekCron cron("345",0,86400,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097210), cron.get_next_run(1233097200));
+ }
+
+ void IntervalWholeDayEnd()
+ {
+ WeekCron cron("2",0,86400,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233615600), cron.get_next_run(1233097199));
+ }
+
+ void IntervalWholeDayWithin1()
+ {
+ WeekCron cron("2345",0,86400,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097220));
+ }
+
+ void IntervalWholeDayWithin2()
+ {
+ WeekCron cron("2345",0,86400,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097229));
+ }
+
+ void IntervalWholeDayWithinBoundary()
+ {
+ WeekCron cron("2345",0,86400,10);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
+ }
+
+ void IntervalBeforeOnce()
+ {
+ WeekCron cron("2345",0,3600,3600);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
+ }
+
+ void IntervalBeforeOnceBig()
+ {
+ WeekCron cron("2345",0,3600,86400);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
+ }
+
+ void IntervalAfterOnce()
+ {
+ WeekCron cron("2345",0,3600,86400);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
+ }
+
+ void IntervalOnceShort()
+ {
+ WeekCron cron("2345",0,1,86400);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
+ }
+
+ void IntervalTooShort()
+ {
+ WeekCron cron("2345",0,0,86400);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
+ }
+
+ void IntervalOverDSTBackwards1()
+ {
+ WeekCron cron("0123456",0,14400,60);
+ // calc at: Sun Oct 26 01:59:59 2008
+ // expected next run: Sun Oct 26 02:00:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224979200), cron.get_next_run(1224979199));
+ }
+
+ void IntervalOverDSTBackwards2()
+ {
+ WeekCron cron("0123456",0,14400,60);
+ // calc at: Sun Oct 26 02:29:59 2008
+ // expected next run: Sun Oct 26 02:30:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981000), cron.get_next_run(1224980999));
+ }
+
+ void IntervalOverDSTBackwards3()
+ {
+ WeekCron cron("0123456",0,14400,60);
+ // calc at: Sun Oct 26 02:59:59 2008
+ // expected next run: Sun Oct 26 02:00:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
+ }
+
+ void IntervalOverDSTBackwards4()
+ {
+ WeekCron cron("0123456",0,14400,60);
+ // calc at: Sun Oct 26 02:59:59 2008
+ // expected next run: Mon Oct 27 00:00:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224986399));
+ }
+
+ void IntervalInFirstDSTBackwards1()
+ {
+ WeekCron cron("0123456",0,9000,60);
+ // calc at: Sun Oct 26 02:28:59 2008
+ // expected next run: Sun Oct 26 02:29:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224980940), cron.get_next_run(1224980939));
+ }
+
+ void IntervalInFirstDSTBackwards2()
+ {
+ WeekCron cron("0123456",0,9000,60);
+ // calc at: Sun Oct 26 02:29:01 2008
+ // expected next run: Mon Oct 27 00:00:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224980941));
+ }
+
+ void IntervalInSecondDSTBackwards1()
+ {
+ WeekCron cron("0123456",0,12600,60);
+ // calc at: Sun Oct 26 02:28:59 2008
+ // expected next run: Sun Oct 26 02:29:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984540), cron.get_next_run(1224984539));
+ }
+
+ void IntervalInSecondDSTBackwards2()
+ {
+ WeekCron cron("0123456",0,12600,60);
+ // calc at: Sun Oct 26 02:29:01 2008
+ // expected next run: Mon Oct 27 00:00:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224984541));
+ }
+
+ void IntervalOutFirstDSTBackwards1()
+ {
+ WeekCron cron("0123456",9000,18000,60);
+ // calc at: Sun Oct 26 02:29:00 2008
+ // expected next run: Sun Oct 26 02:30:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981000), cron.get_next_run(1224980940));
+ }
+
+ void IntervalOutFirstDSTBackwards2()
+ {
+ WeekCron cron("0123456",9000,18000,60);
+ // calc at: Sun Oct 26 02:30:00 2008
+ // expected next run: Sun Oct 26 02:31:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981060), cron.get_next_run(1224981000));
+ }
+
+ void IntervalOutFirstDSTBackwards3()
+ {
+ WeekCron cron("0123456",9000,18000,60);
+ // calc at: Sun Oct 26 02:59:59 CEST 2008
+ // expected next run: Sun Oct 26 02:00:00 CET 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
+ }
+
+ void IntervalOutFirstDSTBackwards4()
+ {
+ WeekCron cron("0123456",9000,18000,60);
+ // calc at: Sun Oct 26 02:29:00 2008
+ // expected next run: Sun Oct 26 02:30:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984540));
+ }
+
+ void IntervalOutSecondDSTBackwards1()
+ {
+ WeekCron cron("0123456",12600,18000,60);
+ // calc at: Sun Oct 26 02:29:59 2008
+ // expected next run: Sun Oct 26 02:30:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984599));
+ }
+
+ void IntervalOutSecondDSTBackwards2()
+ {
+ WeekCron cron("0123456",12600,18000,60);
+ // calc at: Sun Oct 26 02:30:00 2008
+ // expected next run: Sun Oct 26 02:31:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984660), cron.get_next_run(1224984600));
+ }
+
+ void IntervalOutSecondDSTBackwards3()
+ {
+ WeekCron cron("0123456",12600,18000,60);
+ // calc at: Sun Oct 26 02:59:59 2008
+ // expected next run: Sun Oct 26 03:00:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986400), cron.get_next_run(1224986399));
+ }
+
+ void IntervalOutSecondDSTBackwards4()
+ {
+ WeekCron cron("0123456",12600,18000,60);
+ // calc at: Sun Oct 26 03:00:00 2008
+ // expected next run: Sun Oct 26 03:01:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986460), cron.get_next_run(1224986400));
+ }
+
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(TestCronIntervalFunc);
--- /dev/null
+/** @file
+ * @brief unit test for cron functions.
+ *
+ * @copyright Copyright © 2009 by Intra2net AG
+ * @license commercial
+ * @contact info@intra2net.com
+ *
+ */
+
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <time.h>
+#include <stdlib.h>
+#include <stdexcept>
+
+#include <cron.hpp>
+
+using namespace std;
+using namespace I2n::Time;
+using namespace CppUnit;
+
+class TestCronPointFunc : public TestFixture
+{
+ CPPUNIT_TEST_SUITE(TestCronPointFunc);
+
+ // Points in time
+ CPPUNIT_TEST(NotYetToday);
+ CPPUNIT_TEST(LaterToday);
+ CPPUNIT_TEST(Now);
+ CPPUNIT_TEST(Tomorrow);
+ CPPUNIT_TEST(NextWeek);
+ CPPUNIT_TEST(NextWeekFromToday);
+ CPPUNIT_TEST(StartMidnight);
+ CPPUNIT_TEST(StartMidnightTomorrow);
+ CPPUNIT_TEST(StartLastDaysec);
+ CPPUNIT_TEST(HalfOpenInterval);
+ CPPUNIT_TEST(LongBeforeDSTBackwards);
+ CPPUNIT_TEST(BeforeDSTBackwards);
+ CPPUNIT_TEST(AtDSTBackwards);
+ CPPUNIT_TEST(DuringDSTBackwards);
+ CPPUNIT_TEST(EndDSTBackwards1);
+ CPPUNIT_TEST(EndDSTBackwards2);
+ CPPUNIT_TEST(EndDSTBackwards3);
+ CPPUNIT_TEST(EndDSTBackwards4);
+ CPPUNIT_TEST(OverDSTBackwards);
+ CPPUNIT_TEST(OverDSTBackwardsDaychange);
+ CPPUNIT_TEST(LongBeforeDSTForward);
+ CPPUNIT_TEST(BeforeDSTForward);
+ CPPUNIT_TEST(AtDSTForward);
+ CPPUNIT_TEST(DuringDSTForward);
+ CPPUNIT_TEST(EndDSTForward1);
+ CPPUNIT_TEST(EndDSTForward2);
+ CPPUNIT_TEST(EndDSTForward3);
+ CPPUNIT_TEST(OverDSTForward);
+ CPPUNIT_TEST(OverDSTForwardDaychange);
+
+ CPPUNIT_TEST(StartHourStaysTheSameTill2038);
+
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+
+ void setUp()
+ {
+ // our check-values are set for Germany
+ setenv("TZ",":Europe/Berlin",1);
+ }
+
+ void tearDown()
+ { }
+
+ /////////////////////////////////////////////////////
+ // Points in time
+ /////////////////////////////////////////////////////
+
+ void NotYetToday()
+ {
+ WeekCron cron("2345",3600);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
+ }
+
+ void Now()
+ {
+ WeekCron cron("2345",3600);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
+ }
+
+ void LaterToday()
+ {
+ WeekCron cron("2345",3600);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100801));
+ }
+
+ void Tomorrow()
+ {
+ WeekCron cron("45",3600);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233099657));
+ }
+
+ void NextWeek()
+ {
+ WeekCron cron("1",3600);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233532800), cron.get_next_run(1233099657));
+ }
+
+ void NextWeekFromToday()
+ {
+ WeekCron cron("13",3600);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233532800), cron.get_next_run(1233100801));
+ }
+
+ void StartMidnight()
+ {
+ WeekCron cron("2345",0);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
+ }
+
+ void StartMidnightTomorrow()
+ {
+ WeekCron cron("2345",0);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
+ }
+
+ void StartLastDaysec()
+ {
+ WeekCron cron("2345",86399);
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183599), cron.get_next_run(1233097200));
+ }
+
+ void HalfOpenInterval()
+ {
+ WeekCron cron("2345",86400);
+ CPPUNIT_ASSERT_THROW(cron.get_next_run(1233097200),std::runtime_error);
+ }
+
+ void LongBeforeDSTBackwards()
+ {
+ WeekCron cron("0123456",75600);
+ // calc at: Sun Oct 26 00:00:00 CEST 2008
+ // expected next run: Sun Oct 26 20:00:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225047600), cron.get_next_run(1224968400));
+ }
+
+ void BeforeDSTBackwards()
+ {
+ WeekCron cron("0123456",7200);
+ // calc at: Sun Oct 26 02:59:59 CEST 2008
+ // expected next run: Sun Oct 26 02:00:00 CET 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224979200), cron.get_next_run(1224979199));
+ }
+
+ void AtDSTBackwards()
+ {
+ WeekCron cron("0123456",7200);
+ // calc at: Sun Oct 26 02:00:00 CET 2008
+ // expected next run: Mon Oct 27 02:00:00 CET 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225069200), cron.get_next_run(1224979200));
+ }
+
+ void DuringDSTBackwards()
+ {
+ WeekCron cron("0123456",7200);
+ // calc at: Sun Oct 26 02:00:01 CET 2008
+ // expected next run: Mon Oct 27 02:00:00 CET 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225069200), cron.get_next_run(1224979201));
+ }
+
+ void EndDSTBackwards1()
+ {
+ WeekCron cron("0123456",10800);
+ // calc at: Sun Oct 26 02:00:00 CET 2008
+ // expected next run: Sun Oct 26 02:00:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224979200));
+ }
+
+ void EndDSTBackwards2()
+ {
+ WeekCron cron("0123456",10800);
+ // calc at: Sun Oct 26 02:00:01 CET 2008
+ // expected next run: Sun Oct 26 02:00:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224979201));
+ }
+
+ void EndDSTBackwards3()
+ {
+ WeekCron cron("0123456",10799);
+ // calc at: Sun Oct 26 02:00:01 CET 2008
+ // expected next run: Sun Oct 26 02:59:59 CET 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982799), cron.get_next_run(1224979201));
+ }
+
+ void EndDSTBackwards4()
+ {
+ WeekCron cron("0123456",10799);
+ // calc at: Sun Oct 26 02:03:20 2008
+ // expected next run: Mon Oct 27 02:59:59 CET 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225072799), cron.get_next_run(1224983000));
+ }
+
+ void OverDSTBackwards()
+ {
+ WeekCron cron("234",10800);
+ // calc at: Sat Oct 25 05:00:00 2008
+ // expected next run: Tue Oct 28 03:00:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225159200), cron.get_next_run(1224903600));
+ }
+
+ void OverDSTBackwardsDaychange()
+ {
+ WeekCron cron("234",0);
+ // calc at: Sat Oct 25 00:00:00 2008
+ // expected next run: Tue Oct 28 00:00:00 2008
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225148400), cron.get_next_run(1224885600));
+ }
+
+ void LongBeforeDSTForward()
+ {
+ WeekCron cron("0123456",75600);
+ // calc at: Sat Mar 28 22:00:00 CET 2009
+ // expected next run: Sun Mar 29 22:00:00 2009
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238356800), cron.get_next_run(1238274000));
+ }
+
+ void BeforeDSTForward()
+ {
+ WeekCron cron("0123456",7200);
+ // calc at: Sun Mar 29 01:59:59 CET 2009
+ // expected next run: Sun Mar 29 03:00:00 CEST 2009
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
+ }
+
+ void AtDSTForward()
+ {
+ WeekCron cron("0123456",7200);
+ // calc at: Sun Mar 29 03:00:00 CEST 2009
+ // expected next run: Mon Mar 30 02:00:00 2009
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238371200), cron.get_next_run(1238288400));
+ }
+
+ void DuringDSTForward()
+ {
+ WeekCron cron("0123456",9000);
+ // calc at: Sun Mar 29 01:59:59 CET 2009
+ // expected next run: Sun Mar 29 03:30:00 CEST 2009
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238290200), cron.get_next_run(1238288399));
+ }
+
+ void EndDSTForward1()
+ {
+ WeekCron cron("0123456",10800);
+ // calc at: Sun Mar 29 01:59:59 CET 2009
+ // expected next run: Sun Mar 29 04:00:00 2009
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238292000), cron.get_next_run(1238288399));
+ }
+
+ void EndDSTForward2()
+ {
+ WeekCron cron("0123456",10800);
+ // calc at: Sun Mar 29 03:00:00 2009
+ // expected next run: Sun Mar 29 04:00:00 2009
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238292000), cron.get_next_run(1238288400));
+ }
+
+ void EndDSTForward3()
+ {
+ WeekCron cron("0123456",10800);
+ // calc at: Sun Mar 29 04:00:00 2009
+ // expected next run: Mon Mar 30 03:00:00 2009
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238374800), cron.get_next_run(1238292000));
+ }
+
+ void OverDSTForward()
+ {
+ WeekCron cron("234",10800);
+ // calc at: Sat Mar 28 23:00:00 2009
+ // expected next run: Tue Mar 31 03:00:00 2009
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238461200), cron.get_next_run(1238277600));
+ }
+
+ void OverDSTForwardDaychange()
+ {
+ WeekCron cron("1234",0);
+ // calc at: Sun Mar 29 00:00:00 2009
+ // expected next run: Mon Mar 30 00:00:00 2009
+ CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238364000), cron.get_next_run(1238281200));
+ }
+
+ void StartHourStaysTheSameTill2038()
+ {
+ int daysec = 79200;
+
+ // Schedule daily at 22h from 1970 till 01.01.2038. Check every 90 minutes.
+ WeekCron cron("0123456", daysec);
+ for (time_t now = 86400*15; now < 2145916800; now += 90*60)
+ {
+ time_t result = cron.get_next_run(now);
+
+ // Calculate unix time for the begin of the day
+ struct tm calc_daybegin;
+ bool conversion_ok = (localtime_r(&result, &calc_daybegin) != NULL);
+ CPPUNIT_ASSERT_EQUAL(true, conversion_ok);
+
+ calc_daybegin.tm_hour=0;
+ calc_daybegin.tm_min=0;
+ calc_daybegin.tm_sec=0;
+ // tm_isdst=-1 means to use the dst in use at the given time
+ calc_daybegin.tm_isdst=-1;
+
+ time_t daybegin = mktime(&calc_daybegin);
+
+ CPPUNIT_ASSERT_EQUAL(daybegin + daysec, result);
+ }
+ }
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(TestCronPointFunc);