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

Commit c707e2c9 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Cancel HandoverRetry when it's in wrong network state" into tm-d1-dev-plus-aosp

parents 23167e36 99ec0b29
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -1135,7 +1135,14 @@ public class DataNetwork extends StateMachine {
                    break;
                case EVENT_NOTIFY_HANDOVER_STARTED_RESPONSE:
                case EVENT_NOTIFY_HANDOVER_STARTED:
                    log("Ignore the handover to " + AccessNetworkConstants
                    // We reach here if network is not in the right state.
                    if (msg.obj != null) {
                        // Cancel it because it's either HO in progress or will soon disconnect.
                        // Either case we want to clean up obsolete retry attempts.
                        DataHandoverRetryEntry retryEntry = (DataHandoverRetryEntry) msg.obj;
                        retryEntry.setState(DataRetryEntry.RETRY_STATE_CANCELLED);
                    }
                    log("Ignore handover to " + AccessNetworkConstants
                            .transportTypeToString(msg.arg1) + " request.");
                    break;
                case EVENT_RADIO_NOT_AVAILABLE:
+1 −1
Original line number Diff line number Diff line
@@ -2661,7 +2661,7 @@ public class DataNetworkController extends Handler {
            return;
        }

        logl("Start handover " + dataNetwork + " to "
        logl("onDataNetworkHandoverRetry: Start handover " + dataNetwork + " to "
                + AccessNetworkConstants.transportTypeToString(preferredTransport)
                + ", " + dataHandoverRetryEntry);
        dataNetwork.startHandover(preferredTransport, dataHandoverRetryEntry);
+49 −0
Original line number Diff line number Diff line
@@ -2026,6 +2026,55 @@ public class DataNetworkControllerTest extends TelephonyTest {
                AccessNetworkConstants.TRANSPORT_TYPE_WLAN);
    }

    @Test
    public void testHandoverDataNetworkDuplicateRetry() throws Exception {
        testSetupImsDataNetwork();
        DataNetwork dataNetwork = getDataNetworks().get(0);
        doReturn(AccessNetworkConstants.TRANSPORT_TYPE_WLAN)
                .when(mAccessNetworksManager).getPreferredTransportByNetworkCapability(anyInt());

        DataRetryManager.DataHandoverRetryEntry retry1 =
                new DataRetryManager.DataHandoverRetryEntry.Builder<>()
                        .setDataNetwork(dataNetwork)
                        .build();
        DataRetryManager.DataHandoverRetryEntry retry2 =
                new DataRetryManager.DataHandoverRetryEntry.Builder<>()
                        .setDataNetwork(dataNetwork)
                        .build();
        final Message msg1 = new Message();
        msg1.what = 4 /*EVENT_DATA_HANDOVER_RETRY*/;
        msg1.obj = retry1;

        final Message msg2 = new Message();
        msg2.what = 4 /*EVENT_DATA_HANDOVER_RETRY*/;
        msg2.obj = retry2;

        Field field = DataRetryManager.class.getDeclaredField("mDataRetryEntries");
        field.setAccessible(true);
        List<DataRetryManager.DataRetryEntry> dataRetryEntries =
                (List<DataRetryManager.DataRetryEntry>)
                        field.get(mDataNetworkControllerUT.getDataRetryManager());
        dataRetryEntries.add(retry1);
        dataRetryEntries.add(retry2);

        mDataNetworkControllerUT.getDataRetryManager().sendMessageDelayed(msg1, 0);
        mDataNetworkControllerUT.getDataRetryManager().sendMessageDelayed(msg2, 0);

        processAllFutureMessages();

        setSuccessfulSetupDataResponse(mMockedWlanDataServiceManager, 1);
        processAllMessages();

        dataNetwork = getDataNetworks().get(0);
        assertThat(dataNetwork.getTransport()).isEqualTo(
                AccessNetworkConstants.TRANSPORT_TYPE_WLAN);
        verify(mMockedWlanDataServiceManager).setupDataCall(anyInt(), any(DataProfile.class),
                anyBoolean(), anyBoolean(), eq(DataService.REQUEST_REASON_HANDOVER), any(),
                anyInt(), any(), any(), anyBoolean(), any(Message.class));
        assertThat(mDataNetworkControllerUT.getDataRetryManager()
                .isAnyHandoverRetryScheduled(dataNetwork)).isFalse();
    }

    @Test
    public void testHandoverDataNetworkRetryReachedMaximum() throws Exception {
        testSetupImsDataNetwork();