diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-01-31 00:22:00 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-01-31 00:22:00 +0000 |
commit | 7aa5032c13494f56217fdf6f636f33c4039cdc6e (patch) | |
tree | 15957f2764a6ae3b9cf31810d6ba5ccc41ab2e07 | |
parent | 38a0284a86fc288e55cce08ba4bab3f636cec7cc (diff) | |
parent | 09df88022dbf26c955f4bb556705527b46c7c644 (diff) | |
download | telephony-7aa5032c13494f56217fdf6f636f33c4039cdc6e.tar.gz |
Snap for 9541236 from 09df88022dbf26c955f4bb556705527b46c7c644 to tm-qpr3-release
Change-Id: Ic35bc0b7c99321477ccf5b7ea8069b15534006d3
-rw-r--r-- | src/java/com/android/internal/telephony/data/DataNetworkController.java | 11 | ||||
-rw-r--r-- | tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java | 58 |
2 files changed, 69 insertions, 0 deletions
diff --git a/src/java/com/android/internal/telephony/data/DataNetworkController.java b/src/java/com/android/internal/telephony/data/DataNetworkController.java index d00429387c..cdcf258763 100644 --- a/src/java/com/android/internal/telephony/data/DataNetworkController.java +++ b/src/java/com/android/internal/telephony/data/DataNetworkController.java @@ -2626,11 +2626,22 @@ public class DataNetworkController extends Handler { NetworkRequestList requestList = new NetworkRequestList( dataSetupRetryEntry.networkRequestList); requestList.removeIf(request -> !mAllNetworkRequestList.contains(request)); + // Retrieves the newly added unsatisfied NetworkRequest if all NetworkRequests in the + // DataSetupRetryEntry have already been removed. + if (requestList.isEmpty()) { + List<NetworkRequestList> groupRequestLists = getGroupedUnsatisfiedNetworkRequests(); + dataSetupRetryEntry.networkRequestList.stream() + .filter(request -> groupRequestLists.stream() + .anyMatch(groupRequestList -> groupRequestList + .get(request.getCapabilities()) != null)) + .forEach(requestList::add); + } if (requestList.isEmpty()) { loge("onDataNetworkSetupRetry: Request list is empty. Abort retry."); dataSetupRetryEntry.setState(DataRetryEntry.RETRY_STATE_CANCELLED); return; } + log("onDataNetworkSetupRetry: Request list:" + requestList); TelephonyNetworkRequest telephonyNetworkRequest = requestList.get(0); int networkCapability = telephonyNetworkRequest.getApnTypeNetworkCapability(); diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java index 4a03f6924e..7c7056092d 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java @@ -2603,6 +2603,64 @@ public class DataNetworkControllerTest extends TelephonyTest { } @Test + public void testSetupDataNetworkRetryFailedNetworkRequestRemovedAndAdded() throws Exception { + mDataNetworkControllerUT.getDataRetryManager() + .registerCallback(mMockedDataRetryManagerCallback); + setFailedSetupDataResponse(mMockedWwanDataServiceManager, DataFailCause.CONGESTION, + 10000, false); + + TelephonyNetworkRequest firstTnr = createNetworkRequest( + NetworkCapabilities.NET_CAPABILITY_IMS); + TelephonyNetworkRequest secondTnr = createNetworkRequest( + NetworkCapabilities.NET_CAPABILITY_IMS); + + mDataNetworkControllerUT.addNetworkRequest(firstTnr); + processAllMessages(); + + mDataNetworkControllerUT.removeNetworkRequest(firstTnr); + mDataNetworkControllerUT.addNetworkRequest(secondTnr); + processAllFutureMessages(); + + verify(mMockedWwanDataServiceManager, times(1)).setupDataCall(anyInt(), + any(DataProfile.class), anyBoolean(), anyBoolean(), anyInt(), any(), anyInt(), + any(), any(), anyBoolean(), any(Message.class)); + + ArgumentCaptor<DataRetryManager.DataSetupRetryEntry> retryEntry = + ArgumentCaptor.forClass(DataRetryManager.DataSetupRetryEntry.class); + verify(mMockedDataRetryManagerCallback, times(1)) + .onDataNetworkSetupRetry(retryEntry.capture()); + assertThat(retryEntry.getValue().getState()).isEqualTo( + DataRetryManager.DataRetryEntry.RETRY_STATE_FAILED); + assertThat(retryEntry.getValue().networkRequestList.size()).isEqualTo(1); + assertThat(retryEntry.getValue().networkRequestList.get(0)).isEqualTo(firstTnr); + + DataRetryManager.DataSetupRetryEntry dataSetupRetryEntry = retryEntry.getValue(); + logd("DataSetupRetryEntry:" + dataSetupRetryEntry); + + processAllMessages(); + processAllFutureMessages(); + + setSuccessfulSetupDataResponse(mMockedWwanDataServiceManager, 1); + logd("Sending TAC_CHANGED event"); + mDataNetworkControllerUT.obtainMessage(25/*EVENT_TAC_CHANGED*/).sendToTarget(); + mDataNetworkControllerUT.getDataRetryManager().obtainMessage(10/*EVENT_TAC_CHANGED*/) + .sendToTarget(); + processAllFutureMessages(); + + // TAC changes should clear the already-scheduled retry and throttling. + assertThat(mDataNetworkControllerUT.getDataRetryManager().isAnySetupRetryScheduled( + mImsCellularDataProfile, AccessNetworkConstants.TRANSPORT_TYPE_WWAN)).isFalse(); + + // But DNC should re-evaluate unsatisfied request and setup IMS again. + verifyConnectedNetworkHasCapabilities(NetworkCapabilities.NET_CAPABILITY_IMS, + NetworkCapabilities.NET_CAPABILITY_MMTEL); + + verify(mMockedWwanDataServiceManager, times(2)).setupDataCall(anyInt(), + any(DataProfile.class), anyBoolean(), anyBoolean(), anyInt(), any(), anyInt(), + any(), any(), anyBoolean(), any(Message.class)); + } + + @Test public void testSetupDataNetworkPermanentFailure() { setFailedSetupDataResponse(mMockedWwanDataServiceManager, DataFailCause.PROTOCOL_ERRORS, DataCallResponse.RETRY_DURATION_UNDEFINED, false); |