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