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

Commit 27c003b3 authored by Sarah Chin's avatar Sarah Chin Committed by Gerrit Code Review
Browse files

Merge "DataNetwork default handover failure mode to UNKNOWN"

parents 6428dd16 8337ab3c
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -3146,8 +3146,10 @@ public class DataNetwork extends StateMachine {
            // Handover failed.
            long retry = response != null ? response.getRetryDurationMillis()
                    : DataCallResponse.RETRY_DURATION_UNDEFINED;
            // If the handover mode is unspecified, default to HANDOVER_FAILURE_MODE_UNKNOWN,
            // which will retry handover if retry rules are defined.
            int handoverFailureMode = response != null ? response.getHandoverFailureMode()
                    : DataCallResponse.HANDOVER_FAILURE_MODE_LEGACY;
                    : DataCallResponse.HANDOVER_FAILURE_MODE_UNKNOWN;
            if (retryEntry != null) retryEntry.setState(DataRetryEntry.RETRY_STATE_FAILED);
            mDataNetworkCallback.invokeFromExecutor(
                    () -> mDataNetworkCallback.onHandoverFailed(DataNetwork.this,
+38 −0
Original line number Diff line number Diff line
@@ -2068,6 +2068,44 @@ public class DataNetworkControllerTest extends TelephonyTest {
        verifyConnectedNetworkHasDataProfile(mImsIwlanDataProfile);
    }

    @Test
    public void testHandoverDataNetworkFailedNullResponse() throws Exception {
        testSetupImsDataNetwork();
        DataNetwork dataNetwork = getDataNetworks().get(0);

        // Set failed null response
        doAnswer(invocation -> {
            final Message msg = (Message) invocation.getArguments()[10];
            msg.getData().putParcelable("data_call_response", null);
            msg.arg1 = DataServiceCallback.RESULT_ERROR_TEMPORARILY_UNAVAILABLE;
            msg.getTarget().sendMessageDelayed(msg, 0);
            return null;
        }).when(mMockedWlanDataServiceManager).setupDataCall(anyInt(), any(DataProfile.class),
                anyBoolean(), anyBoolean(), eq(DataService.REQUEST_REASON_HANDOVER), any(),
                anyInt(), any(), any(), anyBoolean(), any(Message.class));

        // Attempt handover
        updateTransport(NetworkCapabilities.NET_CAPABILITY_IMS,
                AccessNetworkConstants.TRANSPORT_TYPE_WLAN);
        processAllMessages();

        // Verify that data network is still on cellular and data network was not torn down
        assertThat(dataNetwork.getTransport()).isEqualTo(
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
        assertThat(dataNetwork.isConnected()).isTrue();

        // Process all handover retries and failures
        processAllFutureMessages();

        // Verify that original data network was torn down and new connection set up on cellular
        assertThat(dataNetwork.getTransport()).isEqualTo(
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
        assertThat(dataNetwork.isConnected()).isFalse();
        dataNetwork = getDataNetworks().get(0);
        assertThat(dataNetwork.getTransport()).isEqualTo(
                AccessNetworkConstants.TRANSPORT_TYPE_WLAN);
        assertThat(dataNetwork.isConnected()).isTrue();
    }

    @Test
    public void testSetupDataNetworkRetrySuggestedByNetwork() {
+1 −1
Original line number Diff line number Diff line
@@ -921,7 +921,7 @@ public class DataNetworkTest extends TelephonyTest {

        verify(mDataNetworkCallback).onHandoverFailed(eq(mDataNetworkUT),
                eq(DataFailCause.SERVICE_TEMPORARILY_UNAVAILABLE), eq(-1L),
                eq(DataCallResponse.HANDOVER_FAILURE_MODE_LEGACY));
                eq(DataCallResponse.HANDOVER_FAILURE_MODE_UNKNOWN));
        verify(mLinkBandwidthEstimator, never()).unregisterForBandwidthChanged(
                eq(mDataNetworkUT.getHandler()));
        assertThat(mDataNetworkUT.getTransport())