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