clocktime.c revision 290001
1#include "config.h" 2 3#include "ntp_calendar.h" 4#include "ntp_stdlib.h" 5 6#include "unity.h" 7#include "test-libntp.h" 8 9void setUp(void); 10void tearDown(void); 11void test_CurrentYear(void); 12void test_CurrentYearFuzz(void); 13void test_TimeZoneOffset(void); 14void test_WrongYearStart(void); 15void test_PreviousYear(void); 16void test_NextYear(void); 17void test_NoReasonableConversion(void); 18int isLE(u_int32 diff,u_int32 actual); 19void test_AlwaysInLimit(void); 20 21 22/* --------------------------------------------------------------------- 23 * test fixture 24 * 25 * The clocktimeTest uses the NTP calendar feature to use a mockup 26 * function for getting the current system time, so the tests are not 27 * dependent on the actual system time. 28 */ 29 30void 31setUp() 32{ 33 ntpcal_set_timefunc(timefunc); 34 settime(2000, 1, 1, 0, 0, 0); 35} 36 37void 38tearDown() 39{ 40 ntpcal_set_timefunc(NULL); 41} 42 43/* --------------------------------------------------------------------- 44 * test cases 45 */ 46 47void 48test_CurrentYear(void) { 49 /* Timestamp: 2010-06-24 12:50:00Z */ 50 const u_int32 timestamp = 3486372600UL; 51 const u_int32 expected = timestamp; /* exactly the same. */ 52 53 const int yday=175, hour=12, minute=50, second=0, tzoff=0; 54 55 u_long yearstart=0; 56 u_int32 actual; 57 58 TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp, 59 &yearstart, &actual)); 60 TEST_ASSERT_EQUAL(expected, actual); 61} 62 63void 64test_CurrentYearFuzz(void) { 65 /* 66 * Timestamp (rec_ui) is: 2010-06-24 12:50:00 67 * Time sent into function is 12:00:00. 68 * 69 * Since the fuzz is rather small, we should get a NTP 70 * timestamp for the 12:00:00 time. 71 */ 72 73 const u_int32 timestamp = 3486372600UL; /* 2010-06-24 12:50:00Z */ 74 const u_int32 expected = 3486369600UL; /* 2010-06-24 12:00:00Z */ 75 76 const int yday=175, hour=12, minute=0, second=0, tzoff=0; 77 78 u_long yearstart=0; 79 u_int32 actual; 80 81 TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp, 82 &yearstart, &actual)); 83 TEST_ASSERT_EQUAL(expected, actual); 84} 85 86void 87test_TimeZoneOffset(void) { 88 /* 89 * Timestamp (rec_ui) is: 2010-06-24 12:00:00 +0800 90 * (which is 2010-06-24 04:00:00Z) 91 * 92 * Time sent into function is 04:00:00 +0800 93 */ 94 const u_int32 timestamp = 3486369600UL; 95 const u_int32 expected = timestamp; 96 97 const int yday=175, hour=4, minute=0, second=0, tzoff=8; 98 99 u_long yearstart=0; 100 u_int32 actual; 101 102 TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp, 103 &yearstart, &actual)); 104 TEST_ASSERT_EQUAL(expected, actual); 105} 106 107void 108test_WrongYearStart(void) { 109 /* 110 * Timestamp (rec_ui) is: 2010-01-02 11:00:00Z 111 * Time sent into function is 11:00:00. 112 * Yearstart sent into function is the yearstart of 2009! 113 */ 114 const u_int32 timestamp = 3471418800UL; 115 const u_int32 expected = timestamp; 116 117 const int yday=2, hour=11, minute=0, second=0, tzoff=0; 118 119 u_long yearstart = 302024100UL; /* Yearstart of 2009. */ 120 u_int32 actual; 121 122 TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp, 123 &yearstart, &actual)); 124 TEST_ASSERT_EQUAL(expected, actual); 125} 126 127void 128test_PreviousYear(void) { 129 /* 130 * Timestamp is: 2010-01-01 01:00:00Z 131 * Time sent into function is 23:00:00 132 * (which is meant to be 2009-12-31 23:00:00Z) 133 */ 134 const u_int32 timestamp = 3471296400UL; 135 const u_int32 expected = 3471289200UL; 136 137 const int yday=365, hour=23, minute=0, second=0, tzoff=0; 138 139 u_long yearstart = 0; 140 u_int32 actual; 141 142 TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp, 143 &yearstart, &actual)); 144 TEST_ASSERT_EQUAL(expected, actual); 145} 146 147void 148test_NextYear(void) { 149 /* 150 * Timestamp is: 2009-12-31 23:00:00Z 151 * Time sent into function is 01:00:00 152 * (which is meant to be 2010-01-01 01:00:00Z) 153 */ 154 const u_int32 timestamp = 3471289200UL; 155 const u_int32 expected = 3471296400UL; 156 157 const int yday=1, hour=1, minute=0, second=0, tzoff=0; 158 u_long yearstart = 0; 159 u_int32 actual; 160 161 TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp, 162 &yearstart, &actual)); 163 TEST_ASSERT_EQUAL(expected, actual); 164} 165 166void 167test_NoReasonableConversion(void) { 168 /* Timestamp is: 2010-01-02 11:00:00Z */ 169 const u_int32 timestamp = 3471418800UL; 170 171 const int yday=100, hour=12, minute=0, second=0, tzoff=0; 172 u_long yearstart = 0; 173 u_int32 actual; 174 175 TEST_ASSERT_FALSE(clocktime(yday, hour, minute, second, tzoff, timestamp, 176 &yearstart, &actual)); 177} 178 179 180int/*BOOL*/ 181isLE(u_int32 diff,u_int32 actual){ 182 if(diff <= actual){ 183 return TRUE; 184 } 185 else return FALSE; 186} 187 188 189void 190test_AlwaysInLimit(void) { 191 /* Timestamp is: 2010-01-02 11:00:00Z */ 192 const u_int32 timestamp = 3471418800UL; 193 const u_short prime_incs[] = { 127, 151, 163, 179 }; 194 int cyc; 195 int yday; 196 u_char whichprime; 197 u_short ydayinc; 198 int hour; 199 int minute; 200 u_long yearstart; 201 u_int32 actual; 202 u_int32 diff; 203 204 yearstart = 0; 205 for (cyc = 0; cyc < 5; cyc++) { 206 settime(1900 + cyc * 65, 1, 1, 0, 0, 0); 207 for (yday = -26000; yday < 26000; yday += ydayinc) { 208 whichprime = abs(yday) % COUNTOF(prime_incs); 209 ydayinc = prime_incs[whichprime]; 210 for (hour = -204; hour < 204; hour += 2) { 211 for (minute = -60; minute < 60; minute++) { 212 clocktime(yday, hour, minute, 30, 0, 213 timestamp, &yearstart, &actual); 214 diff = actual - timestamp; 215 if (diff >= 0x80000000UL) 216 diff = ~diff + 1; 217 TEST_ASSERT_TRUE(isLE(diff, (183u * SECSPERDAY))); 218 } 219 } 220 } 221 } 222} 223