Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1994bc14 authored by Lorenzo Colitti's avatar Lorenzo Colitti
Browse files

Unit test routes with interfaces in LinkProperties

Change-Id: Ie41a56bc9863ee72f4d7a8f72e436fc57e57b1af
parent 93f99846
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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.
         */
+59 −0
Original line number Diff line number Diff line
@@ -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());
    }
}