Hi.
I've committed the NTP implementation to the net-commons project many years ago. The TimeStamp junit test was far from complete so added a few more tests to cover the bases. Here's the patch: Index: src/test/java/org/apache/commons/net/ntp/TimeStampTest.java =================================================================== --- src/test/java/org/apache/commons/net/ntp/TimeStampTest.java (revision 1632160) +++ src/test/java/org/apache/commons/net/ntp/TimeStampTest.java (working copy) @@ -18,6 +18,7 @@ import java.util.Date; import java.util.Calendar; +import java.util.TimeZone; import junit.framework.TestCase; /** @@ -29,6 +30,26 @@ private static final String TIME2 = "c1a9ae1c.cf6ac48f"; // Tue, Dec 17 2002 14:07:24.810 UTC private static final String TIME3 = "c1a9ae1d.cf6ac48e"; // Tue, Dec 17 2002 14:07:25.810 UTC + public void testEquals() { + TimeStamp time = TimeStamp.getCurrentTime(); + TimeStamp time2 = new TimeStamp(time.getDate()); + assertEquals(time.ntpValue(), time2.ntpValue()); + assertEquals(time.getSeconds(), time2.getSeconds()); + assertEquals(time.getFraction(), time2.getFraction()); + assertEquals(time.hashCode(), time2.hashCode()); + assertEquals(time, time2); + } + + public void testFraction() { + TimeStamp time = TimeStamp.getCurrentTime(); + TimeStamp time2 = new TimeStamp(time.ntpValue()); + assertEquals(time, time2); + long seconds = time.getSeconds(); + long fraction = time.getFraction(); + long ntpTime = seconds << 32 | fraction; + assertEquals(time.ntpValue(), ntpTime); + } + public void testCompare() { TimeStamp ts1 = new TimeStamp(TIME1); // Tue, Dec 17 2002 14:07:24.810 UTC @@ -60,6 +81,35 @@ assertTrue("time3 != ts4.time", time3 != ts4.getTime()); } + public void testBaseTimes() { + // use base 2036 time + Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + cal.set(2036, Calendar.MARCH, 1, 0, 0, 0); + cal.set(Calendar.MILLISECOND, 1); + TimeStamp time = new TimeStamp(cal.getTime()); + String timeString = time.toString(); + assertTrue(timeString.startsWith("0")); + + /* + Sat, Mar 01 2036 00:00:00.001 UTC 1df78000418937 [001df780.00418937] + 1963904 . 4294967 + 001df780 . 00418937 + + Sat, Mar 01 2014 00:00:00.001 UTC d6bba18000418937 [d6bba180.00418937] + 3602620800 . 4294967 + d6bba180 . 00418937 + */ + + cal.set(2014, Calendar.MARCH, 1, 0, 0, 0); + TimeStamp timeEarly = new TimeStamp(cal.getTime()); + + // time after Feb-2036 uses basis of seconds after 2036 and time before 2036 uses seconds since 1900 + assertTrue(timeEarly.getSeconds() > time.getSeconds()); + + // java time uses same epoch time: ms since 1970 + assertTrue(timeEarly.getTime() < time.getTime()); + } + public void testUTCString() { TimeStamp ts1 = new TimeStamp(TIME1); // Tue, Dec 17 2002 14:07:24.810 UTC String actual = ts1.toUTCString(); --jason mathews