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

Commit 2b34a190 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Cancel HandoverRetry when it's in wrong network state" am: a0c367bf

parents d90ceacc a0c367bf
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -1109,7 +1109,14 @@ public class DataNetwork extends StateMachine {
                    log("Ignored " + eventToString(msg.what));
                    break;
                case EVENT_START_HANDOVER:
                    log("Ignore the handover to " + AccessNetworkConstants
                    // We reach here if network is not in the connected/connecting 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 retry for the handover to " + AccessNetworkConstants
                            .transportTypeToString(msg.arg1) + " request.");
                    break;
                case EVENT_RADIO_NOT_AVAILABLE:
+1 −1
Original line number Diff line number Diff line
@@ -2645,7 +2645,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
@@ -1993,6 +1993,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();