fix unit-tests that were broken, mark dst-bug, add another unit-test for dst-bug
authorGerd von Egidy <gerd.von.egidy@intra2net.com>
Thu, 29 Jan 2009 17:02:37 +0000 (18:02 +0100)
committerGerd von Egidy <gerd.von.egidy@intra2net.com>
Thu, 29 Jan 2009 17:02:37 +0000 (18:02 +0100)
src/cron.cpp
test/test_cron.cpp

index 5fd23ea..2869eea 100644 (file)
@@ -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);
     }
 
index cdec60a..06fe262 100644 (file)
@@ -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<time_t>(1224986400), cron.get_next_run(1224979200));
+        // 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 03:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986400), cron.get_next_run(1224979201));
+        // 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()
@@ -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<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 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<time_t>(1238349600), cron.get_next_run(1238274000));
+        // expected next run: Sun Mar 29 21:00:00 2009
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(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<time_t>(1238367600), cron.get_next_run(1238288400));
+        // 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()
@@ -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<time_t>(1238288400), cron.get_next_run(1238288399));
+        // expected next run: Sun Mar 29 04:00:00 2009
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238292000), cron.get_next_run(1238288399));
     }