Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +11 −0 Original line number Diff line number Diff line Loading @@ -2678,11 +2678,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(); Loading tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +58 −0 Original line number Diff line number Diff line Loading @@ -2721,6 +2721,64 @@ public class DataNetworkControllerTest extends TelephonyTest { any(), any(), anyBoolean(), any(Message.class)); } @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, Loading Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +11 −0 Original line number Diff line number Diff line Loading @@ -2678,11 +2678,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(); Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +58 −0 Original line number Diff line number Diff line Loading @@ -2721,6 +2721,64 @@ public class DataNetworkControllerTest extends TelephonyTest { any(), any(), anyBoolean(), any(Message.class)); } @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, Loading