From ac1367c09e5d3333dfe66c1b6e238a2b55c10fb9 Mon Sep 17 00:00:00 2001 From: Gerd von Egidy Date: Tue, 3 Feb 2009 09:56:43 +0100 Subject: [PATCH] split test_cron.cpp into test_cron_point and test_cron_interval --- test/Makefile.am | 4 +- test/test_cron.cpp | 638 ------------------------------------------- test/test_cron_interval.cpp | 358 ++++++++++++++++++++++++ test/test_cron_point.cpp | 318 +++++++++++++++++++++ 4 files changed, 678 insertions(+), 640 deletions(-) delete mode 100644 test/test_cron.cpp create mode 100644 test/test_cron_interval.cpp create mode 100644 test/test_cron_point.cpp diff --git a/test/Makefile.am b/test/Makefile.am index 31d151d..9fd5b7b 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -2,8 +2,8 @@ INCLUDES = -I$(top_srcdir)/configlib -I$(top_srcdir)/src @CPPUNIT_CFLAGS@ 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@ diff --git a/test/test_cron.cpp b/test/test_cron.cpp deleted file mode 100644 index 3c7624f..0000000 --- a/test/test_cron.cpp +++ /dev/null @@ -1,638 +0,0 @@ -/** @file - * @brief unit test for cron functions. - * - * @copyright Copyright © 2009 by Intra2net AG - * @license commercial - * @contact info@intra2net.com - * - */ - -#include -#include -#include - -#include -#include -#include - -#include - -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(1233100800), cron.get_next_run(1233099657)); - } - - void Now() - { - WeekCron cron("2345",3600); - CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233100800)); - } - - void LaterToday() - { - WeekCron cron("2345",3600); - CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233100801)); - } - - void Tomorrow() - { - WeekCron cron("45",3600); - CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233099657)); - } - - void NextWeek() - { - WeekCron cron("1",3600); - CPPUNIT_ASSERT_EQUAL( static_cast(1233532800), cron.get_next_run(1233099657)); - } - - void NextWeekFromToday() - { - WeekCron cron("13",3600); - CPPUNIT_ASSERT_EQUAL( static_cast(1233532800), cron.get_next_run(1233100801)); - } - - void StartMidnight() - { - WeekCron cron("2345",0); - CPPUNIT_ASSERT_EQUAL( static_cast(1233097200), cron.get_next_run(1233097199)); - } - - void StartMidnightTomorrow() - { - WeekCron cron("2345",0); - CPPUNIT_ASSERT_EQUAL( static_cast(1233183600), cron.get_next_run(1233097200)); - } - - void StartLastDaysec() - { - WeekCron cron("2345",86399); - CPPUNIT_ASSERT_EQUAL( static_cast(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(1238364000), cron.get_next_run(1238281200)); - } - - - - ///////////////////////////////////////////////////// - // Intervals - ///////////////////////////////////////////////////// - - void IntervalBeginToday() - { - WeekCron cron("2345",3600,7200,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233100800), cron.get_next_run(1233099657)); - } - - void IntervalDoneToday() - { - WeekCron cron("2345",3600); - CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233150000)); - } - - void IntervalBeginNow() - { - WeekCron cron("2345",3600,7200,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233100810), cron.get_next_run(1233100800)); - } - - void IntervalBeginStep() - { - WeekCron cron("2345",3600,7200,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233100820), cron.get_next_run(1233100810)); - } - - void IntervalWithin() - { - WeekCron cron("2345",3600,7200,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233100830), cron.get_next_run(1233100822)); - } - - void IntervalLaststep1() - { - WeekCron cron("2345",3600,7200,11); - CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233104399)); - } - - void IntervalLaststep2() - { - WeekCron cron("2345",3600,7200,11); - CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233104398)); - } - - void IntervalLaststep3() - { - WeekCron cron("2345",3600,7199,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233104397)); - } - - void IntervalLaststep4() - { - WeekCron cron("2345",3600,7200,3599); - CPPUNIT_ASSERT_EQUAL( static_cast(1233104399), cron.get_next_run(1233104398)); - } - - void IntervalLaststep5() - { - WeekCron cron("2345",3600,7200,3598); - CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233104398)); - } - - void IntervalLaststepMatch() - { - WeekCron cron("2345",3600,7200,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233104399)); - } - - void IntervalEnd() - { - WeekCron cron("2345",3600,7200,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233104400)); - } - - void IntervalBigstep() - { - WeekCron cron("2345",3600,7200,10000); - CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233100800)); - } - - void IntervalWholeDayStart() - { - WeekCron cron("345",0,86400,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233097200), cron.get_next_run(1233097199)); - } - - void IntervalWholeDayStartNow() - { - WeekCron cron("345",0,86400,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233097210), cron.get_next_run(1233097200)); - } - - void IntervalWholeDayEnd() - { - WeekCron cron("2",0,86400,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233615600), cron.get_next_run(1233097199)); - } - - void IntervalWholeDayWithin1() - { - WeekCron cron("2345",0,86400,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233097230), cron.get_next_run(1233097220)); - } - - void IntervalWholeDayWithin2() - { - WeekCron cron("2345",0,86400,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233097230), cron.get_next_run(1233097229)); - } - - void IntervalWholeDayWithinBoundary() - { - WeekCron cron("2345",0,86400,10); - CPPUNIT_ASSERT_EQUAL( static_cast(1233097200), cron.get_next_run(1233097199)); - } - - void IntervalBeforeOnce() - { - WeekCron cron("2345",0,3600,3600); - CPPUNIT_ASSERT_EQUAL( static_cast(1233183600), cron.get_next_run(1233100799)); - } - - void IntervalBeforeOnceBig() - { - WeekCron cron("2345",0,3600,86400); - CPPUNIT_ASSERT_EQUAL( static_cast(1233183600), cron.get_next_run(1233100799)); - } - - void IntervalAfterOnce() - { - WeekCron cron("2345",0,3600,86400); - CPPUNIT_ASSERT_EQUAL( static_cast(1233183600), cron.get_next_run(1233097200)); - } - - void IntervalOnceShort() - { - WeekCron cron("2345",0,1,86400); - CPPUNIT_ASSERT_EQUAL( static_cast(1233097200), cron.get_next_run(1233097199)); - } - - void IntervalTooShort() - { - WeekCron cron("2345",0,0,86400); - CPPUNIT_ASSERT_EQUAL( static_cast(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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); diff --git a/test/test_cron_interval.cpp b/test/test_cron_interval.cpp new file mode 100644 index 0000000..c873607 --- /dev/null +++ b/test/test_cron_interval.cpp @@ -0,0 +1,358 @@ +/** @file + * @brief unit test for cron functions. + * + * @copyright Copyright © 2009 by Intra2net AG + * @license commercial + * @contact info@intra2net.com + * + */ + +#include +#include +#include + +#include +#include +#include + +#include + +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(1233100800), cron.get_next_run(1233099657)); + } + + void IntervalDoneToday() + { + WeekCron cron("2345",3600); + CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233150000)); + } + + void IntervalBeginNow() + { + WeekCron cron("2345",3600,7200,10); + CPPUNIT_ASSERT_EQUAL( static_cast(1233100810), cron.get_next_run(1233100800)); + } + + void IntervalBeginStep() + { + WeekCron cron("2345",3600,7200,10); + CPPUNIT_ASSERT_EQUAL( static_cast(1233100820), cron.get_next_run(1233100810)); + } + + void IntervalWithin() + { + WeekCron cron("2345",3600,7200,10); + CPPUNIT_ASSERT_EQUAL( static_cast(1233100830), cron.get_next_run(1233100822)); + } + + void IntervalLaststep1() + { + WeekCron cron("2345",3600,7200,11); + CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233104399)); + } + + void IntervalLaststep2() + { + WeekCron cron("2345",3600,7200,11); + CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233104398)); + } + + void IntervalLaststep3() + { + WeekCron cron("2345",3600,7199,10); + CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233104397)); + } + + void IntervalLaststep4() + { + WeekCron cron("2345",3600,7200,3599); + CPPUNIT_ASSERT_EQUAL( static_cast(1233104399), cron.get_next_run(1233104398)); + } + + void IntervalLaststep5() + { + WeekCron cron("2345",3600,7200,3598); + CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233104398)); + } + + void IntervalLaststepMatch() + { + WeekCron cron("2345",3600,7200,10); + CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233104399)); + } + + void IntervalEnd() + { + WeekCron cron("2345",3600,7200,10); + CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233104400)); + } + + void IntervalBigstep() + { + WeekCron cron("2345",3600,7200,10000); + CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233100800)); + } + + void IntervalWholeDayStart() + { + WeekCron cron("345",0,86400,10); + CPPUNIT_ASSERT_EQUAL( static_cast(1233097200), cron.get_next_run(1233097199)); + } + + void IntervalWholeDayStartNow() + { + WeekCron cron("345",0,86400,10); + CPPUNIT_ASSERT_EQUAL( static_cast(1233097210), cron.get_next_run(1233097200)); + } + + void IntervalWholeDayEnd() + { + WeekCron cron("2",0,86400,10); + CPPUNIT_ASSERT_EQUAL( static_cast(1233615600), cron.get_next_run(1233097199)); + } + + void IntervalWholeDayWithin1() + { + WeekCron cron("2345",0,86400,10); + CPPUNIT_ASSERT_EQUAL( static_cast(1233097230), cron.get_next_run(1233097220)); + } + + void IntervalWholeDayWithin2() + { + WeekCron cron("2345",0,86400,10); + CPPUNIT_ASSERT_EQUAL( static_cast(1233097230), cron.get_next_run(1233097229)); + } + + void IntervalWholeDayWithinBoundary() + { + WeekCron cron("2345",0,86400,10); + CPPUNIT_ASSERT_EQUAL( static_cast(1233097200), cron.get_next_run(1233097199)); + } + + void IntervalBeforeOnce() + { + WeekCron cron("2345",0,3600,3600); + CPPUNIT_ASSERT_EQUAL( static_cast(1233183600), cron.get_next_run(1233100799)); + } + + void IntervalBeforeOnceBig() + { + WeekCron cron("2345",0,3600,86400); + CPPUNIT_ASSERT_EQUAL( static_cast(1233183600), cron.get_next_run(1233100799)); + } + + void IntervalAfterOnce() + { + WeekCron cron("2345",0,3600,86400); + CPPUNIT_ASSERT_EQUAL( static_cast(1233183600), cron.get_next_run(1233097200)); + } + + void IntervalOnceShort() + { + WeekCron cron("2345",0,1,86400); + CPPUNIT_ASSERT_EQUAL( static_cast(1233097200), cron.get_next_run(1233097199)); + } + + void IntervalTooShort() + { + WeekCron cron("2345",0,0,86400); + CPPUNIT_ASSERT_EQUAL( static_cast(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(1224986460), cron.get_next_run(1224986400)); + } + +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(TestCronIntervalFunc); diff --git a/test/test_cron_point.cpp b/test/test_cron_point.cpp new file mode 100644 index 0000000..0bd5752 --- /dev/null +++ b/test/test_cron_point.cpp @@ -0,0 +1,318 @@ +/** @file + * @brief unit test for cron functions. + * + * @copyright Copyright © 2009 by Intra2net AG + * @license commercial + * @contact info@intra2net.com + * + */ + +#include +#include +#include + +#include +#include +#include + +#include + +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(1233100800), cron.get_next_run(1233099657)); + } + + void Now() + { + WeekCron cron("2345",3600); + CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233100800)); + } + + void LaterToday() + { + WeekCron cron("2345",3600); + CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233100801)); + } + + void Tomorrow() + { + WeekCron cron("45",3600); + CPPUNIT_ASSERT_EQUAL( static_cast(1233187200), cron.get_next_run(1233099657)); + } + + void NextWeek() + { + WeekCron cron("1",3600); + CPPUNIT_ASSERT_EQUAL( static_cast(1233532800), cron.get_next_run(1233099657)); + } + + void NextWeekFromToday() + { + WeekCron cron("13",3600); + CPPUNIT_ASSERT_EQUAL( static_cast(1233532800), cron.get_next_run(1233100801)); + } + + void StartMidnight() + { + WeekCron cron("2345",0); + CPPUNIT_ASSERT_EQUAL( static_cast(1233097200), cron.get_next_run(1233097199)); + } + + void StartMidnightTomorrow() + { + WeekCron cron("2345",0); + CPPUNIT_ASSERT_EQUAL( static_cast(1233183600), cron.get_next_run(1233097200)); + } + + void StartLastDaysec() + { + WeekCron cron("2345",86399); + CPPUNIT_ASSERT_EQUAL( static_cast(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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); -- 1.7.1