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