Use netId as idleTimer label on V+
Following CL adds idleTimer for multiple networks and track activities including non default network on V+ Current LegacyNetworkActivityTracker uses transport type as an idleTimer label but this makes it difficult to have multiple idleTimers. So, this CL updates LegacyNetworkActivityTracker to support using netId as an idleTimer label. Bug: 267870186 Bug: 279380356 Test: atest FrameworksNetTests Change-Id: I0039f5624ae1d142dbacba53aa90ca9bf6d43599
This commit is contained in:
@@ -10795,6 +10795,11 @@ public class ConnectivityServiceTest {
|
||||
expectNativeNetworkCreated(netId, permission, iface, null /* inOrder */);
|
||||
}
|
||||
|
||||
private int getIdleTimerLabel(int netId, int transportType) {
|
||||
return ConnectivityService.LegacyNetworkActivityTracker.getIdleTimerLabel(
|
||||
mDeps.isAtLeastV(), netId, transportType);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStackedLinkProperties() throws Exception {
|
||||
final LinkAddress myIpv4 = new LinkAddress("1.2.3.4/24");
|
||||
@@ -11036,7 +11041,7 @@ public class ConnectivityServiceTest {
|
||||
networkCallback.expect(LOST, mCellAgent);
|
||||
networkCallback.assertNoCallback();
|
||||
verify(mMockNetd, times(1)).idletimerRemoveInterface(eq(MOBILE_IFNAME), anyInt(),
|
||||
eq(Integer.toString(TRANSPORT_CELLULAR)));
|
||||
eq(Integer.toString(getIdleTimerLabel(cellNetId, TRANSPORT_CELLULAR))));
|
||||
verify(mMockNetd).networkDestroy(cellNetId);
|
||||
if (mDeps.isAtLeastU()) {
|
||||
verify(mMockNetd).setNetworkAllowlist(any());
|
||||
@@ -11095,7 +11100,7 @@ public class ConnectivityServiceTest {
|
||||
}
|
||||
|
||||
verify(mMockNetd).idletimerRemoveInterface(eq(MOBILE_IFNAME), anyInt(),
|
||||
eq(Integer.toString(TRANSPORT_CELLULAR)));
|
||||
eq(Integer.toString(getIdleTimerLabel(cellNetId, TRANSPORT_CELLULAR))));
|
||||
verify(mMockNetd).networkDestroy(cellNetId);
|
||||
if (mDeps.isAtLeastU()) {
|
||||
verify(mMockNetd).setNetworkAllowlist(any());
|
||||
@@ -11352,6 +11357,7 @@ public class ConnectivityServiceTest {
|
||||
|
||||
testAndCleanup(() -> {
|
||||
agent.connect(true);
|
||||
final int idleTimerLabel = getIdleTimerLabel(agent.getNetwork().netId, transportType);
|
||||
|
||||
// Network is considered active when the network becomes the default network.
|
||||
assertTrue(mCm.isDefaultNetworkActive());
|
||||
@@ -11360,7 +11366,7 @@ public class ConnectivityServiceTest {
|
||||
|
||||
// Interface goes to inactive state
|
||||
netdUnsolicitedEventListener.onInterfaceClassActivityChanged(false /* isActive */,
|
||||
transportType, TIMESTAMP, NETWORK_ACTIVITY_NO_UID);
|
||||
idleTimerLabel, TIMESTAMP, NETWORK_ACTIVITY_NO_UID);
|
||||
mServiceContext.expectDataActivityBroadcast(legacyType, false /* isActive */,
|
||||
TIMESTAMP);
|
||||
assertFalse(onNetworkActiveCv.block(TEST_CALLBACK_TIMEOUT_MS));
|
||||
@@ -11368,7 +11374,7 @@ public class ConnectivityServiceTest {
|
||||
|
||||
// Interface goes to active state
|
||||
netdUnsolicitedEventListener.onInterfaceClassActivityChanged(true /* isActive */,
|
||||
transportType, TIMESTAMP, TEST_PACKAGE_UID);
|
||||
idleTimerLabel, TIMESTAMP, TEST_PACKAGE_UID);
|
||||
mServiceContext.expectDataActivityBroadcast(legacyType, true /* isActive */, TIMESTAMP);
|
||||
assertTrue(onNetworkActiveCv.block(TEST_CALLBACK_TIMEOUT_MS));
|
||||
assertTrue(mCm.isDefaultNetworkActive());
|
||||
@@ -11455,15 +11461,19 @@ public class ConnectivityServiceTest {
|
||||
mCm.registerNetworkCallback(networkRequest, networkCallback);
|
||||
|
||||
mCellAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||
final String cellIdleTimerLabel = Integer.toString(getIdleTimerLabel(
|
||||
mCellAgent.getNetwork().netId, TRANSPORT_CELLULAR));
|
||||
final LinkProperties cellLp = new LinkProperties();
|
||||
cellLp.setInterfaceName(MOBILE_IFNAME);
|
||||
mCellAgent.sendLinkProperties(cellLp);
|
||||
mCellAgent.connect(true);
|
||||
networkCallback.expectAvailableThenValidatedCallbacks(mCellAgent);
|
||||
verify(mMockNetd, times(1)).idletimerAddInterface(eq(MOBILE_IFNAME), anyInt(),
|
||||
eq(Integer.toString(TRANSPORT_CELLULAR)));
|
||||
eq(cellIdleTimerLabel));
|
||||
|
||||
mWiFiAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||
String wifiIdleTimerLabel = Integer.toString(getIdleTimerLabel(
|
||||
mWiFiAgent.getNetwork().netId, TRANSPORT_WIFI));
|
||||
final LinkProperties wifiLp = new LinkProperties();
|
||||
wifiLp.setInterfaceName(WIFI_IFNAME);
|
||||
mWiFiAgent.sendLinkProperties(wifiLp);
|
||||
@@ -11474,9 +11484,9 @@ public class ConnectivityServiceTest {
|
||||
networkCallback.expectLosing(mCellAgent);
|
||||
networkCallback.expectCaps(mWiFiAgent, c -> c.hasCapability(NET_CAPABILITY_VALIDATED));
|
||||
verify(mMockNetd, times(1)).idletimerAddInterface(eq(WIFI_IFNAME), anyInt(),
|
||||
eq(Integer.toString(TRANSPORT_WIFI)));
|
||||
eq(wifiIdleTimerLabel));
|
||||
verify(mMockNetd, times(1)).idletimerRemoveInterface(eq(MOBILE_IFNAME), anyInt(),
|
||||
eq(Integer.toString(TRANSPORT_CELLULAR)));
|
||||
eq(cellIdleTimerLabel));
|
||||
|
||||
// Disconnect wifi and switch back to cell
|
||||
reset(mMockNetd);
|
||||
@@ -11484,13 +11494,15 @@ public class ConnectivityServiceTest {
|
||||
networkCallback.expect(LOST, mWiFiAgent);
|
||||
assertNoCallbacks(networkCallback);
|
||||
verify(mMockNetd, times(1)).idletimerRemoveInterface(eq(WIFI_IFNAME), anyInt(),
|
||||
eq(Integer.toString(TRANSPORT_WIFI)));
|
||||
eq(wifiIdleTimerLabel));
|
||||
verify(mMockNetd, times(1)).idletimerAddInterface(eq(MOBILE_IFNAME), anyInt(),
|
||||
eq(Integer.toString(TRANSPORT_CELLULAR)));
|
||||
eq(cellIdleTimerLabel));
|
||||
|
||||
// reconnect wifi
|
||||
reset(mMockNetd);
|
||||
mWiFiAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||
wifiIdleTimerLabel = Integer.toString(getIdleTimerLabel(
|
||||
mWiFiAgent.getNetwork().netId, TRANSPORT_WIFI));
|
||||
wifiLp.setInterfaceName(WIFI_IFNAME);
|
||||
mWiFiAgent.sendLinkProperties(wifiLp);
|
||||
mWiFiAgent.connect(true);
|
||||
@@ -11498,9 +11510,9 @@ public class ConnectivityServiceTest {
|
||||
networkCallback.expectLosing(mCellAgent);
|
||||
networkCallback.expectCaps(mWiFiAgent, c -> c.hasCapability(NET_CAPABILITY_VALIDATED));
|
||||
verify(mMockNetd, times(1)).idletimerAddInterface(eq(WIFI_IFNAME), anyInt(),
|
||||
eq(Integer.toString(TRANSPORT_WIFI)));
|
||||
eq(wifiIdleTimerLabel));
|
||||
verify(mMockNetd, times(1)).idletimerRemoveInterface(eq(MOBILE_IFNAME), anyInt(),
|
||||
eq(Integer.toString(TRANSPORT_CELLULAR)));
|
||||
eq(cellIdleTimerLabel));
|
||||
|
||||
// Disconnect cell
|
||||
reset(mMockNetd);
|
||||
@@ -11511,7 +11523,7 @@ public class ConnectivityServiceTest {
|
||||
// unexpectedly before network being removed.
|
||||
waitForIdle();
|
||||
verify(mMockNetd, times(0)).idletimerRemoveInterface(eq(MOBILE_IFNAME), anyInt(),
|
||||
eq(Integer.toString(TRANSPORT_CELLULAR)));
|
||||
eq(cellIdleTimerLabel));
|
||||
verify(mMockNetd, times(1)).networkDestroy(eq(mCellAgent.getNetwork().netId));
|
||||
verify(mMockDnsResolver, times(1)).destroyNetworkCache(eq(mCellAgent.getNetwork().netId));
|
||||
|
||||
@@ -11520,7 +11532,7 @@ public class ConnectivityServiceTest {
|
||||
mWiFiAgent.disconnect();
|
||||
b.expectBroadcast();
|
||||
verify(mMockNetd, times(1)).idletimerRemoveInterface(eq(WIFI_IFNAME), anyInt(),
|
||||
eq(Integer.toString(TRANSPORT_WIFI)));
|
||||
eq(wifiIdleTimerLabel));
|
||||
|
||||
// Clean up
|
||||
mCm.unregisterNetworkCallback(networkCallback);
|
||||
@@ -18704,6 +18716,7 @@ public class ConnectivityServiceTest {
|
||||
final LinkProperties lp = new LinkProperties();
|
||||
lp.setInterfaceName(transportToTestIfaceName(transportType));
|
||||
final TestNetworkAgentWrapper agent = new TestNetworkAgentWrapper(transportType, lp);
|
||||
final int idleTimerLabel = getIdleTimerLabel(agent.getNetwork().netId, transportType);
|
||||
testAndCleanup(() -> {
|
||||
final UidFrozenStateChangedCallback uidFrozenStateChangedCallback =
|
||||
getUidFrozenStateChangedCallback().get();
|
||||
@@ -18716,7 +18729,7 @@ public class ConnectivityServiceTest {
|
||||
if (freezeWithNetworkInactive) {
|
||||
// Make network inactive
|
||||
netdUnsolicitedEventListener.onInterfaceClassActivityChanged(false /* isActive */,
|
||||
transportType, TIMESTAMP, NETWORK_ACTIVITY_NO_UID);
|
||||
idleTimerLabel, TIMESTAMP, NETWORK_ACTIVITY_NO_UID);
|
||||
}
|
||||
|
||||
// Freeze TEST_FROZEN_UID and TEST_UNFROZEN_UID
|
||||
@@ -18740,7 +18753,7 @@ public class ConnectivityServiceTest {
|
||||
|
||||
// Make network active
|
||||
netdUnsolicitedEventListener.onInterfaceClassActivityChanged(true /* isActive */,
|
||||
transportType, TIMESTAMP, TEST_PACKAGE_UID);
|
||||
idleTimerLabel, TIMESTAMP, TEST_PACKAGE_UID);
|
||||
waitForIdle();
|
||||
|
||||
if (expectDelay) {
|
||||
@@ -18759,8 +18772,8 @@ public class ConnectivityServiceTest {
|
||||
@Test
|
||||
@IgnoreUpTo(Build.VERSION_CODES.TIRAMISU)
|
||||
public void testDelayFrozenUidSocketDestroy_ActiveCellular() throws Exception {
|
||||
doTestDelayFrozenUidSocketDestroy(TRANSPORT_CELLULAR,
|
||||
false /* freezeWithNetworkInactive */, false /* expectDelay */);
|
||||
doTestDelayFrozenUidSocketDestroy(TRANSPORT_CELLULAR, false /* freezeWithNetworkInactive */,
|
||||
false /* expectDelay */);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -18768,22 +18781,22 @@ public class ConnectivityServiceTest {
|
||||
public void testDelayFrozenUidSocketDestroy_InactiveCellular() throws Exception {
|
||||
// When the default network is cellular and cellular network is inactive, closing socket
|
||||
// is delayed.
|
||||
doTestDelayFrozenUidSocketDestroy(TRANSPORT_CELLULAR,
|
||||
true /* freezeWithNetworkInactive */, true /* expectDelay */);
|
||||
doTestDelayFrozenUidSocketDestroy(TRANSPORT_CELLULAR, true /* freezeWithNetworkInactive */,
|
||||
true /* expectDelay */);
|
||||
}
|
||||
|
||||
@Test
|
||||
@IgnoreUpTo(Build.VERSION_CODES.TIRAMISU)
|
||||
public void testDelayFrozenUidSocketDestroy_ActiveWifi() throws Exception {
|
||||
doTestDelayFrozenUidSocketDestroy(TRANSPORT_WIFI,
|
||||
false /* freezeWithNetworkInactive */, false /* expectDelay */);
|
||||
doTestDelayFrozenUidSocketDestroy(TRANSPORT_WIFI, false /* freezeWithNetworkInactive */,
|
||||
false /* expectDelay */);
|
||||
}
|
||||
|
||||
@Test
|
||||
@IgnoreUpTo(Build.VERSION_CODES.TIRAMISU)
|
||||
public void testDelayFrozenUidSocketDestroy_InactiveWifi() throws Exception {
|
||||
doTestDelayFrozenUidSocketDestroy(TRANSPORT_WIFI,
|
||||
true /* freezeWithNetworkInactive */, false /* expectDelay */);
|
||||
doTestDelayFrozenUidSocketDestroy(TRANSPORT_WIFI, true /* freezeWithNetworkInactive */,
|
||||
false /* expectDelay */);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -18804,6 +18817,8 @@ public class ConnectivityServiceTest {
|
||||
final LinkProperties cellLp = new LinkProperties();
|
||||
cellLp.setInterfaceName(MOBILE_IFNAME);
|
||||
mCellAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR, cellLp);
|
||||
final int idleTimerLabel =
|
||||
getIdleTimerLabel(mCellAgent.getNetwork().netId, TRANSPORT_CELLULAR);
|
||||
|
||||
final TestNetworkCallback defaultCallback = new TestNetworkCallback();
|
||||
mCm.registerDefaultNetworkCallback(defaultCallback);
|
||||
@@ -18813,7 +18828,7 @@ public class ConnectivityServiceTest {
|
||||
|
||||
// Make cell network inactive
|
||||
netdUnsolicitedEventListener.onInterfaceClassActivityChanged(false /* isActive */,
|
||||
TRANSPORT_CELLULAR, TIMESTAMP, NETWORK_ACTIVITY_NO_UID);
|
||||
idleTimerLabel, TIMESTAMP, NETWORK_ACTIVITY_NO_UID);
|
||||
|
||||
// Freeze TEST_FROZEN_UID
|
||||
final int[] uids = {TEST_FROZEN_UID};
|
||||
|
||||
@@ -64,12 +64,12 @@ import com.android.server.connectivity.MultinetworkPolicyTrackerTestDependencies
|
||||
import com.android.server.connectivity.ProxyTracker
|
||||
import com.android.testutils.visibleOnHandlerThread
|
||||
import com.android.testutils.waitForIdle
|
||||
import java.util.concurrent.Executors
|
||||
import kotlin.test.fail
|
||||
import org.mockito.AdditionalAnswers.delegatesTo
|
||||
import org.mockito.Mockito.doAnswer
|
||||
import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.mock
|
||||
import java.util.concurrent.Executors
|
||||
import kotlin.test.fail
|
||||
|
||||
internal const val HANDLER_TIMEOUT_MS = 2_000
|
||||
internal const val TEST_PACKAGE_NAME = "com.android.test.package"
|
||||
|
||||
Reference in New Issue
Block a user