Return-Path:
X-Original-To: apmail-commons-commits-archive@minotaur.apache.org
Delivered-To: apmail-commons-commits-archive@minotaur.apache.org
Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
by minotaur.apache.org (Postfix) with SMTP id B4D2110204
for ;
Thu, 20 Feb 2014 18:57:56 +0000 (UTC)
Received: (qmail 76982 invoked by uid 500); 20 Feb 2014 18:57:53 -0000
Delivered-To: apmail-commons-commits-archive@commons.apache.org
Received: (qmail 76906 invoked by uid 500); 20 Feb 2014 18:57:53 -0000
Mailing-List: contact commits-help@commons.apache.org; run by ezmlm
Precedence: bulk
List-Help:
List-Unsubscribe:
List-Post:
List-Id:
Reply-To: dev@commons.apache.org
Delivered-To: mailing list commits@commons.apache.org
Received: (qmail 76899 invoked by uid 99); 20 Feb 2014 18:57:53 -0000
Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230)
by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Feb 2014 18:57:53 +0000
X-ASF-Spam-Status: No, hits=-2000.0 required=5.0
tests=ALL_TRUSTED
X-Spam-Check-By: apache.org
Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4)
by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Feb 2014 18:57:46 +0000
Received: from eris.apache.org (localhost [127.0.0.1])
by eris.apache.org (Postfix) with ESMTP id 1A042238883D;
Thu, 20 Feb 2014 18:57:24 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: svn commit: r1570303 - in /commons/proper/net/trunk: ./ src/changes/
src/main/java/examples/ntp/ src/main/java/org/apache/commons/net/ntp/
src/test/java/org/apache/commons/net/ntp/
src/test/java/org/apache/commons/net/time/
Date: Thu, 20 Feb 2014 18:57:23 -0000
To: commits@commons.apache.org
From: sebb@apache.org
X-Mailer: svnmailer-1.0.9
Message-Id: <20140220185724.1A042238883D@eris.apache.org>
X-Virus-Checked: Checked by ClamAV on apache.org
Author: sebb
Date: Thu Feb 20 18:57:23 2014
New Revision: 1570303
URL: http://svn.apache.org/r1570303
Log:
NET-525 Added missing set methods on NTP class and interface
Added:
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestNtpPacket.java (with props)
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestTimeInfo.java (with props)
Modified:
commons/proper/net/trunk/pom.xml
commons/proper/net/trunk/src/changes/changes.xml
commons/proper/net/trunk/src/main/java/examples/ntp/NTPClient.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NTPUDPClient.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpUtils.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpV3Impl.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpV3Packet.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/TimeInfo.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/TimeStamp.java
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TimeStampTest.java
commons/proper/net/trunk/src/test/java/org/apache/commons/net/time/TimeTestSimpleServer.java
Modified: commons/proper/net/trunk/pom.xml
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/pom.xml?rev=1570303&r1=1570302&r2=1570303&view=diff
==============================================================================
--- commons/proper/net/trunk/pom.xml (original)
+++ commons/proper/net/trunk/pom.xml Thu Feb 20 18:57:23 2014
@@ -93,10 +93,19 @@ Supported protocols include: Echo, Finge
mario@ops.co.at
+ Naz Irizarry
+ MITRE Corp
+
+
+
Tapan Karecha
tapan@india.hp.com
+ Jason Mathews
+ MITRE Corp
+
+
Winston Ojeda
Winston.Ojeda@qg.com
Quad/Graphics, Inc.
Modified: commons/proper/net/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/changes/changes.xml?rev=1570303&r1=1570302&r2=1570303&view=diff
==============================================================================
--- commons/proper/net/trunk/src/changes/changes.xml [utf-8] (original)
+++ commons/proper/net/trunk/src/changes/changes.xml [utf-8] Thu Feb 20 18:57:23 2014
@@ -65,6 +65,9 @@ The type attribute can be add,u
+
+ Added missing set methods on NTP class and interface
+
Avoid greedy matches within a regex
Modified: commons/proper/net/trunk/src/main/java/examples/ntp/NTPClient.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/examples/ntp/NTPClient.java?rev=1570303&r1=1570302&r2=1570303&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/examples/ntp/NTPClient.java (original)
+++ commons/proper/net/trunk/src/main/java/examples/ntp/NTPClient.java Thu Feb 20 18:57:23 2014
@@ -43,7 +43,6 @@ import org.apache.commons.net.ntp.TimeSt
*
* Example: NTPClient clock.psu.edu
*
- * @author Jason Mathews, MITRE Corp
***/
public final class NTPClient
{
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NTPUDPClient.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NTPUDPClient.java?rev=1570303&r1=1570302&r2=1570303&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NTPUDPClient.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NTPUDPClient.java Thu Feb 20 18:57:23 2014
@@ -35,7 +35,6 @@ import org.apache.commons.net.DatagramSo
* without re-establishing a connection. That is because UDP is a
* connectionless protocol and the Network Time Protocol is stateless.
*
- * @author Jason Mathews, MITRE Corp
* @version $Revision$
***/
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpUtils.java?rev=1570303&r1=1570302&r2=1570303&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpUtils.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpUtils.java Thu Feb 20 18:57:23 2014
@@ -20,8 +20,6 @@ package org.apache.commons.net.ntp;
/***
* Common NtpUtils Helper class.
*
- * @author Jason Mathews, MITRE Corp
- *
* @version $Revision$
*/
public final class NtpUtils {
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpV3Impl.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpV3Impl.java?rev=1570303&r1=1570302&r2=1570303&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpV3Impl.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpV3Impl.java Thu Feb 20 18:57:23 2014
@@ -22,9 +22,6 @@ import java.net.DatagramPacket;
* Implementation of NtpV3Packet with methods converting Java objects to/from
* the Network Time Protocol (NTP) data message header format described in RFC-1305.
*
- * @author Naz Irizarry, MITRE Corp
- * @author Jason Mathews, MITRE Corp
- *
* @version $Revision$
*/
public class NtpV3Impl implements NtpV3Packet
@@ -89,6 +86,7 @@ public class NtpV3Impl implements NtpV3P
/***
* Set mode as defined in RFC-1305.
+ *
* @param mode
*/
// @Override
@@ -114,6 +112,7 @@ public class NtpV3Impl implements NtpV3P
/***
* Set leap indicator as defined in RFC-1305.
+ *
* @param li leap indicator.
*/
// @Override
@@ -230,6 +229,17 @@ public class NtpV3Impl implements NtpV3P
}
/***
+ * Set root delay as defined in RFC-1305.
+ *
+ * @param delay root delay
+ */
+// @Override
+ public void setRootDelay(int delay)
+ {
+ setInt(ROOT_DELAY_INDEX, delay);
+ }
+
+ /**
* Return root delay as defined in RFC-1305 in milliseconds, which is
* the total roundtrip delay to the primary reference source, in
* seconds. Values can take positive and negative values, depending
@@ -255,6 +265,17 @@ public class NtpV3Impl implements NtpV3P
}
/***
+ * Set root dispersion as defined in RFC-1305.
+ *
+ * @param dispersion root dispersion
+ */
+// @Override
+ public void setRootDispersion(int dispersion)
+ {
+ setInt(ROOT_DISPERSION_INDEX, dispersion);
+ }
+
+ /***
* Returns root dispersion (as defined in RFC-1305) in milliseconds.
*
* @return root dispersion in milliseconds
@@ -288,10 +309,7 @@ public class NtpV3Impl implements NtpV3P
// @Override
public void setReferenceId(int refId)
{
- for (int i = 3; i >= 0; i--) {
- buf[REFERENCE_ID_INDEX + i] = (byte) (refId & 0xff);
- refId >>>= 8; // shift right one-byte
- }
+ setInt(REFERENCE_ID_INDEX, refId);
}
/***
@@ -489,6 +507,20 @@ public class NtpV3Impl implements NtpV3P
}
/***
+ * Set integer value at index position.
+ *
+ * @param idx index position
+ * @param value 32-bit int value
+ */
+ private void setInt(int idx, int value)
+ {
+ for (int i=3; i >= 0; i--) {
+ buf[idx + i] = (byte) (value & 0xff);
+ value >>>= 8; // shift right one-byte
+ }
+ }
+
+ /**
* Get NTP Timestamp at specified starting index.
*
* @param index index into data array
@@ -553,18 +585,61 @@ public class NtpV3Impl implements NtpV3P
/***
* Set the contents of this object from source datagram packet.
*
- * @param srcDp source DatagramPacket to copy contents from.
+ * @param srcDp source DatagramPacket to copy contents from, never null.
+ * @throws IllegalArgumentException if srcDp is null or byte length is less than minimum length of 48 bytes
*/
// @Override
public void setDatagramPacket(DatagramPacket srcDp)
{
+ if (srcDp == null || srcDp.getLength() < buf.length) {
+ throw new IllegalArgumentException();
+ }
byte[] incomingBuf = srcDp.getData();
int len = srcDp.getLength();
if (len > buf.length) {
len = buf.length;
}
-
System.arraycopy(incomingBuf, 0, buf, 0, len);
+ DatagramPacket dp = getDatagramPacket();
+ dp.setAddress(srcDp.getAddress());
+ int port = srcDp.getPort();
+ dp.setPort(port > 0 ? port : NTP_PORT);
+ dp.setData(buf);
+ }
+
+ /***
+ * Compares this object against the specified object.
+ * The result is true
if and only if the argument is
+ * not null
and is a NtpV3Impl
object that
+ * contains the same values as this object.
+ *
+ * @param obj the object to compare with.
+ * @return true
if the objects are the same;
+ * false
otherwise.
+ */
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null || getClass() != obj.getClass()) {
+ return false;
+ }
+ NtpV3Impl other = (NtpV3Impl) obj;
+ return java.util.Arrays.equals(buf, other.buf);
+ }
+
+ /***
+ * Computes a hashcode for this object. The result is the exclusive
+ * OR of the values of this object stored as a byte array.
+ *
+ * @return a hash code value for this object.
+ */
+ @Override
+ public int hashCode()
+ {
+ return java.util.Arrays.hashCode(buf);
}
/***
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpV3Packet.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpV3Packet.java?rev=1570303&r1=1570302&r2=1570303&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpV3Packet.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/NtpV3Packet.java Thu Feb 20 18:57:23 2014
@@ -23,8 +23,6 @@ import java.net.DatagramPacket;
* Interface for a NtpV3Packet with get/set methods corresponding to the fields
* in the NTP Data Message Header described in RFC 1305.
*
- * @author Naz Irizarry, MITRE Corp
- * @author Jason Mathews, MITRE Corp
* @version $Revision$
*/
public interface NtpV3Packet
@@ -121,11 +119,23 @@ public interface NtpV3Packet
public int getPrecision();
/**
+ * Set precision as defined in RFC-1305
+ * @param precision Precision
+ */
+ void setPrecision(int precision);
+
+ /**
* @return root delay as defined in RFC-1305
*/
public int getRootDelay();
/**
+ * Set root delay as defined in RFC-1305
+ * @param delay
+ */
+ void setRootDelay(int delay);
+
+ /**
* @return root delay in milliseconds
*/
public double getRootDelayInMillisDouble();
@@ -136,6 +146,12 @@ public interface NtpV3Packet
public int getRootDispersion();
/**
+ *
+ * @param disperson
+ */
+ void setRootDispersion(int disperson);
+
+ /**
* @return root dispersion in milliseconds
*/
public long getRootDispersionInMillis();
@@ -153,7 +169,7 @@ public interface NtpV3Packet
/**
* Set version as defined in RFC-1305
*/
- public void setVersion(int mode);
+ public void setVersion(int version);
/**
* @return stratum as defined in RFC-1305
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/TimeInfo.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/TimeInfo.java?rev=1570303&r1=1570302&r2=1570303&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/TimeInfo.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/TimeInfo.java Thu Feb 20 18:57:23 2014
@@ -17,6 +17,8 @@ package org.apache.commons.net.ntp;
*/
+import java.net.DatagramPacket;
+import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
@@ -24,8 +26,6 @@ import java.util.List;
* Wrapper class to network time packet messages (NTP, etc) that computes
* related timing info and stats.
*
- * @author Jason Mathews, MITRE Corp
- *
* @version $Revision$
*/
public class TimeInfo {
@@ -286,6 +286,15 @@ public class TimeInfo {
}
/**
+ * Get host address from message datagram if available
+ * @return host address of available otherwise null
+ */
+ public InetAddress getAddress() {
+ DatagramPacket pkt = _message.getDatagramPacket();
+ return pkt == null ? null : pkt.getAddress();
+ }
+
+ /**
* Returns time at which time message packet was received by local machine.
*
* @return packet return time.
@@ -295,4 +304,42 @@ public class TimeInfo {
return _returnTime;
}
+ /**
+ * Compares this object against the specified object.
+ * The result is true
if and only if the argument is
+ * not null
and is a TimeStamp
object that
+ * contains the same values as this object.
+ *
+ * @param obj the object to compare with.
+ * @return true
if the objects are the same;
+ * false
otherwise.
+ */
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null || getClass() != obj.getClass()) {
+ return false;
+ }
+ TimeInfo other = (TimeInfo) obj;
+ return _returnTime == other._returnTime && _message.equals(other._message);
+ }
+
+ /**
+ * Computes a hashcode for this object. The result is the exclusive
+ * OR of the return time and the message hash code.
+ *
+ * @return a hash code value for this object.
+ */
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = (int)_returnTime;
+ result = prime * result + _message.hashCode();
+ return result;
+ }
+
}
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/TimeStamp.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/TimeStamp.java?rev=1570303&r1=1570302&r2=1570303&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/TimeStamp.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/ntp/TimeStamp.java Thu Feb 20 18:57:23 2014
@@ -38,7 +38,6 @@ import java.util.TimeZone;
* time known as "the epoch", namely January 1, 1970, 00:00:00 GMT.
*
*
- * @author Jason Mathews, MITRE Corp
* @version $Revision$
* @see java.util.Date
*/
Added: commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestNtpPacket.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestNtpPacket.java?rev=1570303&view=auto
==============================================================================
--- commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestNtpPacket.java (added)
+++ commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestNtpPacket.java Thu Feb 20 18:57:23 2014
@@ -0,0 +1,195 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.net.ntp;
+
+import org.junit.Test;
+import org.junit.Assert;
+
+import java.net.DatagramPacket;
+
+public class TestNtpPacket {
+
+ // pre-canned NTP packet
+ // [version:3, mode:4, poll:4, refId=0x81531472, precision:-17, delay:100, dispersion(ms):51.605224609375, id:129.83.20.114, xmitTime:Thu, May 30 2013 17:46:01.295, etc. ]
+ static final byte[] ntpPacket = hexStringToByteArray("1c0304ef0000006400000d3681531472d552447fec1d6000d5524718ac49ba5ed55247194b6d9000d55247194b797000");
+
+ @Test
+ public void testCreate() {
+ NtpV3Packet message = new NtpV3Impl();
+ message.setLeapIndicator(0); // byte 0 [bit numbers 7-6]
+ message.setVersion(NtpV3Packet.VERSION_3); // byte 0 [bit numbers 5-4]
+ message.setMode(4); // byte 0 [bit numbers 3-0]
+ message.setStratum(3); // byte 1
+ message.setPoll(4); // byte 2
+ message.setPrecision(-17); // byte 3
+ message.setRootDelay(100); // bytes 4-7
+ message.setRootDispersion(3382); // bytes 8-11
+ message.setReferenceId(0x81531472); // byte 12-15
+ message.setReferenceTime(new TimeStamp(0xd552447fec1d6000L));
+ message.setOriginateTimeStamp(new TimeStamp(0xd5524718ac49ba5eL));
+ message.setReceiveTimeStamp(new TimeStamp(0xd55247194b6d9000L));
+ message.setTransmitTime(new TimeStamp(0xd55247194b797000L));
+
+ Assert.assertEquals(-17, message.getPrecision());
+ Assert.assertEquals(4, message.getPoll());
+ Assert.assertEquals(100, message.getRootDelay());
+ Assert.assertEquals(3382, message.getRootDispersion());
+ Assert.assertEquals(0x81531472, message.getReferenceId());
+ Assert.assertNotNull(message.getReferenceTimeStamp());
+ Assert.assertEquals("NTP", message.getType());
+ Assert.assertEquals("Server", message.getModeName());
+ Assert.assertEquals("129.83.20.114", message.getReferenceIdString());
+ Assert.assertEquals(51, message.getRootDispersionInMillis());
+ Assert.assertEquals(message.getRootDelay() / 65.536, message.getRootDelayInMillisDouble(), 1e-13);
+
+ DatagramPacket dp = message.getDatagramPacket(); // this creates a new datagram
+ Assert.assertNotNull(dp);
+ Assert.assertEquals(48, dp.getLength()); // fixed 48-byte length
+
+ NtpV3Packet message2 = new NtpV3Impl();
+ DatagramPacket dp2 = new DatagramPacket(ntpPacket, ntpPacket.length);
+ message2.setDatagramPacket(dp2);
+
+ Assert.assertEquals(message2, message);
+ Assert.assertEquals(message2.hashCode(), message.hashCode());
+ Assert.assertEquals(message2.toString(), message.toString());
+ }
+
+ @Test
+ public void testCreateAndSetByte0() {
+ // LI + VN + Mode all part of first byte -- make sure set order does not matter
+ NtpV3Packet message = new NtpV3Impl();
+
+ message.setLeapIndicator(2);
+ message.setMode(4);
+ message.setVersion(NtpV3Packet.VERSION_3);
+
+ Assert.assertEquals(4, message.getMode());
+ Assert.assertEquals(NtpV3Packet.VERSION_3, message.getVersion());
+ Assert.assertEquals(2, message.getLeapIndicator());
+
+ message.setLeapIndicator(2);
+ message.setVersion(NtpV3Packet.VERSION_3);
+ message.setMode(4);
+
+ Assert.assertEquals(4, message.getMode());
+ Assert.assertEquals(NtpV3Packet.VERSION_3, message.getVersion());
+ Assert.assertEquals(2, message.getLeapIndicator());
+
+ message.setMode(4);
+ message.setLeapIndicator(2);
+ message.setVersion(NtpV3Packet.VERSION_3);
+
+ Assert.assertEquals(4, message.getMode());
+ Assert.assertEquals(NtpV3Packet.VERSION_3, message.getVersion());
+ Assert.assertEquals(2, message.getLeapIndicator());
+
+ message.setMode(4);
+ message.setVersion(NtpV3Packet.VERSION_3);
+ message.setLeapIndicator(2);
+
+ Assert.assertEquals(4, message.getMode());
+ Assert.assertEquals(NtpV3Packet.VERSION_3, message.getVersion());
+ Assert.assertEquals(2, message.getLeapIndicator());
+
+ message.setVersion(NtpV3Packet.VERSION_3);
+ message.setMode(4);
+ message.setLeapIndicator(2);
+
+ Assert.assertEquals(4, message.getMode());
+ Assert.assertEquals(NtpV3Packet.VERSION_3, message.getVersion());
+ Assert.assertEquals(2, message.getLeapIndicator());
+
+ message.setVersion(NtpV3Packet.VERSION_3);
+ message.setLeapIndicator(2);
+ message.setMode(4);
+
+ Assert.assertEquals(4, message.getMode());
+ Assert.assertEquals(NtpV3Packet.VERSION_3, message.getVersion());
+ Assert.assertEquals(2, message.getLeapIndicator());
+ }
+
+ @Test
+ public void testCreateNtpV4() {
+ NtpV3Packet message = new NtpV3Impl();
+ message.setVersion(NtpV3Packet.VERSION_4);
+ message.setStratum(3);
+ message.setReferenceId(0x81531472);
+ // force hex-string reference id string
+ Assert.assertEquals("81531472", message.getReferenceIdString());
+
+ message.setVersion(NtpV3Packet.VERSION_4);
+ message.setStratum(1);
+ message.setReferenceId(0x55534E4F); // USNO
+ // force raw-string reference id string
+ Assert.assertEquals("USNO", message.getReferenceIdString());
+
+ message.setReferenceId(0x47505300); // GPS
+ Assert.assertEquals("GPS", message.getReferenceIdString());
+ }
+
+ @Test
+ public void testCreateFromBytes() {
+ NtpV3Packet message = new NtpV3Impl();
+ DatagramPacket dp = new DatagramPacket(ntpPacket, ntpPacket.length);
+ message.setDatagramPacket(dp);
+ Assert.assertEquals(4, message.getMode());
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void testCreateFromBadPacket() {
+ NtpV3Packet message = new NtpV3Impl();
+ DatagramPacket dp = new DatagramPacket(ntpPacket, ntpPacket.length-4); // drop 4-bytes from packet
+ message.setDatagramPacket(dp);
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void testCreateFromNullPacket() {
+ NtpV3Packet message = new NtpV3Impl();
+ message.setDatagramPacket(null);
+ }
+
+ @Test
+ public void testEquals() {
+ NtpV3Packet message1 = new NtpV3Impl();
+ DatagramPacket dp = new DatagramPacket(ntpPacket, ntpPacket.length);
+ message1.setDatagramPacket(dp);
+ NtpV3Packet message2 = new NtpV3Impl();
+ message2.setDatagramPacket(dp);
+ Assert.assertEquals("hashCode", message1.hashCode(), message2.hashCode());
+ Assert.assertEquals(message1, message2);
+
+ // now change the packet to force equals() => false
+ message2.setMode(2);
+ Assert.assertTrue(message1.getMode() != message2.getMode());
+ Assert.assertFalse(message1.equals(message2));
+
+ NtpV3Packet message3 = null;
+ Assert.assertFalse(message1.equals(message3));
+ }
+
+ private static byte[] hexStringToByteArray(String s) {
+ int len = s.length();
+ byte[] data = new byte[len / 2];
+ for (int i = 0; i < len; i += 2) {
+ data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ + Character.digit(s.charAt(i+1), 16));
+ }
+ return data;
+ }
+
+}
Propchange: commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestNtpPacket.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestNtpPacket.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestTimeInfo.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestTimeInfo.java?rev=1570303&view=auto
==============================================================================
--- commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestTimeInfo.java (added)
+++ commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestTimeInfo.java Thu Feb 20 18:57:23 2014
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.net.ntp;
+
+import org.junit.Test;
+import org.junit.Assert;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class TestTimeInfo {
+
+ @Test
+ public void testEquals() {
+ NtpV3Packet packet = new NtpV3Impl();
+ final long returnTime = System.currentTimeMillis();
+ TimeInfo info = new TimeInfo(packet, returnTime);
+ info.addComment("this is a comment");
+ TimeInfo other = new TimeInfo(packet, returnTime);
+ other.addComment("this is a comment");
+ Assert.assertEquals(info, other); // fails
+ Assert.assertEquals(info.hashCode(), other.hashCode());
+ other.addComment("another comment");
+ //Assert.assertFalse(info.equals(other)); // comments not used for equality
+
+ TimeInfo another = new TimeInfo(packet, returnTime, new ArrayList());
+ Assert.assertEquals(info, another);
+ }
+
+ @Test
+ public void testComputeDetails() {
+ // if (origTime > returnTime) // assert destTime >= origTime
+ NtpV3Packet packet = new NtpV3Impl();
+ long returnTime = System.currentTimeMillis();
+
+ // example
+ // returntime=1370571658178
+ // origTime= 1370571659178
+
+ // originate time as defined in RFC-1305 (t1)
+ packet.setOriginateTimeStamp(TimeStamp.getNtpTime(returnTime + 1000));
+ // Receive Time is time request received by server (t2)
+ packet.setReceiveTimeStamp(packet.getOriginateTimeStamp());
+ // Transmit time is time reply sent by server (t3)
+ packet.setTransmitTime(packet.getOriginateTimeStamp());
+ packet.setReferenceTime(packet.getOriginateTimeStamp());
+
+ //long origTime = packet.getOriginateTimeStamp().getTime();
+ //System.out.println("returntime=" + returnTime);
+ //System.out.println("origTime= " + origTime);
+
+ TimeInfo info = new TimeInfo(packet, returnTime);
+ info.computeDetails();
+
+ Assert.assertSame(packet, info.getMessage());
+ Assert.assertEquals(returnTime, info.getReturnTime());
+ Assert.assertEquals(Long.valueOf(500), info.getOffset());
+ Assert.assertEquals(Long.valueOf(-1000), info.getDelay());
+
+ // comments: [Warning: processing time > total network time, Error: OrigTime > DestRcvTime]
+ Assert.assertEquals(2, info.getComments().size());
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void testException() {
+ NtpV3Packet packet = null;
+ new TimeInfo(packet, 1L);
+ }
+
+ @Test
+ public void testAddress() throws UnknownHostException {
+ NtpV3Packet packet = new NtpV3Impl();
+ TimeInfo info = new TimeInfo(packet, System.currentTimeMillis());
+ Assert.assertNull(info.getAddress());
+ packet.getDatagramPacket().setAddress(InetAddress.getByAddress("loopback", new byte[]{127, 0, 0, 1}));
+ Assert.assertNotNull(info.getAddress());
+ }
+
+ @Test
+ public void testZeroTime() {
+ NtpV3Packet packet = new NtpV3Impl();
+ TimeInfo info = new TimeInfo(packet, 0);
+ info.computeDetails();
+ Assert.assertNull(info.getDelay());
+ Assert.assertNull(info.getOffset());
+ Assert.assertEquals(0L, info.getReturnTime());
+ // comments: Error: zero orig time -- cannot compute delay/offset
+ final List comments = info.getComments();
+ Assert.assertEquals(1, comments.size());
+ Assert.assertTrue(comments.get(0).contains("zero orig time"));
+ }
+
+ @Test
+ public void testNotEquals() {
+ NtpV3Packet packet = new NtpV3Impl();
+ long returnTime = System.currentTimeMillis();
+ TimeInfo info = new TimeInfo(packet, returnTime);
+
+ // 1. different return time
+ NtpV3Packet packet2 = new NtpV3Impl();
+ Assert.assertEquals(packet, packet2);
+ TimeInfo info2 = new TimeInfo(packet2, returnTime + 1);
+ Assert.assertFalse(info.equals(info2));
+
+ // 2. different message / same time
+ packet2.setStratum(3);
+ packet2.setRootDelay(25);
+ TimeInfo info3 = new TimeInfo(packet2, returnTime);
+ Assert.assertFalse(info.equals(info3));
+
+ // 3. different class
+ Object other = this;
+ Assert.assertFalse(info.equals(other));
+
+ // 4. null comparison
+ other = null;
+ Assert.assertFalse(info.equals(other));
+ }
+
+}
Propchange: commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestTimeInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TestTimeInfo.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TimeStampTest.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TimeStampTest.java?rev=1570303&r1=1570302&r2=1570303&view=diff
==============================================================================
--- commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TimeStampTest.java (original)
+++ commons/proper/net/trunk/src/test/java/org/apache/commons/net/ntp/TimeStampTest.java Thu Feb 20 18:57:23 2014
@@ -22,8 +22,6 @@ import junit.framework.TestCase;
/**
* Test class that validates assertions for the basic TimeStamp operations and comparisons.
- *
- * @author Jason Mathews, MITRE Corp
*/
public class TimeStampTest extends TestCase {
@@ -79,4 +77,14 @@ public class TimeStampTest extends TestC
assertEquals(refDate, tsDate);
}
+ public void testNotSame() {
+ TimeStamp time = TimeStamp.getCurrentTime();
+ Object other = Integer.valueOf(0);
+ if(time.equals(other))
+ fail("TimeStamp cannot equal Date");
+ other = null;
+ if(time.equals(other))
+ fail("TimeStamp cannot equal null");
+ }
+
}
Modified: commons/proper/net/trunk/src/test/java/org/apache/commons/net/time/TimeTestSimpleServer.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/test/java/org/apache/commons/net/time/TimeTestSimpleServer.java?rev=1570303&r1=1570302&r2=1570303&view=diff
==============================================================================
--- commons/proper/net/trunk/src/test/java/org/apache/commons/net/time/TimeTestSimpleServer.java (original)
+++ commons/proper/net/trunk/src/test/java/org/apache/commons/net/time/TimeTestSimpleServer.java Thu Feb 20 18:57:23 2014
@@ -34,8 +34,6 @@ import java.net.Socket;
*
* Note this is for debugging purposes only and not meant to be run as a realiable time service.
*
- * @author Jason Mathews, MITRE Corporation
- *
* @version $Revision$
*/
public class TimeTestSimpleServer implements Runnable