blob: dd679bc20090140375f98e9a14b83e5b9c6b6af4 [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.net.util;
import static android.net.util.NetworkConstants.*;
import libcore.util.HexEncoding;
import junit.framework.TestCase;
/**
* Tests for ConnectivityPacketSummary.
*
* @hide
*/
public class ConnectivityPacketSummaryTest extends TestCase {
private static final byte[] MYHWADDR = {
asByte(0x80), asByte(0x7a), asByte(0xbf), asByte(0x6f), asByte(0x48), asByte(0xf3)
};
private String getSummary(String hexBytes) {
hexBytes = hexBytes.replaceAll("\\s+", "");
final byte[] bytes = HexEncoding.decode(hexBytes.toCharArray(), false);
return ConnectivityPacketSummary.summarize(MYHWADDR, bytes);
}
public void testParseICMPv6DADProbe() {
final String packet =
// Ethernet
"3333FF6F48F3 807ABF6F48F3 86DD" +
// IPv6
"600000000018 3A FF" +
"00000000000000000000000000000000" +
"FF0200000000000000000001FF6F48F3" +
// ICMPv6
"87 00 A8E7" +
"00000000" +
"FE80000000000000827ABFFFFE6F48F3";
final String expected =
"TX 80:7a:bf:6f:48:f3 > 33:33:ff:6f:48:f3 ipv6" +
" :: > ff02::1:ff6f:48f3 icmp6" +
" ns fe80::827a:bfff:fe6f:48f3";
assertEquals(expected, getSummary(packet));
}
public void testParseICMPv6RS() {
final String packet =
// Ethernet
"333300000002 807ABF6F48F3 86DD" +
// IPv6
"600000000010 3A FF" +
"FE80000000000000827ABFFFFE6F48F3" +
"FF020000000000000000000000000002" +
// ICMPv6 RS
"85 00 6973" +
"00000000" +
"01 01 807ABF6F48F3";
final String expected =
"TX 80:7a:bf:6f:48:f3 > 33:33:00:00:00:02 ipv6" +
" fe80::827a:bfff:fe6f:48f3 > ff02::2 icmp6" +
" rs slla 80:7a:bf:6f:48:f3";
assertEquals(expected, getSummary(packet));
}
public void testParseICMPv6RA() {
final String packet =
// Ethernet
"807ABF6F48F3 100E7E263FC1 86DD" +
// IPv6
"600000000068 3A FF" +
"FE80000000000000FA000004FD000001" +
"FE80000000000000827ABFFFFE6F48F3" +
// ICMPv6 RA
"86 00 8141" +
"40 00 0E10" +
"00000000" +
"00000000" +
"01 01 00005E000265" +
"05 01 0000000005DC" +
"19 05 000000000E10" +
" 20014860486000000000000000008844" +
" 20014860486000000000000000008888" +
"03 04 40 C0" +
" 00278D00" +
" 00093A80" +
" 00000000" +
" 2401FA000004FD000000000000000000";
final String expected =
"RX 10:0e:7e:26:3f:c1 > 80:7a:bf:6f:48:f3 ipv6" +
" fe80::fa00:4:fd00:1 > fe80::827a:bfff:fe6f:48f3 icmp6" +
" ra slla 00:00:5e:00:02:65 mtu 1500";
assertEquals(expected, getSummary(packet));
}
public void testParseICMPv6NS() {
final String packet =
// Ethernet
"807ABF6F48F3 100E7E263FC1 86DD" +
// IPv6
"6C0000000020 3A FF" +
"FE80000000000000FA000004FD000001" +
"FF0200000000000000000001FF01C146" +
// ICMPv6 NS
"87 00 8AD4" +
"00000000" +
"2401FA000004FD0015EA6A5C7B01C146" +
"01 01 00005E000265";
final String expected =
"RX 10:0e:7e:26:3f:c1 > 80:7a:bf:6f:48:f3 ipv6" +
" fe80::fa00:4:fd00:1 > ff02::1:ff01:c146 icmp6" +
" ns 2401:fa00:4:fd00:15ea:6a5c:7b01:c146 slla 00:00:5e:00:02:65";
assertEquals(expected, getSummary(packet));
}
public void testInvalidICMPv6NDLength() {
final String packet =
// Ethernet
"807ABF6F48F3 100E7E263FC1 86DD" +
// IPv6
"600000000068 3A FF" +
"FE80000000000000FA000004FD000001" +
"FE80000000000000827ABFFFFE6F48F3" +
// ICMPv6 RA
"86 00 8141" +
"40 00 0E10" +
"00000000" +
"00000000" +
"01 01 00005E000265" +
"00 00 0102030405D6";
final String expected =
"RX 10:0e:7e:26:3f:c1 > 80:7a:bf:6f:48:f3 ipv6" +
" fe80::fa00:4:fd00:1 > fe80::827a:bfff:fe6f:48f3 icmp6" +
" ra slla 00:00:5e:00:02:65 <malformed>";
assertEquals(expected, getSummary(packet));
}
public void testParseICMPv6NA() {
final String packet =
// Ethernet
"00005E000265 807ABF6F48F3 86DD" +
"600000000020 3A FF" +
"2401FA000004FD0015EA6A5C7B01C146" +
"FE80000000000000FA000004FD000001" +
"88 00 E8126" +
"0000000" +
"2401FA000004FD0015EA6A5C7B01C146" +
"02 01 807ABF6F48F3";
final String expected =
"TX 80:7a:bf:6f:48:f3 > 00:00:5e:00:02:65 ipv6" +
" 2401:fa00:4:fd00:15ea:6a5c:7b01:c146 > fe80::fa00:4:fd00:1 icmp6" +
" na 2401:fa00:4:fd00:15ea:6a5c:7b01:c146 tlla 80:7a:bf:6f:48:f3";
assertEquals(expected, getSummary(packet));
}
public void testParseARPRequest() {
final String packet =
// Ethernet
"FFFFFFFFFFFF 807ABF6F48F3 0806" +
// ARP
"0001 0800 06 04" +
// Request
"0001" +
"807ABF6F48F3 64706ADB" +
"000000000000 64706FFD";
final String expected =
"TX 80:7a:bf:6f:48:f3 > ff:ff:ff:ff:ff:ff arp" +
" who-has 100.112.111.253";
assertEquals(expected, getSummary(packet));
}
public void testParseARPReply() {
final String packet =
// Ethernet
"807ABF6F48F3 288A1CA8DFC1 0806" +
// ARP
"0001 0800 06 04" +
// Reply
"0002" +
"288A1CA8DFC1 64706FFD"+
"807ABF6F48F3 64706ADB" +
// Ethernet padding to packet min size.
"0000000000000000000000000000";
final String expected =
"RX 28:8a:1c:a8:df:c1 > 80:7a:bf:6f:48:f3 arp" +
" reply 100.112.111.253 28:8a:1c:a8:df:c1";
assertEquals(expected, getSummary(packet));
}
public void testParseDHCPv4Discover() {
final String packet =
// Ethernet
"FFFFFFFFFFFF 807ABF6F48F3 0800" +
// IPv4
"451001580000400040113986" +
"00000000" +
"FFFFFFFF" +
// UDP
"0044 0043" +
"0144 5559" +
// DHCPv4
"01 01 06 00" +
"79F7ACA4" +
"0000 0000" +
"00000000" +
"00000000" +
"00000000" +
"00000000" +
"807ABF6F48F300000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"63 82 53 63" +
"35 01 01" +
"3D 07 01807ABF6F48F3" +
"39 02 05DC" +
"3C 12 616E64726F69642D646863702D372E312E32" +
"0C 18 616E64726F69642D36623030366333313333393835343139" +
"37 0A 01 03 06 0F 1A 1C 33 3A 3B 2B" +
"FF" +
"00";
final String expectedPrefix =
"TX 80:7a:bf:6f:48:f3 > ff:ff:ff:ff:ff:ff ipv4" +
" 0.0.0.0 > 255.255.255.255 udp" +
" 68 > 67 dhcp4" +
" 80:7a:bf:6f:48:f3 DISCOVER";
assertTrue(getSummary(packet).startsWith(expectedPrefix));
}
public void testParseDHCPv4Offer() {
final String packet =
// Ethernet
"807ABF6F48F3 288A1CA8DFC1 0800" +
// IPv4
"4500013D4D2C0000401188CB" +
"64706FFD" +
"64706ADB" +
// UDP
"0043 0044" +
"0129 371D" +
// DHCPv4
"02 01 06 01" +
"79F7ACA4" +
"0000 0000" +
"00000000" +
"64706ADB" +
"00000000" +
"00000000" +
"807ABF6F48F300000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"63 82 53 63" +
"35 01 02" +
"36 04 AC188A0B" +
"33 04 00000708" +
"01 04 FFFFF000" +
"03 04 64706FFE" +
"06 08 08080808" +
" 08080404" +
"FF0001076165313A363636FF";
final String expectedPrefix =
"RX 28:8a:1c:a8:df:c1 > 80:7a:bf:6f:48:f3 ipv4" +
" 100.112.111.253 > 100.112.106.219 udp" +
" 67 > 68 dhcp4" +
" 80:7a:bf:6f:48:f3 OFFER";
assertTrue(getSummary(packet).startsWith(expectedPrefix));
}
public void testParseDHCPv4Request() {
final String packet =
// Ethernet
"FFFFFFFFFFFF 807ABF6F48F3 0800" +
// IPv4
"45100164000040004011397A" +
"00000000" +
"FFFFFFFF" +
// UDP
"0044 0043" +
"0150 E5C7" +
// DHCPv4
"01 01 06 00" +
"79F7ACA4" +
"0001 0000" +
"00000000" +
"00000000" +
"00000000" +
"00000000" +
"807ABF6F48F300000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"63 82 53 63" +
"35 01 03" +
"3D 07 01807ABF6F48F3" +
"32 04 64706ADB" +
"36 04 AC188A0B" +
"39 02 05DC" +
"3C 12 616E64726F69642D646863702D372E312E32" +
"0C 18 616E64726F69642D36623030366333313333393835343139" +
"37 0A 01 03 06 0F 1A 1C 33 3A 3B 2B" +
"FF" +
"00";
final String expectedPrefix =
"TX 80:7a:bf:6f:48:f3 > ff:ff:ff:ff:ff:ff ipv4" +
" 0.0.0.0 > 255.255.255.255 udp" +
" 68 > 67 dhcp4" +
" 80:7a:bf:6f:48:f3 REQUEST";
assertTrue(getSummary(packet).startsWith(expectedPrefix));
}
public void testParseDHCPv4Ack() {
final String packet =
// Ethernet
"807ABF6F48F3 288A1CA8DFC1 0800" +
// IPv4
"4500013D4D3B0000401188BC" +
"64706FFD" +
"64706ADB" +
// UDP
"0043 0044" +
"0129 341C" +
// DHCPv4
"02 01 06 01" +
"79F7ACA4" +
"0001 0000" +
"00000000" +
"64706ADB" +
"00000000" +
"00000000" +
"807ABF6F48F300000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"63 82 53 63" +
"35 01 05" +
"36 04 AC188A0B" +
"33 04 00000708" +
"01 04 FFFFF000" +
"03 04 64706FFE" +
"06 08 08080808" +
" 08080404" +
"FF0001076165313A363636FF";
final String expectedPrefix =
"RX 28:8a:1c:a8:df:c1 > 80:7a:bf:6f:48:f3 ipv4" +
" 100.112.111.253 > 100.112.106.219 udp" +
" 67 > 68 dhcp4" +
" 80:7a:bf:6f:48:f3 ACK";
assertTrue(getSummary(packet).startsWith(expectedPrefix));
}
}