1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.net.ntp;
18
19 import static org.junit.jupiter.api.Assertions.assertThrows;
20
21 import java.net.DatagramPacket;
22
23 import org.junit.Assert;
24 import org.junit.Test;
25
26 public class TestNtpPacket {
27
28
29
30
31 static final byte[] ntpPacket = hexStringToByteArray("1c0304ef0000006400000d3681531472d552447fec1d6000d5524718ac49ba5ed55247194b6d9000d55247194b797000");
32
33 private static byte[] hexStringToByteArray(final String s) {
34 final int len = s.length();
35 final byte[] data = new byte[len / 2];
36 for (int i = 0; i < len; i += 2) {
37 data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
38 }
39 return data;
40 }
41
42 @Test
43 public void testCreate() {
44 final NtpV3Packet message = new NtpV3Impl();
45 message.setLeapIndicator(0);
46 message.setVersion(NtpV3Packet.VERSION_3);
47 message.setMode(4);
48 message.setStratum(3);
49 message.setPoll(4);
50 message.setPrecision(-17);
51 message.setRootDelay(100);
52 message.setRootDispersion(3382);
53 message.setReferenceId(0x81531472);
54 message.setReferenceTime(new TimeStamp(0xd552447fec1d6000L));
55 message.setOriginateTimeStamp(new TimeStamp(0xd5524718ac49ba5eL));
56 message.setReceiveTimeStamp(new TimeStamp(0xd55247194b6d9000L));
57 message.setTransmitTime(new TimeStamp(0xd55247194b797000L));
58
59 Assert.assertEquals(-17, message.getPrecision());
60 Assert.assertEquals(4, message.getPoll());
61 Assert.assertEquals(100, message.getRootDelay());
62 Assert.assertEquals(3382, message.getRootDispersion());
63 Assert.assertEquals(0x81531472, message.getReferenceId());
64 Assert.assertNotNull(message.getReferenceTimeStamp());
65 Assert.assertEquals("NTP", message.getType());
66 Assert.assertEquals("Server", message.getModeName());
67 Assert.assertEquals("129.83.20.114", message.getReferenceIdString());
68 Assert.assertEquals(51, message.getRootDispersionInMillis());
69 Assert.assertEquals(message.getRootDelay() / 65.536, message.getRootDelayInMillisDouble(), 1e-13);
70
71 final DatagramPacket dp = message.getDatagramPacket();
72 Assert.assertNotNull(dp);
73 Assert.assertEquals(48, dp.getLength());
74
75 final NtpV3Packet message2 = new NtpV3Impl();
76 final DatagramPacket dp2 = new DatagramPacket(ntpPacket, ntpPacket.length);
77 message2.setDatagramPacket(dp2);
78
79 Assert.assertEquals(message2, message);
80 Assert.assertEquals(message2.hashCode(), message.hashCode());
81 Assert.assertEquals(message2.toString(), message.toString());
82 }
83
84 @Test
85 public void testCreateAndSetByte0() {
86
87 final NtpV3Packet message = new NtpV3Impl();
88
89 message.setLeapIndicator(2);
90 message.setMode(4);
91 message.setVersion(NtpV3Packet.VERSION_3);
92
93 Assert.assertEquals(4, message.getMode());
94 Assert.assertEquals(NtpV3Packet.VERSION_3, message.getVersion());
95 Assert.assertEquals(2, message.getLeapIndicator());
96
97 message.setLeapIndicator(2);
98 message.setVersion(NtpV3Packet.VERSION_3);
99 message.setMode(4);
100
101 Assert.assertEquals(4, message.getMode());
102 Assert.assertEquals(NtpV3Packet.VERSION_3, message.getVersion());
103 Assert.assertEquals(2, message.getLeapIndicator());
104
105 message.setMode(4);
106 message.setLeapIndicator(2);
107 message.setVersion(NtpV3Packet.VERSION_3);
108
109 Assert.assertEquals(4, message.getMode());
110 Assert.assertEquals(NtpV3Packet.VERSION_3, message.getVersion());
111 Assert.assertEquals(2, message.getLeapIndicator());
112
113 message.setMode(4);
114 message.setVersion(NtpV3Packet.VERSION_3);
115 message.setLeapIndicator(2);
116
117 Assert.assertEquals(4, message.getMode());
118 Assert.assertEquals(NtpV3Packet.VERSION_3, message.getVersion());
119 Assert.assertEquals(2, message.getLeapIndicator());
120
121 message.setVersion(NtpV3Packet.VERSION_3);
122 message.setMode(4);
123 message.setLeapIndicator(2);
124
125 Assert.assertEquals(4, message.getMode());
126 Assert.assertEquals(NtpV3Packet.VERSION_3, message.getVersion());
127 Assert.assertEquals(2, message.getLeapIndicator());
128
129 message.setVersion(NtpV3Packet.VERSION_3);
130 message.setLeapIndicator(2);
131 message.setMode(4);
132
133 Assert.assertEquals(4, message.getMode());
134 Assert.assertEquals(NtpV3Packet.VERSION_3, message.getVersion());
135 Assert.assertEquals(2, message.getLeapIndicator());
136 }
137
138 @Test
139 public void testCreateFromBadPacket() {
140 final NtpV3Packet message = new NtpV3Impl();
141 final DatagramPacket dp = new DatagramPacket(ntpPacket, ntpPacket.length - 4);
142 assertThrows(IllegalArgumentException.class, () -> message.setDatagramPacket(dp));
143 }
144
145 @Test
146 public void testCreateFromBytes() {
147 final NtpV3Packet message = new NtpV3Impl();
148 final DatagramPacket dp = new DatagramPacket(ntpPacket, ntpPacket.length);
149 message.setDatagramPacket(dp);
150 Assert.assertEquals(4, message.getMode());
151 }
152
153 @Test
154 public void testCreateFromNullPacket() {
155 final NtpV3Packet message = new NtpV3Impl();
156 assertThrows(IllegalArgumentException.class, () -> message.setDatagramPacket(null));
157 }
158
159 @Test
160 public void testCreateNtpV4() {
161 final NtpV3Packet message = new NtpV3Impl();
162 message.setVersion(NtpV3Packet.VERSION_4);
163 message.setStratum(3);
164 message.setReferenceId(0x81531472);
165
166 Assert.assertEquals("81531472", message.getReferenceIdString());
167
168 message.setVersion(NtpV3Packet.VERSION_4);
169 message.setStratum(1);
170 message.setReferenceId(0x55534E4F);
171
172 Assert.assertEquals("USNO", message.getReferenceIdString());
173
174 message.setReferenceId(0x47505300);
175 Assert.assertEquals("GPS", message.getReferenceIdString());
176 }
177
178 @Test
179 public void testEquals() {
180 final NtpV3Packet message1 = new NtpV3Impl();
181 final DatagramPacket dp = new DatagramPacket(ntpPacket, ntpPacket.length);
182 message1.setDatagramPacket(dp);
183 final NtpV3Packet message2 = new NtpV3Impl();
184 message2.setDatagramPacket(dp);
185 Assert.assertEquals("hashCode", message1.hashCode(), message2.hashCode());
186 Assert.assertEquals(message1, message2);
187
188
189 message2.setMode(2);
190 Assert.assertTrue(message1.getMode() != message2.getMode());
191 Assert.assertNotEquals(message1, message2);
192
193 final NtpV3Packet message3 = null;
194 Assert.assertNotEquals(message3, message1);
195 }
196
197 }