diff options
-rw-r--r-- | core/java/android/net/LinkProperties.java | 6 | ||||
-rw-r--r-- | core/tests/coretests/src/android/net/LinkPropertiesTest.java | 59 |
2 files changed, 62 insertions, 3 deletions
diff --git a/core/java/android/net/LinkProperties.java b/core/java/android/net/LinkProperties.java index ec8d77e75788..5d13a184e495 100644 --- a/core/java/android/net/LinkProperties.java +++ b/core/java/android/net/LinkProperties.java @@ -146,9 +146,9 @@ public class LinkProperties implements Parcelable { if (route != null) { String routeIface = route.getInterface(); if (routeIface != null && !routeIface.equals(mIfaceName)) { - throw new IllegalStateException( + throw new IllegalArgumentException( "Route added with non-matching interface: " + routeIface + - " vs. mIfaceName"); + " vs. " + mIfaceName); } mRoutes.add(routeWithInterface(route)); } @@ -370,7 +370,7 @@ public class LinkProperties implements Parcelable { public CompareResult<RouteInfo> compareRoutes(LinkProperties target) { /* * Duplicate the RouteInfos into removed, we will be removing - * routes which are common between mDnses and target + * routes which are common between mRoutes and target * leaving the routes that are different. And route address which * are in target but not in mRoutes are placed in added. */ diff --git a/core/tests/coretests/src/android/net/LinkPropertiesTest.java b/core/tests/coretests/src/android/net/LinkPropertiesTest.java index e3b6b5f95050..fffaa005ef82 100644 --- a/core/tests/coretests/src/android/net/LinkPropertiesTest.java +++ b/core/tests/coretests/src/android/net/LinkPropertiesTest.java @@ -197,4 +197,63 @@ public class LinkPropertiesTest extends TestCase { } } + private void assertAllRoutesHaveInterface(String iface, LinkProperties lp) { + for (RouteInfo r : lp.getRoutes()) { + assertEquals(iface, r.getInterface()); + } + } + + @SmallTest + public void testRouteInterfaces() { + LinkAddress prefix = new LinkAddress( + NetworkUtils.numericToInetAddress("2001:db8::"), 32); + InetAddress address = NetworkUtils.numericToInetAddress(ADDRV6); + + // Add a route with no interface to a LinkProperties with no interface. No errors. + LinkProperties lp = new LinkProperties(); + RouteInfo r = new RouteInfo(prefix, address, null); + lp.addRoute(r); + assertEquals(1, lp.getRoutes().size()); + assertAllRoutesHaveInterface(null, lp); + + // Add a route with an interface. Except an exception. + r = new RouteInfo(prefix, address, "wlan0"); + try { + lp.addRoute(r); + fail("Adding wlan0 route to LP with no interface, expect exception"); + } catch (IllegalArgumentException expected) {} + + // Change the interface name. All the routes should change their interface name too. + lp.setInterfaceName("rmnet0"); + assertAllRoutesHaveInterface("rmnet0", lp); + + // Now add a route with the wrong interface. This causes an exception too. + try { + lp.addRoute(r); + fail("Adding wlan0 route to rmnet0 LP, expect exception"); + } catch (IllegalArgumentException expected) {} + + // If the interface name matches, the route is added. + lp.setInterfaceName("wlan0"); + lp.addRoute(r); + assertEquals(2, lp.getRoutes().size()); + assertAllRoutesHaveInterface("wlan0", lp); + + // Routes with null interfaces are converted to wlan0. + r = RouteInfo.makeHostRoute(NetworkUtils.numericToInetAddress(ADDRV6), null); + lp.addRoute(r); + assertEquals(3, lp.getRoutes().size()); + assertAllRoutesHaveInterface("wlan0", lp); + + // Check comparisons work. + LinkProperties lp2 = new LinkProperties(lp); + assertAllRoutesHaveInterface("wlan0", lp); + assertEquals(0, lp.compareRoutes(lp2).added.size()); + assertEquals(0, lp.compareRoutes(lp2).removed.size()); + + lp2.setInterfaceName("p2p0"); + assertAllRoutesHaveInterface("p2p0", lp2); + assertEquals(3, lp.compareRoutes(lp2).added.size()); + assertEquals(3, lp.compareRoutes(lp2).removed.size()); + } } |