Add more assertions to testStackedLinkProperties.

Check all routes that are added and removed instead of just some
of them. This is in preparation of an upcoming change that
switches to adding and creating routes by issuing direct calls to
netd.

Also rename the misleading ipv4Default route variable to
ipv4Subnet, which is what it actually is.

Bug: 142892223
Test: test-only change
Change-Id: I7d111382be215a926a7d7d4701bd3c3e94372b99
This commit is contained in:
Lorenzo Colitti
2020-03-03 20:52:38 +09:00
parent ea4d07c802
commit 2e6a35ef5e

View File

@@ -5929,8 +5929,8 @@ public class ConnectivityServiceTest {
final IpPrefix kNat64Prefix = new IpPrefix(InetAddress.getByName(kNat64PrefixString), 96); final IpPrefix kNat64Prefix = new IpPrefix(InetAddress.getByName(kNat64PrefixString), 96);
final RouteInfo defaultRoute = new RouteInfo((IpPrefix) null, myIpv6.getAddress(), final RouteInfo defaultRoute = new RouteInfo((IpPrefix) null, myIpv6.getAddress(),
MOBILE_IFNAME); MOBILE_IFNAME);
final RouteInfo hostRoute = new RouteInfo(myIpv6, null, MOBILE_IFNAME); final RouteInfo ipv6Subnet = new RouteInfo(myIpv6, null, MOBILE_IFNAME);
final RouteInfo ipv4Default = new RouteInfo(myIpv4, null, MOBILE_IFNAME); final RouteInfo ipv4Subnet = new RouteInfo(myIpv4, null, MOBILE_IFNAME);
final RouteInfo stackedDefault = new RouteInfo((IpPrefix) null, myIpv4.getAddress(), final RouteInfo stackedDefault = new RouteInfo((IpPrefix) null, myIpv4.getAddress(),
CLAT_PREFIX + MOBILE_IFNAME); CLAT_PREFIX + MOBILE_IFNAME);
@@ -5946,7 +5946,7 @@ public class ConnectivityServiceTest {
cellLp.setInterfaceName(MOBILE_IFNAME); cellLp.setInterfaceName(MOBILE_IFNAME);
cellLp.addLinkAddress(myIpv6); cellLp.addLinkAddress(myIpv6);
cellLp.addRoute(defaultRoute); cellLp.addRoute(defaultRoute);
cellLp.addRoute(hostRoute); cellLp.addRoute(ipv6Subnet);
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR, cellLp); mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR, cellLp);
reset(mNetworkManagementService); reset(mNetworkManagementService);
reset(mMockDnsResolver); reset(mMockDnsResolver);
@@ -5959,8 +5959,7 @@ public class ConnectivityServiceTest {
waitForIdle(); waitForIdle();
verify(mMockNetd, times(1)).networkCreatePhysical(eq(cellNetId), anyInt()); verify(mMockNetd, times(1)).networkCreatePhysical(eq(cellNetId), anyInt());
verify(mNetworkManagementService, times(1)).addRoute(eq(cellNetId), eq(defaultRoute)); assertRoutesAdded(cellNetId, ipv6Subnet, defaultRoute);
verify(mNetworkManagementService, times(1)).addRoute(eq(cellNetId), eq(hostRoute));
verify(mMockDnsResolver, times(1)).createNetworkCache(eq(cellNetId)); verify(mMockDnsResolver, times(1)).createNetworkCache(eq(cellNetId));
verify(mBatteryStatsService).noteNetworkInterfaceType(cellLp.getInterfaceName(), verify(mBatteryStatsService).noteNetworkInterfaceType(cellLp.getInterfaceName(),
TYPE_MOBILE); TYPE_MOBILE);
@@ -5976,6 +5975,7 @@ public class ConnectivityServiceTest {
cellLp.addLinkAddress(myIpv4); cellLp.addLinkAddress(myIpv4);
mCellNetworkAgent.sendLinkProperties(cellLp); mCellNetworkAgent.sendLinkProperties(cellLp);
networkCallback.expectCallback(CallbackEntry.LINK_PROPERTIES_CHANGED, mCellNetworkAgent); networkCallback.expectCallback(CallbackEntry.LINK_PROPERTIES_CHANGED, mCellNetworkAgent);
assertRoutesAdded(cellNetId, ipv4Subnet);
verify(mMockDnsResolver, times(1)).stopPrefix64Discovery(cellNetId); verify(mMockDnsResolver, times(1)).stopPrefix64Discovery(cellNetId);
verify(mMockDnsResolver, atLeastOnce()).setResolverConfiguration(any()); verify(mMockDnsResolver, atLeastOnce()).setResolverConfiguration(any());
@@ -5997,6 +5997,7 @@ public class ConnectivityServiceTest {
mCellNetworkAgent.sendLinkProperties(cellLp); mCellNetworkAgent.sendLinkProperties(cellLp);
networkCallback.expectCallback(CallbackEntry.LINK_PROPERTIES_CHANGED, mCellNetworkAgent); networkCallback.expectCallback(CallbackEntry.LINK_PROPERTIES_CHANGED, mCellNetworkAgent);
verify(mMockDnsResolver, times(1)).startPrefix64Discovery(cellNetId); verify(mMockDnsResolver, times(1)).startPrefix64Discovery(cellNetId);
assertRoutesRemoved(cellNetId, ipv4Subnet);
// When NAT64 prefix discovery succeeds, LinkProperties are updated and clatd is started. // When NAT64 prefix discovery succeeds, LinkProperties are updated and clatd is started.
Nat464Xlat clat = getNat464Xlat(mCellNetworkAgent); Nat464Xlat clat = getNat464Xlat(mCellNetworkAgent);
@@ -6015,7 +6016,7 @@ public class ConnectivityServiceTest {
List<LinkProperties> stackedLps = mCm.getLinkProperties(mCellNetworkAgent.getNetwork()) List<LinkProperties> stackedLps = mCm.getLinkProperties(mCellNetworkAgent.getNetwork())
.getStackedLinks(); .getStackedLinks();
assertEquals(makeClatLinkProperties(myIpv4), stackedLps.get(0)); assertEquals(makeClatLinkProperties(myIpv4), stackedLps.get(0));
verify(mNetworkManagementService).addRoute(eq(cellNetId), eq(stackedDefault)); assertRoutesAdded(cellNetId, stackedDefault);
// Change trivial linkproperties and see if stacked link is preserved. // Change trivial linkproperties and see if stacked link is preserved.
cellLp.addDnsServer(InetAddress.getByName("8.8.8.8")); cellLp.addDnsServer(InetAddress.getByName("8.8.8.8"));
@@ -6041,10 +6042,10 @@ public class ConnectivityServiceTest {
// Add ipv4 address, expect that clatd and prefix discovery are stopped and stacked // Add ipv4 address, expect that clatd and prefix discovery are stopped and stacked
// linkproperties are cleaned up. // linkproperties are cleaned up.
cellLp.addLinkAddress(myIpv4); cellLp.addLinkAddress(myIpv4);
cellLp.addRoute(ipv4Default); cellLp.addRoute(ipv4Subnet);
mCellNetworkAgent.sendLinkProperties(cellLp); mCellNetworkAgent.sendLinkProperties(cellLp);
verify(mNetworkManagementService).addRoute(eq(cellNetId), eq(stackedDefault));
networkCallback.expectCallback(CallbackEntry.LINK_PROPERTIES_CHANGED, mCellNetworkAgent); networkCallback.expectCallback(CallbackEntry.LINK_PROPERTIES_CHANGED, mCellNetworkAgent);
assertRoutesAdded(cellNetId, ipv4Subnet);
verify(mMockNetd, times(1)).clatdStop(MOBILE_IFNAME); verify(mMockNetd, times(1)).clatdStop(MOBILE_IFNAME);
verify(mMockDnsResolver, times(1)).stopPrefix64Discovery(cellNetId); verify(mMockDnsResolver, times(1)).stopPrefix64Discovery(cellNetId);
@@ -6055,6 +6056,7 @@ public class ConnectivityServiceTest {
expected.setNat64Prefix(kNat64Prefix); expected.setNat64Prefix(kNat64Prefix);
assertEquals(expected, actualLpAfterIpv4); assertEquals(expected, actualLpAfterIpv4);
assertEquals(0, actualLpAfterIpv4.getStackedLinks().size()); assertEquals(0, actualLpAfterIpv4.getStackedLinks().size());
assertRoutesRemoved(cellNetId, stackedDefault);
// The interface removed callback happens but has no effect after stop is called. // The interface removed callback happens but has no effect after stop is called.
clat.interfaceRemoved(CLAT_PREFIX + MOBILE_IFNAME); clat.interfaceRemoved(CLAT_PREFIX + MOBILE_IFNAME);
@@ -6080,7 +6082,7 @@ public class ConnectivityServiceTest {
cellLp.removeDnsServer(InetAddress.getByName("8.8.8.8")); cellLp.removeDnsServer(InetAddress.getByName("8.8.8.8"));
mCellNetworkAgent.sendLinkProperties(cellLp); mCellNetworkAgent.sendLinkProperties(cellLp);
networkCallback.expectCallback(CallbackEntry.LINK_PROPERTIES_CHANGED, mCellNetworkAgent); networkCallback.expectCallback(CallbackEntry.LINK_PROPERTIES_CHANGED, mCellNetworkAgent);
verify(mNetworkManagementService, times(1)).removeRoute(eq(cellNetId), eq(ipv4Default)); assertRoutesRemoved(cellNetId, ipv4Subnet); // Directly-connected routes auto-added.
verify(mMockDnsResolver, times(1)).startPrefix64Discovery(cellNetId); verify(mMockDnsResolver, times(1)).startPrefix64Discovery(cellNetId);
mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, true /* added */, mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, true /* added */,
kNat64PrefixString, 96); kNat64PrefixString, 96);
@@ -6092,15 +6094,20 @@ public class ConnectivityServiceTest {
clat.interfaceLinkStateChanged(CLAT_PREFIX + MOBILE_IFNAME, true); clat.interfaceLinkStateChanged(CLAT_PREFIX + MOBILE_IFNAME, true);
networkCallback.expectLinkPropertiesThat(mCellNetworkAgent, networkCallback.expectLinkPropertiesThat(mCellNetworkAgent,
(lp) -> lp.getStackedLinks().size() == 1 && lp.getNat64Prefix() != null); (lp) -> lp.getStackedLinks().size() == 1 && lp.getNat64Prefix() != null);
assertRoutesAdded(cellNetId, stackedDefault);
// NAT64 prefix is removed. Expect that clat is stopped. // NAT64 prefix is removed. Expect that clat is stopped.
mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, false /* added */, mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, false /* added */,
kNat64PrefixString, 96); kNat64PrefixString, 96);
networkCallback.expectLinkPropertiesThat(mCellNetworkAgent, networkCallback.expectLinkPropertiesThat(mCellNetworkAgent,
(lp) -> lp.getStackedLinks().size() == 0 && lp.getNat64Prefix() == null); (lp) -> lp.getStackedLinks().size() == 0 && lp.getNat64Prefix() == null);
assertRoutesRemoved(cellNetId, ipv4Subnet, stackedDefault);
// Stop has no effect because clat is already stopped.
verify(mMockNetd, times(1)).clatdStop(MOBILE_IFNAME); verify(mMockNetd, times(1)).clatdStop(MOBILE_IFNAME);
networkCallback.expectLinkPropertiesThat(mCellNetworkAgent, networkCallback.expectLinkPropertiesThat(mCellNetworkAgent,
(lp) -> lp.getStackedLinks().size() == 0); (lp) -> lp.getStackedLinks().size() == 0);
verifyNoMoreInteractions(mMockNetd);
// Clean up. // Clean up.
mCellNetworkAgent.disconnect(); mCellNetworkAgent.disconnect();
@@ -6668,6 +6675,20 @@ public class ConnectivityServiceTest {
} }
} }
private void assertRoutesAdded(int netId, RouteInfo... routes) throws Exception {
InOrder inOrder = inOrder(mNetworkManagementService);
for (int i = 0; i < routes.length; i++) {
inOrder.verify(mNetworkManagementService).addRoute(eq(netId), eq(routes[i]));
}
}
private void assertRoutesRemoved(int netId, RouteInfo... routes) throws Exception {
InOrder inOrder = inOrder(mNetworkManagementService);
for (int i = 0; i < routes.length; i++) {
inOrder.verify(mNetworkManagementService).removeRoute(eq(netId), eq(routes[i]));
}
}
@Test @Test
public void testRegisterUnregisterConnectivityDiagnosticsCallback() throws Exception { public void testRegisterUnregisterConnectivityDiagnosticsCallback() throws Exception {
final NetworkRequest wifiRequest = final NetworkRequest wifiRequest =