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

Commit 600876ab authored by Willy Hu's avatar Willy Hu
Browse files

[DSRM] Do recovery actions only after validation passed once.

Symptom: If there is no live network in the lab, data stall recovery
will be triggered always when validation failed. It might cause lab
testing failed. To avoid it, skipping the recovery action if there's
no any validation pass before.

Solution: Start to do the recovery actions after validation passed once.

Bug: 232810415
Test: manual test passed(go/dsrm-test-result-lab)
      atest DataStallRecoveryManagerTest
Change-Id: Ia1a8ef3335273852a07cd2e63659979947132dd4
parent e9d860df
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -364,6 +364,7 @@ public class DataStallRecoveryManager extends Handler {
        if (isValid) {
            reset();
        } else {
            if (mIsValidNetwork || isRecoveryAlreadyStarted()) {
                mIsValidNetwork = false;
                if (isRecoveryNeeded(true)) {
                    log("trigger data stall recovery");
@@ -372,6 +373,7 @@ public class DataStallRecoveryManager extends Handler {
                }
            }
        }
    }

    /** Reset the action to initial step. */
    private void resetAction() {
+30 −1
Original line number Diff line number Diff line
@@ -87,7 +87,6 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {
                        mMockedWwanDataServiceManager,
                        mTestableLooper.getLooper(),
                        mDataStallRecoveryManagerCallback);
        sendOnInternetDataNetworkCallback(true);
        logd("DataStallRecoveryManagerTest -Setup!");
    }

@@ -128,6 +127,7 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {

    @Test
    public void testRecoveryStepPDPReset() throws Exception {
        sendOnInternetDataNetworkCallback(true);
        mDataStallRecoveryManager.setRecoveryAction(1);
        doReturn(mSignalStrength).when(mPhone).getSignalStrength();
        doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();
@@ -141,6 +141,7 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {

    @Test
    public void testRecoveryStepRestartRadio() throws Exception {
        sendOnInternetDataNetworkCallback(true);
        mDataStallRecoveryManager.setRecoveryAction(3);
        doReturn(mSignalStrength).when(mPhone).getSignalStrength();
        doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();
@@ -154,6 +155,7 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {

    @Test
    public void testRecoveryStepModemReset() throws Exception {
        sendOnInternetDataNetworkCallback(true);
        mDataStallRecoveryManager.setRecoveryAction(4);
        doReturn(mSignalStrength).when(mPhone).getSignalStrength();
        doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();
@@ -168,6 +170,7 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {

    @Test
    public void testDoNotDoRecoveryActionWhenPoorSignal() throws Exception {
        sendOnInternetDataNetworkCallback(true);
        mDataStallRecoveryManager.setRecoveryAction(3);
        doReturn(1).when(mSignalStrength).getLevel();
        doReturn(mSignalStrength).when(mPhone).getSignalStrength();
@@ -183,6 +186,7 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {

    @Test
    public void testDoNotDoRecoveryActionWhenDialCall() throws Exception {
        sendOnInternetDataNetworkCallback(true);
        mDataStallRecoveryManager.setRecoveryAction(3);
        doReturn(3).when(mSignalStrength).getLevel();
        doReturn(mSignalStrength).when(mPhone).getSignalStrength();
@@ -198,6 +202,7 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {

    @Test
    public void testDoNotDoRecoveryBySendMessageDelayedWhenDialCall() throws Exception {
        sendOnInternetDataNetworkCallback(true);
        sendValidationStatusCallback(NetworkAgent.VALIDATION_STATUS_VALID);
        mDataStallRecoveryManager.setRecoveryAction(0);
        doReturn(PhoneConstants.State.OFFHOOK).when(mPhone).getState();
@@ -217,6 +222,7 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {

    @Test
    public void testDoNotContinueRecoveryActionAfterModemReset() throws Exception {
        sendOnInternetDataNetworkCallback(true);
        sendValidationStatusCallback(NetworkAgent.VALIDATION_STATUS_VALID);
        mDataStallRecoveryManager.setRecoveryAction(0);
        doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();
@@ -252,6 +258,7 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {

    @Test
    public void testDoRecoveryWhenMeetDataStallAgain() throws Exception {
        sendOnInternetDataNetworkCallback(true);
        sendValidationStatusCallback(NetworkAgent.VALIDATION_STATUS_VALID);
        mDataStallRecoveryManager.setRecoveryAction(0);
        doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();
@@ -296,6 +303,7 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {

    @Test
    public void testDoNotDoRecoveryWhenDataNoService() throws Exception {
        sendOnInternetDataNetworkCallback(true);
        mDataStallRecoveryManager.setRecoveryAction(1);
        doReturn(mSignalStrength).when(mPhone).getSignalStrength();
        doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();
@@ -310,6 +318,7 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {

    @Test
    public void testDoNotDoRecoveryWhenDataNetworkNotConnected() throws Exception {
        sendOnInternetDataNetworkCallback(true);
        mDataStallRecoveryManager.setRecoveryAction(1);
        doReturn(mSignalStrength).when(mPhone).getSignalStrength();
        doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();
@@ -321,4 +330,24 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {

        assertThat(mDataStallRecoveryManager.getRecoveryAction()).isEqualTo(1);
    }

    @Test
    public void testDoNotDoRecoveryIfNoValidationPassedYet() throws Exception {
        sendOnInternetDataNetworkCallback(false);
        doReturn(mSignalStrength).when(mPhone).getSignalStrength();
        doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();

        logd("Sending validation failed callback");
        sendValidationStatusCallback(NetworkAgent.VALIDATION_STATUS_NOT_VALID);
        processAllFutureMessages();

        // Handle multiple VALIDATION_STATUS_NOT_VALID and make sure we don't attempt recovery
        for (int i = 0; i < 4; i++) {
            sendValidationStatusCallback(NetworkAgent.VALIDATION_STATUS_NOT_VALID);
            logd("Sending validation failed callback");
            processAllMessages();
            moveTimeForward(101);
            assertThat(mDataStallRecoveryManager.getRecoveryAction()).isEqualTo(0);
        }
    }
}