From a578e5feaceada853b1108d960888ed77918519b Mon Sep 17 00:00:00 2001 From: Gerd von Egidy Date: Thu, 29 Jan 2009 18:02:37 +0100 Subject: [PATCH] fix unit-tests that were broken, mark dst-bug, add another unit-test for dst-bug --- src/cron.cpp | 4 ++++ test/test_cron.cpp | 32 +++++++++++++++++++++----------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/cron.cpp b/src/cron.cpp index 5fd23ea..2869eea 100644 --- a/src/cron.cpp +++ b/src/cron.cpp @@ -143,6 +143,9 @@ time_t WeekCron::get_next_point(const time_t calc_from, const int daysec, const ft.tm_min=0; ft.tm_sec=daysec; + // bug: we don't care about tm_isdst + // it can change when adding days or seconds + time_t target=mktime(&ft); // todays schedule could already been through or now @@ -151,6 +154,7 @@ time_t WeekCron::get_next_point(const time_t calc_from, const int daysec, const // not today but the next matching weekday localtime_r(&calc_from,&ft); ft.tm_mday++; + return get_next_point(mktime(&ft),daysec,false); } diff --git a/test/test_cron.cpp b/test/test_cron.cpp index cdec60a..06fe262 100644 --- a/test/test_cron.cpp +++ b/test/test_cron.cpp @@ -44,6 +44,7 @@ class TestCronFunc : public TestFixture CPPUNIT_TEST(EndDSTBackwards2); CPPUNIT_TEST(EndDSTBackwards3); CPPUNIT_TEST(EndDSTBackwards4); + CPPUNIT_TEST(OverDSTBackwards); CPPUNIT_TEST(LongBeforeDSTForward); CPPUNIT_TEST(BeforeDSTForward); CPPUNIT_TEST(AtDSTForward); @@ -189,16 +190,16 @@ public: { WeekCron cron("0123456",10800); // calc at: Sun Oct 26 02:00:00 CET 2008 - // expected next run: Sun Oct 26 03:00:00 CET 2008 - CPPUNIT_ASSERT_EQUAL( static_cast(1224986400), cron.get_next_run(1224979200)); + // 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 03:00:00 CET 2008 - CPPUNIT_ASSERT_EQUAL( static_cast(1224986400), cron.get_next_run(1224979201)); + // expected next run: Sun Oct 26 02:00:00 2008 + CPPUNIT_ASSERT_EQUAL( static_cast(1224982800), cron.get_next_run(1224979201)); } void EndDSTBackwards3() @@ -212,17 +213,26 @@ public: void EndDSTBackwards4() { WeekCron cron("0123456",10799); - // calc at: Sun Oct 26 03:03:20 CET 2008 + // calc at: Sun Oct 26 02:03:20 2008 // expected next run: Mon Oct 27 02:59:59 CET 2008 + // current return: 1224986399, Sun Oct 26 02:59:59 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 LongBeforeDSTForward() { WeekCron cron("0123456",75600); // calc at: Sat Mar 28 22:00:00 CET 2009 - // expected next run: Sun Mar 29 21:00:00 CEST 2009 - CPPUNIT_ASSERT_EQUAL( static_cast(1238349600), cron.get_next_run(1238274000)); + // expected next run: Sun Mar 29 21:00:00 2009 + CPPUNIT_ASSERT_EQUAL( static_cast(1238353200), cron.get_next_run(1238274000)); } void BeforeDSTForward() @@ -237,8 +247,8 @@ public: { WeekCron cron("0123456",7200); // calc at: Sun Mar 29 03:00:00 CEST 2009 - // expected next run: Mon Mar 30 02:00:00 CEST 2009 - CPPUNIT_ASSERT_EQUAL( static_cast(1238367600), cron.get_next_run(1238288400)); + // expected next run: Mon Mar 30 02:00:00 2009 + CPPUNIT_ASSERT_EQUAL( static_cast(1238371200), cron.get_next_run(1238288400)); } void DuringDSTForward() @@ -253,8 +263,8 @@ public: { WeekCron cron("0123456",10800); // 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)); + // expected next run: Sun Mar 29 04:00:00 2009 + CPPUNIT_ASSERT_EQUAL( static_cast(1238292000), cron.get_next_run(1238288399)); } -- 1.7.1