blob: dfaf52a953c73e88c89774097ee84a7821eabcfc [file] [log] [blame]
Erik Kline473355f2016-10-19 17:42:01 +09001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.net.util;
18
Hugo Benichi4a0c5d72017-10-11 11:26:25 +090019import static org.junit.Assert.assertEquals;
20import static org.junit.Assert.assertTrue;
21
Erik Kline8bd00d52017-12-08 17:47:50 +090022import android.net.MacAddress;
Hugo Benichi4a0c5d72017-10-11 11:26:25 +090023import android.support.test.filters.SmallTest;
Remi NGUYEN VANe7e9f2b2019-01-18 19:05:29 +090024import android.support.test.runner.AndroidJUnit4;
Erik Kline473355f2016-10-19 17:42:01 +090025
26import libcore.util.HexEncoding;
27
Remi NGUYEN VANe7e9f2b2019-01-18 19:05:29 +090028import org.junit.Test;
29import org.junit.runner.RunWith;
30
Erik Kline473355f2016-10-19 17:42:01 +090031/**
32 * Tests for ConnectivityPacketSummary.
33 *
34 * @hide
35 */
Hugo Benichi4a0c5d72017-10-11 11:26:25 +090036@RunWith(AndroidJUnit4.class)
37@SmallTest
38public class ConnectivityPacketSummaryTest {
Erik Kline8bd00d52017-12-08 17:47:50 +090039 private static final MacAddress MYHWADDR = MacAddress.fromString("80:7a:bf:6f:48:f3");
Erik Kline473355f2016-10-19 17:42:01 +090040
41 private String getSummary(String hexBytes) {
42 hexBytes = hexBytes.replaceAll("\\s+", "");
43 final byte[] bytes = HexEncoding.decode(hexBytes.toCharArray(), false);
44 return ConnectivityPacketSummary.summarize(MYHWADDR, bytes);
45 }
46
Hugo Benichi4a0c5d72017-10-11 11:26:25 +090047 @Test
Erik Kline473355f2016-10-19 17:42:01 +090048 public void testParseICMPv6DADProbe() {
49 final String packet =
50 // Ethernet
51 "3333FF6F48F3 807ABF6F48F3 86DD" +
52 // IPv6
53 "600000000018 3A FF" +
54 "00000000000000000000000000000000" +
55 "FF0200000000000000000001FF6F48F3" +
56 // ICMPv6
57 "87 00 A8E7" +
58 "00000000" +
59 "FE80000000000000827ABFFFFE6F48F3";
60
61 final String expected =
62 "TX 80:7a:bf:6f:48:f3 > 33:33:ff:6f:48:f3 ipv6" +
63 " :: > ff02::1:ff6f:48f3 icmp6" +
64 " ns fe80::827a:bfff:fe6f:48f3";
65
66 assertEquals(expected, getSummary(packet));
67 }
68
Hugo Benichi4a0c5d72017-10-11 11:26:25 +090069 @Test
Erik Kline473355f2016-10-19 17:42:01 +090070 public void testParseICMPv6RS() {
71 final String packet =
72 // Ethernet
73 "333300000002 807ABF6F48F3 86DD" +
74 // IPv6
75 "600000000010 3A FF" +
76 "FE80000000000000827ABFFFFE6F48F3" +
77 "FF020000000000000000000000000002" +
78 // ICMPv6 RS
79 "85 00 6973" +
80 "00000000" +
81 "01 01 807ABF6F48F3";
82
83 final String expected =
84 "TX 80:7a:bf:6f:48:f3 > 33:33:00:00:00:02 ipv6" +
85 " fe80::827a:bfff:fe6f:48f3 > ff02::2 icmp6" +
86 " rs slla 80:7a:bf:6f:48:f3";
87
88 assertEquals(expected, getSummary(packet));
89 }
90
Hugo Benichi4a0c5d72017-10-11 11:26:25 +090091 @Test
Erik Kline473355f2016-10-19 17:42:01 +090092 public void testParseICMPv6RA() {
93 final String packet =
94 // Ethernet
95 "807ABF6F48F3 100E7E263FC1 86DD" +
96 // IPv6
97 "600000000068 3A FF" +
98 "FE80000000000000FA000004FD000001" +
99 "FE80000000000000827ABFFFFE6F48F3" +
100 // ICMPv6 RA
101 "86 00 8141" +
102 "40 00 0E10" +
103 "00000000" +
104 "00000000" +
105 "01 01 00005E000265" +
106 "05 01 0000000005DC" +
107 "19 05 000000000E10" +
108 " 20014860486000000000000000008844" +
109 " 20014860486000000000000000008888" +
110 "03 04 40 C0" +
111 " 00278D00" +
112 " 00093A80" +
113 " 00000000" +
114 " 2401FA000004FD000000000000000000";
115
116 final String expected =
117 "RX 10:0e:7e:26:3f:c1 > 80:7a:bf:6f:48:f3 ipv6" +
118 " fe80::fa00:4:fd00:1 > fe80::827a:bfff:fe6f:48f3 icmp6" +
119 " ra slla 00:00:5e:00:02:65 mtu 1500";
120
121 assertEquals(expected, getSummary(packet));
122 }
123
Hugo Benichi4a0c5d72017-10-11 11:26:25 +0900124 @Test
Erik Kline473355f2016-10-19 17:42:01 +0900125 public void testParseICMPv6NS() {
126 final String packet =
127 // Ethernet
128 "807ABF6F48F3 100E7E263FC1 86DD" +
129 // IPv6
130 "6C0000000020 3A FF" +
131 "FE80000000000000FA000004FD000001" +
132 "FF0200000000000000000001FF01C146" +
133 // ICMPv6 NS
134 "87 00 8AD4" +
135 "00000000" +
136 "2401FA000004FD0015EA6A5C7B01C146" +
137 "01 01 00005E000265";
138
139 final String expected =
140 "RX 10:0e:7e:26:3f:c1 > 80:7a:bf:6f:48:f3 ipv6" +
141 " fe80::fa00:4:fd00:1 > ff02::1:ff01:c146 icmp6" +
142 " ns 2401:fa00:4:fd00:15ea:6a5c:7b01:c146 slla 00:00:5e:00:02:65";
143
144 assertEquals(expected, getSummary(packet));
145 }
146
Hugo Benichi4a0c5d72017-10-11 11:26:25 +0900147 @Test
Lorenzo Colitti2f157c42016-12-23 13:54:50 +0900148 public void testInvalidICMPv6NDLength() {
149 final String packet =
150 // Ethernet
151 "807ABF6F48F3 100E7E263FC1 86DD" +
152 // IPv6
153 "600000000068 3A FF" +
154 "FE80000000000000FA000004FD000001" +
155 "FE80000000000000827ABFFFFE6F48F3" +
156 // ICMPv6 RA
157 "86 00 8141" +
158 "40 00 0E10" +
159 "00000000" +
160 "00000000" +
161 "01 01 00005E000265" +
162 "00 00 0102030405D6";
163
164 final String expected =
165 "RX 10:0e:7e:26:3f:c1 > 80:7a:bf:6f:48:f3 ipv6" +
166 " fe80::fa00:4:fd00:1 > fe80::827a:bfff:fe6f:48f3 icmp6" +
167 " ra slla 00:00:5e:00:02:65 <malformed>";
168
169 assertEquals(expected, getSummary(packet));
170 }
171
Hugo Benichi4a0c5d72017-10-11 11:26:25 +0900172 @Test
Erik Kline473355f2016-10-19 17:42:01 +0900173 public void testParseICMPv6NA() {
174 final String packet =
175 // Ethernet
176 "00005E000265 807ABF6F48F3 86DD" +
177 "600000000020 3A FF" +
178 "2401FA000004FD0015EA6A5C7B01C146" +
179 "FE80000000000000FA000004FD000001" +
180 "88 00 E8126" +
181 "0000000" +
182 "2401FA000004FD0015EA6A5C7B01C146" +
183 "02 01 807ABF6F48F3";
184
185 final String expected =
186 "TX 80:7a:bf:6f:48:f3 > 00:00:5e:00:02:65 ipv6" +
187 " 2401:fa00:4:fd00:15ea:6a5c:7b01:c146 > fe80::fa00:4:fd00:1 icmp6" +
188 " na 2401:fa00:4:fd00:15ea:6a5c:7b01:c146 tlla 80:7a:bf:6f:48:f3";
189
190 assertEquals(expected, getSummary(packet));
191 }
192
Hugo Benichi4a0c5d72017-10-11 11:26:25 +0900193 @Test
Erik Kline473355f2016-10-19 17:42:01 +0900194 public void testParseARPRequest() {
195 final String packet =
196 // Ethernet
197 "FFFFFFFFFFFF 807ABF6F48F3 0806" +
198 // ARP
199 "0001 0800 06 04" +
200 // Request
201 "0001" +
202 "807ABF6F48F3 64706ADB" +
203 "000000000000 64706FFD";
204
205 final String expected =
206 "TX 80:7a:bf:6f:48:f3 > ff:ff:ff:ff:ff:ff arp" +
207 " who-has 100.112.111.253";
208
209 assertEquals(expected, getSummary(packet));
210 }
211
Hugo Benichi4a0c5d72017-10-11 11:26:25 +0900212 @Test
Erik Kline473355f2016-10-19 17:42:01 +0900213 public void testParseARPReply() {
214 final String packet =
215 // Ethernet
216 "807ABF6F48F3 288A1CA8DFC1 0806" +
217 // ARP
218 "0001 0800 06 04" +
219 // Reply
220 "0002" +
221 "288A1CA8DFC1 64706FFD"+
222 "807ABF6F48F3 64706ADB" +
223 // Ethernet padding to packet min size.
224 "0000000000000000000000000000";
225
226 final String expected =
227 "RX 28:8a:1c:a8:df:c1 > 80:7a:bf:6f:48:f3 arp" +
228 " reply 100.112.111.253 28:8a:1c:a8:df:c1";
229
230 assertEquals(expected, getSummary(packet));
231 }
232
Hugo Benichi4a0c5d72017-10-11 11:26:25 +0900233 @Test
Erik Kline473355f2016-10-19 17:42:01 +0900234 public void testParseDHCPv4Discover() {
235 final String packet =
236 // Ethernet
237 "FFFFFFFFFFFF 807ABF6F48F3 0800" +
238 // IPv4
239 "451001580000400040113986" +
240 "00000000" +
241 "FFFFFFFF" +
242 // UDP
243 "0044 0043" +
244 "0144 5559" +
245 // DHCPv4
246 "01 01 06 00" +
247 "79F7ACA4" +
248 "0000 0000" +
249 "00000000" +
250 "00000000" +
251 "00000000" +
252 "00000000" +
253 "807ABF6F48F300000000000000000000" +
254 "0000000000000000000000000000000000000000000000000000000000000000" +
255 "0000000000000000000000000000000000000000000000000000000000000000" +
256 "0000000000000000000000000000000000000000000000000000000000000000" +
257 "0000000000000000000000000000000000000000000000000000000000000000" +
258 "0000000000000000000000000000000000000000000000000000000000000000" +
259 "0000000000000000000000000000000000000000000000000000000000000000" +
260 "63 82 53 63" +
261 "35 01 01" +
262 "3D 07 01807ABF6F48F3" +
263 "39 02 05DC" +
264 "3C 12 616E64726F69642D646863702D372E312E32" +
265 "0C 18 616E64726F69642D36623030366333313333393835343139" +
266 "37 0A 01 03 06 0F 1A 1C 33 3A 3B 2B" +
267 "FF" +
268 "00";
269
270 final String expectedPrefix =
271 "TX 80:7a:bf:6f:48:f3 > ff:ff:ff:ff:ff:ff ipv4" +
272 " 0.0.0.0 > 255.255.255.255 udp" +
273 " 68 > 67 dhcp4" +
274 " 80:7a:bf:6f:48:f3 DISCOVER";
275
276 assertTrue(getSummary(packet).startsWith(expectedPrefix));
277 }
278
Hugo Benichi4a0c5d72017-10-11 11:26:25 +0900279 @Test
Erik Kline473355f2016-10-19 17:42:01 +0900280 public void testParseDHCPv4Offer() {
281 final String packet =
282 // Ethernet
283 "807ABF6F48F3 288A1CA8DFC1 0800" +
284 // IPv4
285 "4500013D4D2C0000401188CB" +
286 "64706FFD" +
287 "64706ADB" +
288 // UDP
289 "0043 0044" +
290 "0129 371D" +
291 // DHCPv4
292 "02 01 06 01" +
293 "79F7ACA4" +
294 "0000 0000" +
295 "00000000" +
296 "64706ADB" +
297 "00000000" +
298 "00000000" +
299 "807ABF6F48F300000000000000000000" +
300 "0000000000000000000000000000000000000000000000000000000000000000" +
301 "0000000000000000000000000000000000000000000000000000000000000000" +
302 "0000000000000000000000000000000000000000000000000000000000000000" +
303 "0000000000000000000000000000000000000000000000000000000000000000" +
304 "0000000000000000000000000000000000000000000000000000000000000000" +
305 "0000000000000000000000000000000000000000000000000000000000000000" +
306 "63 82 53 63" +
307 "35 01 02" +
308 "36 04 AC188A0B" +
309 "33 04 00000708" +
310 "01 04 FFFFF000" +
311 "03 04 64706FFE" +
312 "06 08 08080808" +
313 " 08080404" +
314 "FF0001076165313A363636FF";
315
316 final String expectedPrefix =
317 "RX 28:8a:1c:a8:df:c1 > 80:7a:bf:6f:48:f3 ipv4" +
318 " 100.112.111.253 > 100.112.106.219 udp" +
319 " 67 > 68 dhcp4" +
320 " 80:7a:bf:6f:48:f3 OFFER";
321
322 assertTrue(getSummary(packet).startsWith(expectedPrefix));
323 }
324
Hugo Benichi4a0c5d72017-10-11 11:26:25 +0900325 @Test
Erik Kline473355f2016-10-19 17:42:01 +0900326 public void testParseDHCPv4Request() {
327 final String packet =
328 // Ethernet
329 "FFFFFFFFFFFF 807ABF6F48F3 0800" +
330 // IPv4
331 "45100164000040004011397A" +
332 "00000000" +
333 "FFFFFFFF" +
334 // UDP
335 "0044 0043" +
336 "0150 E5C7" +
337 // DHCPv4
338 "01 01 06 00" +
339 "79F7ACA4" +
340 "0001 0000" +
341 "00000000" +
342 "00000000" +
343 "00000000" +
344 "00000000" +
345 "807ABF6F48F300000000000000000000" +
346 "0000000000000000000000000000000000000000000000000000000000000000" +
347 "0000000000000000000000000000000000000000000000000000000000000000" +
348 "0000000000000000000000000000000000000000000000000000000000000000" +
349 "0000000000000000000000000000000000000000000000000000000000000000" +
350 "0000000000000000000000000000000000000000000000000000000000000000" +
351 "0000000000000000000000000000000000000000000000000000000000000000" +
352 "63 82 53 63" +
353 "35 01 03" +
354 "3D 07 01807ABF6F48F3" +
355 "32 04 64706ADB" +
356 "36 04 AC188A0B" +
357 "39 02 05DC" +
358 "3C 12 616E64726F69642D646863702D372E312E32" +
359 "0C 18 616E64726F69642D36623030366333313333393835343139" +
360 "37 0A 01 03 06 0F 1A 1C 33 3A 3B 2B" +
361 "FF" +
362 "00";
363
364 final String expectedPrefix =
365 "TX 80:7a:bf:6f:48:f3 > ff:ff:ff:ff:ff:ff ipv4" +
366 " 0.0.0.0 > 255.255.255.255 udp" +
367 " 68 > 67 dhcp4" +
368 " 80:7a:bf:6f:48:f3 REQUEST";
369
370 assertTrue(getSummary(packet).startsWith(expectedPrefix));
371 }
372
Hugo Benichi4a0c5d72017-10-11 11:26:25 +0900373 @Test
Erik Kline473355f2016-10-19 17:42:01 +0900374 public void testParseDHCPv4Ack() {
375 final String packet =
376 // Ethernet
377 "807ABF6F48F3 288A1CA8DFC1 0800" +
378 // IPv4
379 "4500013D4D3B0000401188BC" +
380 "64706FFD" +
381 "64706ADB" +
382 // UDP
383 "0043 0044" +
384 "0129 341C" +
385 // DHCPv4
386 "02 01 06 01" +
387 "79F7ACA4" +
388 "0001 0000" +
389 "00000000" +
390 "64706ADB" +
391 "00000000" +
392 "00000000" +
393 "807ABF6F48F300000000000000000000" +
394 "0000000000000000000000000000000000000000000000000000000000000000" +
395 "0000000000000000000000000000000000000000000000000000000000000000" +
396 "0000000000000000000000000000000000000000000000000000000000000000" +
397 "0000000000000000000000000000000000000000000000000000000000000000" +
398 "0000000000000000000000000000000000000000000000000000000000000000" +
399 "0000000000000000000000000000000000000000000000000000000000000000" +
400 "63 82 53 63" +
401 "35 01 05" +
402 "36 04 AC188A0B" +
403 "33 04 00000708" +
404 "01 04 FFFFF000" +
405 "03 04 64706FFE" +
406 "06 08 08080808" +
407 " 08080404" +
408 "FF0001076165313A363636FF";
409
410 final String expectedPrefix =
411 "RX 28:8a:1c:a8:df:c1 > 80:7a:bf:6f:48:f3 ipv4" +
412 " 100.112.111.253 > 100.112.106.219 udp" +
413 " 67 > 68 dhcp4" +
414 " 80:7a:bf:6f:48:f3 ACK";
415
416 assertTrue(getSummary(packet).startsWith(expectedPrefix));
417 }
418}