145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti/* 245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * Copyright (C) 2010 The Android Open Source Project 345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * 445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * Licensed under the Apache License, Version 2.0 (the "License"); 545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * you may not use this file except in compliance with the License. 645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * You may obtain a copy of the License at 745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * 845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * http://www.apache.org/licenses/LICENSE-2.0 945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * 1045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * Unless required by applicable law or agreed to in writing, software 1145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * distributed under the License is distributed on an "AS IS" BASIS, 1245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * See the License for the specific language governing permissions and 1445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti * limitations under the License. 1545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti */ 1645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 1745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colittipackage android.net; 1845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 1945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colittiimport java.lang.reflect.Method; 2045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colittiimport java.net.InetAddress; 2145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 228c6c2c3c929acad783b9a56b8d9efa597d0ae609Lorenzo Colittiimport android.net.IpPrefix; 2345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colittiimport android.net.RouteInfo; 2445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colittiimport android.os.Parcel; 2545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 2645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colittiimport junit.framework.TestCase; 2745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colittiimport android.test.suitebuilder.annotation.SmallTest; 2845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 2945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colittipublic class RouteInfoTest extends TestCase { 3045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 3145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti private InetAddress Address(String addr) { 3245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti return InetAddress.parseNumericAddress(addr); 3345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 3445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 358c6c2c3c929acad783b9a56b8d9efa597d0ae609Lorenzo Colitti private IpPrefix Prefix(String prefix) { 368c6c2c3c929acad783b9a56b8d9efa597d0ae609Lorenzo Colitti return new IpPrefix(prefix); 3745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 3845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 3945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti @SmallTest 4045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti public void testConstructor() { 4145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti RouteInfo r; 4245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 4345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti // Invalid input. 4445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti try { 458c6c2c3c929acad783b9a56b8d9efa597d0ae609Lorenzo Colitti r = new RouteInfo((IpPrefix) null, null, "rmnet0"); 4645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti fail("Expected RuntimeException: destination and gateway null"); 4745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } catch(RuntimeException e) {} 4845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 4945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti // Null destination is default route. 508c6c2c3c929acad783b9a56b8d9efa597d0ae609Lorenzo Colitti r = new RouteInfo((IpPrefix) null, Address("2001:db8::1"), null); 5145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertEquals(Prefix("::/0"), r.getDestination()); 5245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertEquals(Address("2001:db8::1"), r.getGateway()); 5345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertNull(r.getInterface()); 5445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 558c6c2c3c929acad783b9a56b8d9efa597d0ae609Lorenzo Colitti r = new RouteInfo((IpPrefix) null, Address("192.0.2.1"), "wlan0"); 5645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertEquals(Prefix("0.0.0.0/0"), r.getDestination()); 5745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertEquals(Address("192.0.2.1"), r.getGateway()); 5845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertEquals("wlan0", r.getInterface()); 5945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 6045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti // Null gateway sets gateway to unspecified address (why?). 6145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r = new RouteInfo(Prefix("2001:db8:beef:cafe::/48"), null, "lo"); 6245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertEquals(Prefix("2001:db8:beef::/48"), r.getDestination()); 6345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertEquals(Address("::"), r.getGateway()); 6445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertEquals("lo", r.getInterface()); 6545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 6645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r = new RouteInfo(Prefix("192.0.2.5/24"), null); 6745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertEquals(Prefix("192.0.2.0/24"), r.getDestination()); 6845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertEquals(Address("0.0.0.0"), r.getGateway()); 6945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertNull(r.getInterface()); 7045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 7145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 7245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti public void testMatches() { 73130669992c5ea8d54db15f142e27578bdcf7e003Robert Greenwalt class PatchedRouteInfo { 74130669992c5ea8d54db15f142e27578bdcf7e003Robert Greenwalt private final RouteInfo mRouteInfo; 75130669992c5ea8d54db15f142e27578bdcf7e003Robert Greenwalt 768c6c2c3c929acad783b9a56b8d9efa597d0ae609Lorenzo Colitti public PatchedRouteInfo(IpPrefix destination, InetAddress gateway, String iface) { 77130669992c5ea8d54db15f142e27578bdcf7e003Robert Greenwalt mRouteInfo = new RouteInfo(destination, gateway, iface); 7845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 7945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 8045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti public boolean matches(InetAddress destination) { 81130669992c5ea8d54db15f142e27578bdcf7e003Robert Greenwalt return mRouteInfo.matches(destination); 8245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 8345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 8445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 856f0ec45a3bff040790ae84345f154c65c9777610Robert Greenwalt PatchedRouteInfo r; 8645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 8745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r = new PatchedRouteInfo(Prefix("2001:db8:f00::ace:d00d/127"), null, "rmnet0"); 8845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertTrue(r.matches(Address("2001:db8:f00::ace:d00c"))); 8945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertTrue(r.matches(Address("2001:db8:f00::ace:d00d"))); 9045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertFalse(r.matches(Address("2001:db8:f00::ace:d00e"))); 9145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertFalse(r.matches(Address("2001:db8:f00::bad:d00d"))); 9245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertFalse(r.matches(Address("2001:4868:4860::8888"))); 9345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 9445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r = new PatchedRouteInfo(Prefix("192.0.2.0/23"), null, "wlan0"); 9545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertTrue(r.matches(Address("192.0.2.43"))); 9645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertTrue(r.matches(Address("192.0.3.21"))); 9745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertFalse(r.matches(Address("192.0.0.21"))); 9845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertFalse(r.matches(Address("8.8.8.8"))); 9945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 1006f0ec45a3bff040790ae84345f154c65c9777610Robert Greenwalt PatchedRouteInfo ipv6Default = new PatchedRouteInfo(Prefix("::/0"), null, "rmnet0"); 10145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertTrue(ipv6Default.matches(Address("2001:db8::f00"))); 10245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertFalse(ipv6Default.matches(Address("192.0.2.1"))); 10345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 1046f0ec45a3bff040790ae84345f154c65c9777610Robert Greenwalt PatchedRouteInfo ipv4Default = new PatchedRouteInfo(Prefix("0.0.0.0/0"), null, "rmnet0"); 10545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertTrue(ipv4Default.matches(Address("255.255.255.255"))); 10645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertTrue(ipv4Default.matches(Address("192.0.2.1"))); 10745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertFalse(ipv4Default.matches(Address("2001:db8::f00"))); 10845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 10945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 11045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti private void assertAreEqual(Object o1, Object o2) { 11145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertTrue(o1.equals(o2)); 11245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertTrue(o2.equals(o1)); 11345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 11445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 11545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti private void assertAreNotEqual(Object o1, Object o2) { 11645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertFalse(o1.equals(o2)); 11745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertFalse(o2.equals(o1)); 11845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 11945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 12045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti public void testEquals() { 12145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti // IPv4 12245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti RouteInfo r1 = new RouteInfo(Prefix("2001:db8:ace::/48"), Address("2001:db8::1"), "wlan0"); 12345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti RouteInfo r2 = new RouteInfo(Prefix("2001:db8:ace::/48"), Address("2001:db8::1"), "wlan0"); 12445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertAreEqual(r1, r2); 12545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 12645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti RouteInfo r3 = new RouteInfo(Prefix("2001:db8:ace::/49"), Address("2001:db8::1"), "wlan0"); 12745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti RouteInfo r4 = new RouteInfo(Prefix("2001:db8:ace::/48"), Address("2001:db8::2"), "wlan0"); 12845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti RouteInfo r5 = new RouteInfo(Prefix("2001:db8:ace::/48"), Address("2001:db8::1"), "rmnet0"); 12945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertAreNotEqual(r1, r3); 13045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertAreNotEqual(r1, r4); 13145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertAreNotEqual(r1, r5); 13245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 13345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti // IPv6 13445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r1 = new RouteInfo(Prefix("192.0.2.0/25"), Address("192.0.2.1"), "wlan0"); 13545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r2 = new RouteInfo(Prefix("192.0.2.0/25"), Address("192.0.2.1"), "wlan0"); 13645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertAreEqual(r1, r2); 13745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 13845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r3 = new RouteInfo(Prefix("192.0.2.0/24"), Address("192.0.2.1"), "wlan0"); 13945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r4 = new RouteInfo(Prefix("192.0.2.0/25"), Address("192.0.2.2"), "wlan0"); 14045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r5 = new RouteInfo(Prefix("192.0.2.0/25"), Address("192.0.2.1"), "rmnet0"); 14145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertAreNotEqual(r1, r3); 14245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertAreNotEqual(r1, r4); 14345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertAreNotEqual(r1, r5); 14445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 14545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti // Interfaces (but not destinations or gateways) can be null. 14645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r1 = new RouteInfo(Prefix("192.0.2.0/25"), Address("192.0.2.1"), null); 14745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r2 = new RouteInfo(Prefix("192.0.2.0/25"), Address("192.0.2.1"), null); 14845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r3 = new RouteInfo(Prefix("192.0.2.0/24"), Address("192.0.2.1"), "wlan0"); 14945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertAreEqual(r1, r2); 15045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertAreNotEqual(r1, r3); 15145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 15245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 15364c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti public void testHostAndDefaultRoutes() { 154fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti RouteInfo r; 155fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti 156fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti r = new RouteInfo(Prefix("0.0.0.0/0"), Address("0.0.0.0"), "wlan0"); 157fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti assertFalse(r.isHostRoute()); 15864c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertTrue(r.isDefaultRoute()); 15964c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertTrue(r.isIPv4Default()); 16064c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv6Default()); 161fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti 162fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti r = new RouteInfo(Prefix("::/0"), Address("::"), "wlan0"); 163fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti assertFalse(r.isHostRoute()); 16464c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertTrue(r.isDefaultRoute()); 16564c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv4Default()); 16664c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertTrue(r.isIPv6Default()); 167fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti 168fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti r = new RouteInfo(Prefix("192.0.2.0/24"), null, "wlan0"); 169fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti assertFalse(r.isHostRoute()); 17064c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isDefaultRoute()); 17164c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv4Default()); 17264c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv6Default()); 173fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti 174fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti r = new RouteInfo(Prefix("2001:db8::/48"), null, "wlan0"); 175fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti assertFalse(r.isHostRoute()); 17664c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isDefaultRoute()); 17764c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv4Default()); 17864c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv6Default()); 179fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti 180fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti r = new RouteInfo(Prefix("192.0.2.0/32"), Address("0.0.0.0"), "wlan0"); 181fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti assertTrue(r.isHostRoute()); 18264c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isDefaultRoute()); 18364c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv4Default()); 18464c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv6Default()); 185fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti 186fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti r = new RouteInfo(Prefix("2001:db8::/128"), Address("::"), "wlan0"); 187fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti assertTrue(r.isHostRoute()); 18864c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isDefaultRoute()); 18964c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv4Default()); 19064c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv6Default()); 191fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti 192fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti r = new RouteInfo(Prefix("192.0.2.0/32"), null, "wlan0"); 193fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti assertTrue(r.isHostRoute()); 19464c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isDefaultRoute()); 19564c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv4Default()); 19664c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv6Default()); 197fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti 198fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti r = new RouteInfo(Prefix("2001:db8::/128"), null, "wlan0"); 199fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti assertTrue(r.isHostRoute()); 20064c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isDefaultRoute()); 20164c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv4Default()); 20264c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv6Default()); 203fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti 204fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti r = new RouteInfo(Prefix("::/128"), Address("fe80::"), "wlan0"); 205fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti assertTrue(r.isHostRoute()); 20664c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isDefaultRoute()); 20764c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv4Default()); 20864c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv6Default()); 209fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti 210fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti r = new RouteInfo(Prefix("0.0.0.0/32"), Address("192.0.2.1"), "wlan0"); 211fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti assertTrue(r.isHostRoute()); 21264c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isDefaultRoute()); 21364c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv4Default()); 21464c43b1948a2b2fcd692cd4a48f031efbf7f7336Lorenzo Colitti assertFalse(r.isIPv6Default()); 215fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti } 216fdadc4e242d987c09007df274e01fe678a82331fLorenzo Colitti 2171806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti public void testTruncation() { 2181806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti LinkAddress l; 2191806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti RouteInfo r; 2201806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti 2211806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti l = new LinkAddress("192.0.2.5/30"); 2221806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti r = new RouteInfo(l, Address("192.0.2.1"), "wlan0"); 2231806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti assertEquals("192.0.2.4", r.getDestination().getAddress().getHostAddress()); 2241806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti 2251806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti l = new LinkAddress("2001:db8:1:f::5/63"); 2261806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti r = new RouteInfo(l, Address("2001:db8:5::1"), "wlan0"); 2271806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti assertEquals("2001:db8:1:e::", r.getDestination().getAddress().getHostAddress()); 2281806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti } 2291806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti 2301806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti // Make sure that creating routes to multicast addresses doesn't throw an exception. Even though 2311806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti // there's nothing we can do with them, we don't want to crash if, e.g., someone calls 2321806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti // requestRouteToHostAddress("230.0.0.0", MOBILE_HIPRI); 2331806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti public void testMulticastRoute() { 2341806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti RouteInfo r; 2351806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti r = new RouteInfo(Prefix("230.0.0.0/32"), Address("192.0.2.1"), "wlan0"); 2361806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti r = new RouteInfo(Prefix("ff02::1/128"), Address("2001:db8::1"), "wlan0"); 2371806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti // No exceptions? Good. 2381806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti } 2391806b1fc25bcffaa005e72a55042031a42b168b1Lorenzo Colitti 24045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti public RouteInfo passThroughParcel(RouteInfo r) { 24145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti Parcel p = Parcel.obtain(); 24245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti RouteInfo r2 = null; 24345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti try { 24445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r.writeToParcel(p, 0); 24545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti p.setDataPosition(0); 24645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r2 = RouteInfo.CREATOR.createFromParcel(p); 24745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } finally { 24845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti p.recycle(); 24945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 25045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertNotNull(r2); 25145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti return r2; 25245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 25345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 25445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti public void assertParcelingIsLossless(RouteInfo r) { 25545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti RouteInfo r2 = passThroughParcel(r); 25645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertEquals(r, r2); 25745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 25845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 25945b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti public void testParceling() { 26045b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti RouteInfo r; 26145b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 26245b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r = new RouteInfo(Prefix("::/0"), Address("2001:db8::"), null); 26345b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertParcelingIsLossless(r); 26445b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti 26545b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti r = new RouteInfo(Prefix("192.0.2.0/24"), null, "wlan0"); 26645b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti assertParcelingIsLossless(r); 26745b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti } 26845b9a5bb93569ca49bbd44f7a518091371687f96Lorenzo Colitti} 269