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

Commit 24592d4d authored by joonhunshin's avatar joonhunshin Committed by Joonhun Shin
Browse files

Update to make PhoneSwitcher testable for ImsRegistrationCallback and

add test case

Bug: 330120237
Bug: 333300524
Test: atest PhoneSwitcherTest
Change-Id: I6ca69a677b3d7b35c03f762355ef0049b6fbdbf6
parent f5a02123
Loading
Loading
Loading
Loading
+23 −2
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;

/**
 * Utility singleton to monitor subscription changes and incoming NetworkRequests
@@ -389,6 +390,27 @@ public class PhoneSwitcher extends Handler {
    public ImsRegTechProvider mImsRegTechProvider =
            (context, phoneId) -> ImsManager.getInstance(context, phoneId).getRegistrationTech();

    /**
     * Interface to register RegistrationCallback. It's a wrapper of
     * ImsManager#addRegistrationCallback, to make it mock-able in unittests.
     */
    public interface ImsRegisterCallback {
        /** Set RegistrationCallback. */
        void setCallback(Context context, int phoneId, RegistrationManager.RegistrationCallback cb,
                Executor executor) throws ImsException;
    }

    @VisibleForTesting
    public ImsRegisterCallback mImsRegisterCallback =
            (context, phoneId, cb, executor)-> {
                try {
                    ImsManager.getInstance(context, phoneId)
                            .addRegistrationCallback(cb, executor);
                } catch (ImsException e) {
                    throw e;
                }
            };

    /**
     * Method to get singleton instance.
     */
@@ -432,8 +454,7 @@ public class PhoneSwitcher extends Handler {

    private void registerForImsRadioTechChange(Context context, int phoneId) {
        try {
            ImsManager.getInstance(context, phoneId).addRegistrationCallback(
                    mRegistrationCallback, this::post);
            mImsRegisterCallback.setCallback(context, phoneId, mRegistrationCallback, this::post);
            mIsRegisteredForImsRadioTechChange = true;
        } catch (ImsException imsException) {
            mIsRegisteredForImsRadioTechChange = false;
+36 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -73,6 +74,7 @@ import android.testing.TestableLooper;

import androidx.test.filters.SmallTest;

import com.android.ims.ImsException;
import com.android.internal.telephony.Call;
import com.android.internal.telephony.CommandException;
import com.android.internal.telephony.CommandsInterface;
@@ -126,6 +128,7 @@ public class PhoneSwitcherTest extends TelephonyTest {
    private ISetOpportunisticDataCallback mSetOpptDataCallback1;
    private ISetOpportunisticDataCallback mSetOpptDataCallback2;
    PhoneSwitcher.ImsRegTechProvider mMockImsRegTechProvider;
    PhoneSwitcher.ImsRegisterCallback mMockImsRegisterCallback;
    private SubscriptionInfo mSubscriptionInfo;
    private ISub mMockedIsub;
    private AutoDataSwitchController mAutoDataSwitchController;
@@ -167,6 +170,7 @@ public class PhoneSwitcherTest extends TelephonyTest {
        mSetOpptDataCallback1 = mock(ISetOpportunisticDataCallback.class);
        mSetOpptDataCallback2 = mock(ISetOpportunisticDataCallback.class);
        mMockImsRegTechProvider = mock(PhoneSwitcher.ImsRegTechProvider.class);
        mMockImsRegisterCallback = mock(PhoneSwitcher.ImsRegisterCallback.class);
        mSubscriptionInfo = mock(SubscriptionInfo.class);
        mMockedIsub = mock(ISub.class);
        mAutoDataSwitchController = mock(AutoDataSwitchController.class);
@@ -871,6 +875,11 @@ public class PhoneSwitcherTest extends TelephonyTest {
        mPhoneSwitcherUT.mImsRegTechProvider = mMockImsRegTechProvider;
    }

    private void mockImsRegisterCallback(int phoneId) throws ImsException {
        doNothing().when(mMockImsRegisterCallback).setCallback(any(), eq(phoneId), any(), any());
        mPhoneSwitcherUT.mImsRegisterCallback = mMockImsRegisterCallback;
    }

    @Test
    @SmallTest
    public void testNonDefaultDataPhoneInCall_ImsCallOnLte_shouldSwitchDds() throws Exception {
@@ -1756,6 +1765,33 @@ public class PhoneSwitcherTest extends TelephonyTest {
        verify(mCommandsInterface1, never()).setDataAllowed(anyBoolean(), any());
    }

    @Test
    @SmallTest
    public void testRegisterForImsRegistrationCallback() throws Exception {
        initialize();
        setAllPhonesInactive();

        // Phone 0 has sub 1, phone 1 has sub 2.
        // Sub 1 is default data sub.
        // Both are active subscriptions are active sub, as they are in both active slots.
        setSlotIndexToSubId(0, 1);
        setSlotIndexToSubId(1, 2);
        setDefaultDataSubId(1);
        processAllMessages();

        // Phone 0 should be the default data phoneId.
        assertEquals(0, mPhoneSwitcherUT.getPreferredDataPhoneId());

        doReturn(true).when(mPhone).isUserDataEnabled();
        mockImsRegTech(0, REGISTRATION_TECH_LTE);
        mockImsRegisterCallback(0);
        mockImsRegisterCallback(1);

        notifyImsRegistrationTechChange(mPhone);

        verify(mMockImsRegisterCallback, times(2)).setCallback(any(), anyInt(), any(), any());
    }

    /* Private utility methods start here */

    private void prepareIdealAutoSwitchCondition() {