aboutsummaryrefslogtreecommitdiff
path: root/tests/libntp/clocktime.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/libntp/clocktime.c')
-rw-r--r--tests/libntp/clocktime.c222
1 files changed, 222 insertions, 0 deletions
diff --git a/tests/libntp/clocktime.c b/tests/libntp/clocktime.c
new file mode 100644
index 000000000000..67ca40180def
--- /dev/null
+++ b/tests/libntp/clocktime.c
@@ -0,0 +1,222 @@
+#include "config.h"
+
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
+
+#include "unity.h"
+#include "test-libntp.h"
+
+void setUp(void);
+void tearDown(void);
+void test_CurrentYear(void);
+void test_CurrentYearFuzz(void);
+void test_TimeZoneOffset(void);
+void test_WrongYearStart(void);
+void test_PreviousYear(void);
+void test_NextYear(void);
+void test_NoReasonableConversion(void);
+int isLE(u_int32 diff,u_int32 actual);
+void test_AlwaysInLimit(void);
+
+
+/* ---------------------------------------------------------------------
+ * test fixture
+ *
+ * The clocktimeTest uses the NTP calendar feature to use a mockup
+ * function for getting the current system time, so the tests are not
+ * dependent on the actual system time.
+ */
+
+void
+setUp()
+{
+ ntpcal_set_timefunc(timefunc);
+ settime(2000, 1, 1, 0, 0, 0);
+}
+
+void
+tearDown()
+{
+ ntpcal_set_timefunc(NULL);
+}
+
+/* ---------------------------------------------------------------------
+ * test cases
+ */
+
+void
+test_CurrentYear(void) {
+ /* Timestamp: 2010-06-24 12:50:00Z */
+ const u_int32 timestamp = 3486372600UL;
+ const u_int32 expected = timestamp; /* exactly the same. */
+
+ const int yday=175, hour=12, minute=50, second=0, tzoff=0;
+
+ u_long yearstart=0;
+ u_int32 actual;
+
+ TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
+ &yearstart, &actual));
+ TEST_ASSERT_EQUAL(expected, actual);
+}
+
+void
+test_CurrentYearFuzz(void) {
+ /*
+ * Timestamp (rec_ui) is: 2010-06-24 12:50:00
+ * Time sent into function is 12:00:00.
+ *
+ * Since the fuzz is rather small, we should get a NTP
+ * timestamp for the 12:00:00 time.
+ */
+
+ const u_int32 timestamp = 3486372600UL; /* 2010-06-24 12:50:00Z */
+ const u_int32 expected = 3486369600UL; /* 2010-06-24 12:00:00Z */
+
+ const int yday=175, hour=12, minute=0, second=0, tzoff=0;
+
+ u_long yearstart=0;
+ u_int32 actual;
+
+ TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
+ &yearstart, &actual));
+ TEST_ASSERT_EQUAL(expected, actual);
+}
+
+void
+test_TimeZoneOffset(void) {
+ /*
+ * Timestamp (rec_ui) is: 2010-06-24 12:00:00 +0800
+ * (which is 2010-06-24 04:00:00Z)
+ *
+ * Time sent into function is 04:00:00 +0800
+ */
+ const u_int32 timestamp = 3486369600UL;
+ const u_int32 expected = timestamp;
+
+ const int yday=175, hour=4, minute=0, second=0, tzoff=8;
+
+ u_long yearstart=0;
+ u_int32 actual;
+
+ TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
+ &yearstart, &actual));
+ TEST_ASSERT_EQUAL(expected, actual);
+}
+
+void
+test_WrongYearStart(void) {
+ /*
+ * Timestamp (rec_ui) is: 2010-01-02 11:00:00Z
+ * Time sent into function is 11:00:00.
+ * Yearstart sent into function is the yearstart of 2009!
+ */
+ const u_int32 timestamp = 3471418800UL;
+ const u_int32 expected = timestamp;
+
+ const int yday=2, hour=11, minute=0, second=0, tzoff=0;
+
+ u_long yearstart = 302024100UL; /* Yearstart of 2009. */
+ u_int32 actual;
+
+ TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
+ &yearstart, &actual));
+ TEST_ASSERT_EQUAL(expected, actual);
+}
+
+void
+test_PreviousYear(void) {
+ /*
+ * Timestamp is: 2010-01-01 01:00:00Z
+ * Time sent into function is 23:00:00
+ * (which is meant to be 2009-12-31 23:00:00Z)
+ */
+ const u_int32 timestamp = 3471296400UL;
+ const u_int32 expected = 3471289200UL;
+
+ const int yday=365, hour=23, minute=0, second=0, tzoff=0;
+
+ u_long yearstart = 0;
+ u_int32 actual;
+
+ TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
+ &yearstart, &actual));
+ TEST_ASSERT_EQUAL(expected, actual);
+}
+
+void
+test_NextYear(void) {
+ /*
+ * Timestamp is: 2009-12-31 23:00:00Z
+ * Time sent into function is 01:00:00
+ * (which is meant to be 2010-01-01 01:00:00Z)
+ */
+ const u_int32 timestamp = 3471289200UL;
+ const u_int32 expected = 3471296400UL;
+
+ const int yday=1, hour=1, minute=0, second=0, tzoff=0;
+ u_long yearstart = 0;
+ u_int32 actual;
+
+ TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
+ &yearstart, &actual));
+ TEST_ASSERT_EQUAL(expected, actual);
+}
+
+void
+test_NoReasonableConversion(void) {
+ /* Timestamp is: 2010-01-02 11:00:00Z */
+ const u_int32 timestamp = 3471418800UL;
+
+ const int yday=100, hour=12, minute=0, second=0, tzoff=0;
+ u_long yearstart = 0;
+ u_int32 actual;
+
+ TEST_ASSERT_FALSE(clocktime(yday, hour, minute, second, tzoff, timestamp,
+ &yearstart, &actual));
+}
+
+
+int/*BOOL*/
+isLE(u_int32 diff,u_int32 actual){
+ if(diff <= actual){
+ return TRUE;
+ }
+ else return FALSE;
+}
+
+
+void
+test_AlwaysInLimit(void) {
+ /* Timestamp is: 2010-01-02 11:00:00Z */
+ const u_int32 timestamp = 3471418800UL;
+ const u_short prime_incs[] = { 127, 151, 163, 179 };
+ int cyc;
+ int yday;
+ u_char whichprime;
+ u_short ydayinc;
+ int hour;
+ int minute;
+ u_long yearstart;
+ u_int32 actual;
+ u_int32 diff;
+
+ yearstart = 0;
+ for (cyc = 0; cyc < 5; cyc++) {
+ settime(1900 + cyc * 65, 1, 1, 0, 0, 0);
+ for (yday = -26000; yday < 26000; yday += ydayinc) {
+ whichprime = abs(yday) % COUNTOF(prime_incs);
+ ydayinc = prime_incs[whichprime];
+ for (hour = -204; hour < 204; hour += 2) {
+ for (minute = -60; minute < 60; minute++) {
+ clocktime(yday, hour, minute, 30, 0,
+ timestamp, &yearstart, &actual);
+ diff = actual - timestamp;
+ if (diff >= 0x80000000UL)
+ diff = ~diff + 1;
+ TEST_ASSERT_TRUE(isLE(diff, (183u * SECSPERDAY)));
+ }
+ }
+ }
+ }
+}