Note network interfaces based on transport
Instead of classifying interfaces by network type in BatteryStats,
classify them based on the transports array provided by the
NetworkAgent.
Network types are deprecated and transports should be used instead. This
change allows BatteryStats to stop depending on unstable APIs such as
isNetworkTypeMobile.
This change also updates nullability annotations in ConnectivityService
and NetworkAgentInfo to show that the NetworkCapabilities are non-null
(as provided by the network agent) when calling
noteNetworkInterfaceTransports.
Bug: 174436414
Test: atest
atest ConnectivityServiceTest#testBatteryStatsNetworkType \
--rerun-until-failure 40
Merged-In: I4e928fac8a57a9b1fc758a44af2a5719b8c871b8
Change-Id: I4e928fac8a57a9b1fc758a44af2a5719b8c871b8
This commit is contained in:
@@ -7351,7 +7351,6 @@ public class ConnectivityServiceTest {
|
||||
mCm.unregisterNetworkCallback(trustedCallback);
|
||||
}
|
||||
|
||||
@Ignore // 40%+ flakiness : figure out why and re-enable.
|
||||
@Test
|
||||
public final void testBatteryStatsNetworkType() throws Exception {
|
||||
final LinkProperties cellLp = new LinkProperties();
|
||||
@@ -7359,8 +7358,8 @@ public class ConnectivityServiceTest {
|
||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR, cellLp);
|
||||
mCellNetworkAgent.connect(true);
|
||||
waitForIdle();
|
||||
verify(mBatteryStatsService).noteNetworkInterfaceType(cellLp.getInterfaceName(),
|
||||
TYPE_MOBILE);
|
||||
verify(mBatteryStatsService).noteNetworkInterfaceForTransports(cellLp.getInterfaceName(),
|
||||
new int[] { TRANSPORT_CELLULAR });
|
||||
reset(mBatteryStatsService);
|
||||
|
||||
final LinkProperties wifiLp = new LinkProperties();
|
||||
@@ -7368,18 +7367,20 @@ public class ConnectivityServiceTest {
|
||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI, wifiLp);
|
||||
mWiFiNetworkAgent.connect(true);
|
||||
waitForIdle();
|
||||
verify(mBatteryStatsService).noteNetworkInterfaceType(wifiLp.getInterfaceName(),
|
||||
TYPE_WIFI);
|
||||
verify(mBatteryStatsService).noteNetworkInterfaceForTransports(wifiLp.getInterfaceName(),
|
||||
new int[] { TRANSPORT_WIFI });
|
||||
reset(mBatteryStatsService);
|
||||
|
||||
mCellNetworkAgent.disconnect();
|
||||
mWiFiNetworkAgent.disconnect();
|
||||
|
||||
cellLp.setInterfaceName("wifi0");
|
||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR, cellLp);
|
||||
mCellNetworkAgent.connect(true);
|
||||
waitForIdle();
|
||||
verify(mBatteryStatsService).noteNetworkInterfaceType(cellLp.getInterfaceName(),
|
||||
TYPE_MOBILE);
|
||||
verify(mBatteryStatsService).noteNetworkInterfaceForTransports(cellLp.getInterfaceName(),
|
||||
new int[] { TRANSPORT_CELLULAR });
|
||||
mCellNetworkAgent.disconnect();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -7452,8 +7453,8 @@ public class ConnectivityServiceTest {
|
||||
assertRoutesAdded(cellNetId, ipv6Subnet, defaultRoute);
|
||||
verify(mMockDnsResolver, times(1)).createNetworkCache(eq(cellNetId));
|
||||
verify(mMockNetd, times(1)).networkAddInterface(cellNetId, MOBILE_IFNAME);
|
||||
verify(mBatteryStatsService).noteNetworkInterfaceType(cellLp.getInterfaceName(),
|
||||
TYPE_MOBILE);
|
||||
verify(mBatteryStatsService).noteNetworkInterfaceForTransports(cellLp.getInterfaceName(),
|
||||
new int[] { TRANSPORT_CELLULAR });
|
||||
|
||||
networkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
verify(mMockDnsResolver, times(1)).startPrefix64Discovery(cellNetId);
|
||||
@@ -7473,7 +7474,8 @@ public class ConnectivityServiceTest {
|
||||
// Make sure BatteryStats was not told about any v4- interfaces, as none should have
|
||||
// come online yet.
|
||||
waitForIdle();
|
||||
verify(mBatteryStatsService, never()).noteNetworkInterfaceType(startsWith("v4-"), anyInt());
|
||||
verify(mBatteryStatsService, never()).noteNetworkInterfaceForTransports(startsWith("v4-"),
|
||||
any());
|
||||
|
||||
verifyNoMoreInteractions(mMockNetd);
|
||||
verifyNoMoreInteractions(mMockDnsResolver);
|
||||
@@ -7526,8 +7528,8 @@ public class ConnectivityServiceTest {
|
||||
assertTrue(ArrayUtils.contains(resolvrParams.servers, "8.8.8.8"));
|
||||
|
||||
for (final LinkProperties stackedLp : stackedLpsAfterChange) {
|
||||
verify(mBatteryStatsService).noteNetworkInterfaceType(stackedLp.getInterfaceName(),
|
||||
TYPE_MOBILE);
|
||||
verify(mBatteryStatsService).noteNetworkInterfaceForTransports(
|
||||
stackedLp.getInterfaceName(), new int[] { TRANSPORT_CELLULAR });
|
||||
}
|
||||
reset(mMockNetd);
|
||||
when(mMockNetd.interfaceGetCfg(CLAT_PREFIX + MOBILE_IFNAME))
|
||||
|
||||
Reference in New Issue
Block a user