aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-01-31 00:22:00 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-01-31 00:22:00 +0000
commit7aa5032c13494f56217fdf6f636f33c4039cdc6e (patch)
tree15957f2764a6ae3b9cf31810d6ba5ccc41ab2e07
parent38a0284a86fc288e55cce08ba4bab3f636cec7cc (diff)
parent09df88022dbf26c955f4bb556705527b46c7c644 (diff)
downloadtelephony-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.java11
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java58
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);