Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 015b43c4 authored by sangyun's avatar sangyun Committed by Automerger Merge Worker
Browse files

Add unsatisfied NetworkRequest if retry networkRequest have been removed. am: a2fb5af7

parents 4d7880ce a2fb5af7
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -2684,11 +2684,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();
+58 −0
Original line number Diff line number Diff line
@@ -2717,6 +2717,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,