From 605e77055cebc750c0aa9df1ae8620e108263a7f Mon Sep 17 00:00:00 2001 From: Ansik Date: Tue, 29 Jun 2021 19:06:37 +0900 Subject: [PATCH] Change to REQUEST from LISTEN for mobile data preferred uids feature - If Mobile data always on is OFF, mobile data preferred uids feature does not work. - We need to request mobile data when MDO list is not empty. Bug: 171872461 Test: atest FrameworksNetTests Test: atest CtsNetTestCases Signed-off-by: Ansik Change-Id: Ie9d6b3e39ef16813c4be3979900d226c8f3d656d --- .../android/server/ConnectivityService.java | 2 +- .../server/ConnectivityServiceTest.java | 44 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index 352d26634c..707076c21b 100644 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -9953,7 +9953,7 @@ public class ConnectivityService extends IConnectivityManager.Stub // - The request for the mobile network preferred. // - The request for the default network, for fallback. requests.add(createDefaultInternetRequestForTransport( - TRANSPORT_CELLULAR, NetworkRequest.Type.LISTEN)); + TRANSPORT_CELLULAR, NetworkRequest.Type.REQUEST)); requests.add(createDefaultInternetRequestForTransport( TYPE_NONE, NetworkRequest.Type.TRACK_DEFAULT)); final Set ranges = new ArraySet<>(); diff --git a/tests/unit/java/com/android/server/ConnectivityServiceTest.java b/tests/unit/java/com/android/server/ConnectivityServiceTest.java index 6c484cca06..d9e9ace76b 100644 --- a/tests/unit/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/unit/java/com/android/server/ConnectivityServiceTest.java @@ -13359,43 +13359,43 @@ public class ConnectivityServiceTest { } @Test - public void testSetMobileDataPreferredUids_noIssueToFactory() throws Exception { - // First set mobile data preferred uid to create a multi-layer requests: 1. listen for + public void testMultilayerRequestsOfSetMobileDataPreferredUids() throws Exception { + // First set mobile data preferred uid to create a multi-layer requests: 1. request for // cellular, 2. track the default network for fallback. setAndUpdateMobileDataPreferredUids( Set.of(PRIMARY_USER_HANDLE.getUid(TEST_PACKAGE_UID))); final HandlerThread handlerThread = new HandlerThread("MockFactory"); handlerThread.start(); - NetworkCapabilities internetFilter = new NetworkCapabilities() + final NetworkCapabilities cellFilter = new NetworkCapabilities() + .addTransportType(TRANSPORT_CELLULAR) .addCapability(NET_CAPABILITY_INTERNET) .addCapability(NET_CAPABILITY_NOT_VCN_MANAGED); - final MockNetworkFactory internetFactory = new MockNetworkFactory(handlerThread.getLooper(), - mServiceContext, "internetFactory", internetFilter, mCsHandlerThread); - internetFactory.setScoreFilter(40); + final MockNetworkFactory cellFactory = new MockNetworkFactory(handlerThread.getLooper(), + mServiceContext, "cellFactory", cellFilter, mCsHandlerThread); + cellFactory.setScoreFilter(40); try { - internetFactory.register(); - // Default internet request only. The first request is listen for cellular network, - // which is never sent to factories (it's a LISTEN, not requestable). The second - // fallback request is TRACK_DEFAULT which is also not sent to factories. - internetFactory.expectRequestAdds(1); - internetFactory.assertRequestCountEquals(1); + cellFactory.register(); + // Default internet request and the mobile data preferred request. + cellFactory.expectRequestAdds(2); + cellFactory.assertRequestCountEquals(2); - mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR); - mCellNetworkAgent.connect(true); + mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI); + mWiFiNetworkAgent.connect(true); - // The internet factory however is outscored, and should lose its requests. - internetFactory.expectRequestRemove(); - internetFactory.assertRequestCountEquals(0); + // The cellFactory however is outscored, and should lose default internet request. + // But it should still see mobile data preferred request. + cellFactory.expectRequestRemove(); + cellFactory.assertRequestCountEquals(1); - mCellNetworkAgent.disconnect(); + mWiFiNetworkAgent.disconnect(); // The network satisfying the default internet request has disconnected, so the - // internetFactory sees the default request again. - internetFactory.expectRequestAdds(1); - internetFactory.assertRequestCountEquals(1); + // cellFactory sees the default internet requests again. + cellFactory.expectRequestAdd(); + cellFactory.assertRequestCountEquals(2); } finally { - internetFactory.terminate(); + cellFactory.terminate(); handlerThread.quitSafely(); } }