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

Commit 47079463 authored by Sarah Chin's avatar Sarah Chin Committed by Automerger Merge Worker
Browse files

Merge "DataNetwork default handover failure mode to UNKNOWN" am: 27c003b3

parents 417f5c4f 27c003b3
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -3160,8 +3160,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
@@ -2128,6 +2128,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())