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

Commit 43f1968f authored by Xiangyu/Malcolm Chen's avatar Xiangyu/Malcolm Chen Committed by Gerrit Code Review
Browse files

Merge "Clean up Mock classes."

parents 7251af1f 7115dd5d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ import android.telephony.AccessNetworkConstants;
import android.telephony.Annotation.ApnType;
import android.telephony.Rlog;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
import android.util.LocalLog;

@@ -61,7 +60,8 @@ public class TelephonyNetworkFactory extends NetworkFactory {

    private static final int TELEPHONY_NETWORK_SCORE = 50;

    private static final int EVENT_ACTIVE_PHONE_SWITCH              = 1;
    @VisibleForTesting
    public static final int EVENT_ACTIVE_PHONE_SWITCH               = 1;
    @VisibleForTesting
    public static final int EVENT_SUBSCRIPTION_CHANGED              = 2;
    private static final int EVENT_NETWORK_REQUEST                  = 3;
+81 −82
Original line number Diff line number Diff line
@@ -16,25 +16,27 @@

package com.android.internal.telephony.dataconnection;

import static android.net.NetworkFactory.CMD_CANCEL_REQUEST;
import static android.net.NetworkFactory.CMD_REQUEST_NETWORK;

import static com.android.internal.telephony.dataconnection.TelephonyNetworkFactory.EVENT_ACTIVE_PHONE_SWITCH;

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.IConnectivityManager;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.net.StringNetworkSpecifier;
import android.os.AsyncResult;
import android.os.Binder;
import android.os.Handler;
import android.os.Looper;
import android.os.Messenger;
import android.telephony.AccessNetworkConstants;
import android.telephony.Rlog;
import android.telephony.data.ApnSetting;
@@ -46,14 +48,9 @@ import androidx.test.filters.FlakyTest;

import com.android.internal.telephony.PhoneSwitcher;
import com.android.internal.telephony.RadioConfig;
import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.TelephonyTest;
import com.android.internal.telephony.dataconnection.TransportManager.HandoverParams;
import com.android.internal.telephony.dataconnection.TransportManager.HandoverParams.HandoverCallback;
import com.android.internal.telephony.mocks.ConnectivityServiceMock;
import com.android.internal.telephony.mocks.PhoneSwitcherMock;
import com.android.internal.telephony.mocks.SubscriptionControllerMock;
import com.android.internal.telephony.mocks.TelephonyRegistryMock;

import org.junit.After;
import org.junit.Before;
@@ -64,25 +61,23 @@ import org.mockito.Mock;
import java.lang.reflect.Field;
import java.util.ArrayList;


@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class TelephonyNetworkFactoryTest extends TelephonyTest {
    private final static String LOG_TAG = "TelephonyNetworkFactoryTest";

    @Mock
    private RadioConfig mMockRadioConfig;
    PhoneSwitcher mPhoneSwitcher;
    @Mock
    private IConnectivityManager mIConnectivityManager;
    private RadioConfig mMockRadioConfig;

    private String mTestName = "";

    private TelephonyRegistryMock mTelephonyRegistryMock;
    private PhoneSwitcherMock mPhoneSwitcherMock;
    private SubscriptionControllerMock mSubscriptionControllerMock;
    private ConnectivityServiceMock mConnectivityServiceMock;
    private final ArrayList<NetworkRequest> mNetworkRequestList = new ArrayList<>();

    private TelephonyNetworkFactory mTelephonyNetworkFactoryUT;
    private int mRequestId = 0;

    private void log(String str) {
        Rlog.d(LOG_TAG + " " + mTestName, str);
@@ -94,15 +89,51 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
                addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED).
                addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
        netCap.setNetworkSpecifier(new StringNetworkSpecifier(Integer.toString(subId)));
        return mConnectivityServiceMock.requestNetwork(netCap, null, 0, new Binder(), -1);
        NetworkRequest networkRequest = new NetworkRequest(netCap, -1,
                mRequestId++, NetworkRequest.Type.REQUEST);
        mTelephonyNetworkFactoryUT.obtainMessage(CMD_REQUEST_NETWORK, 0, 0, networkRequest)
                .sendToTarget();
        return networkRequest;
    }

    private NetworkRequest makeDefaultInternetRequest() {
        NetworkCapabilities netCap = (new NetworkCapabilities())
                .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
                .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
        NetworkRequest networkRequest = new NetworkRequest(netCap, -1,
                mRequestId++, NetworkRequest.Type.REQUEST);
        mTelephonyNetworkFactoryUT.obtainMessage(CMD_REQUEST_NETWORK, 0, 0, networkRequest)
                .sendToTarget();
        return networkRequest;
    }

    private NetworkRequest makeSubSpecificMmsRequest(int subId) {
        NetworkCapabilities netCap = (new NetworkCapabilities()).
                addCapability(NetworkCapabilities.NET_CAPABILITY_MMS).
                addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED).
                addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
        netCap.setNetworkSpecifier(new StringNetworkSpecifier(Integer.toString(subId)));
        return mConnectivityServiceMock.requestNetwork(netCap, null, 0, new Binder(), -1);
        NetworkRequest networkRequest = new NetworkRequest(netCap, -1,
                mRequestId++, NetworkRequest.Type.REQUEST);
        mTelephonyNetworkFactoryUT.obtainMessage(CMD_REQUEST_NETWORK, 0, 0, networkRequest)
                .sendToTarget();
        return networkRequest;
    }

    private void releaseNetworkRequest(NetworkRequest networkRequest) {
        mTelephonyNetworkFactoryUT.obtainMessage(CMD_CANCEL_REQUEST, 0, 0, networkRequest)
                .sendToTarget();
    }

    private void activatePhoneInPhoneSwitcher(int phoneId, boolean active) {
        doReturn(active).when(mPhoneSwitcher).shouldApplyNetworkRequest(any(), eq(phoneId));
        mTelephonyNetworkFactoryUT.mInternalHandler.sendEmptyMessage(EVENT_ACTIVE_PHONE_SWITCH);
    }

    private void activatePhoneInPhoneSwitcher(int phoneId, NetworkRequest nr, boolean active) {
        doReturn(active).when(mPhoneSwitcher).shouldApplyNetworkRequest(eq(nr), eq(phoneId));
        mTelephonyNetworkFactoryUT.mInternalHandler.sendEmptyMessage(EVENT_ACTIVE_PHONE_SWITCH);
    }

    @Before
@@ -127,44 +158,19 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
            mNetworkRequestList.remove((NetworkRequest) invocation.getArguments()[0]);
            return null;
        }).when(mDcTracker).releaseNetwork(any(), anyInt());

        doAnswer(invocation -> {
            mConnectivityServiceMock.registerNetworkFactory(
                    (Messenger) invocation.getArguments()[0],
                    (String) invocation.getArguments()[1]);
            return null;
        }).when(mIConnectivityManager).registerNetworkFactory(any(), anyString());

        doAnswer(invocation -> {
            mConnectivityServiceMock.unregisterNetworkFactory(
                    (Messenger) invocation.getArguments()[0]);
            return null;
        }).when(mIConnectivityManager).unregisterNetworkFactory(any());
    }

    @After
    public void tearDown() throws Exception {
        mConnectivityServiceMock.die();
        super.tearDown();
    }

    private void createMockedTelephonyComponents(int numberOfPhones) throws Exception {
        mConnectivityServiceMock = new ConnectivityServiceMock(mContext);
        mContextFixture.setSystemService(Context.CONNECTIVITY_SERVICE,
                new ConnectivityManager(mContext, mIConnectivityManager));
        mTelephonyRegistryMock = new TelephonyRegistryMock();
        mSubscriptionControllerMock = new SubscriptionControllerMock(mContext,
                mTelephonyRegistryMock, numberOfPhones);
        mPhoneSwitcherMock = new PhoneSwitcherMock(
                numberOfPhones, Looper.myLooper(), mSubscriptionControllerMock);

        replaceInstance(SubscriptionController.class, "sInstance", null,
                mSubscriptionControllerMock);
        replaceInstance(PhoneSwitcher.class, "sPhoneSwitcher", null, mPhoneSwitcherMock);
    private void createMockedTelephonyComponents() throws Exception {
        replaceInstance(PhoneSwitcher.class, "sPhoneSwitcher", null, mPhoneSwitcher);

        mTelephonyNetworkFactoryUT = new TelephonyNetworkFactory(Looper.myLooper(), mPhone);
        monitorTestableLooper(new TestableLooper(
                mConnectivityServiceMock.getHandlerThread().getLooper()));
        verify(mConnectivityManager).registerNetworkFactory(any(), anyString());
        verify(mPhoneSwitcher).registerForActivePhoneSwitch(any(), anyInt(), any());
    }

    /**
@@ -175,26 +181,25 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
    @SmallTest
    public void testActive() throws Exception {
        mTestName = "testActive";
        final int numberOfPhones = 1;
        final int phoneId = 0;
        final int subId = 0;

        createMockedTelephonyComponents(numberOfPhones);
        createMockedTelephonyComponents();

        mPhoneSwitcherMock.setPreferredDataPhoneId(phoneId);
        mSubscriptionControllerMock.setDefaultDataSubId(subId);
        mSubscriptionControllerMock.setSlotSubId(phoneId, subId);
        doReturn(false).when(mPhoneSwitcher).shouldApplyNetworkRequest(any(), anyInt());
        doReturn(subId).when(mSubscriptionController).getSubIdUsingPhoneId(phoneId);
        // fake onSubscriptionChangedListener being triggered.
        mTelephonyNetworkFactoryUT.mInternalHandler.sendEmptyMessage(
                TelephonyNetworkFactory.EVENT_SUBSCRIPTION_CHANGED);

        log("addDefaultRequest");
        mConnectivityServiceMock.addDefaultRequest();
        makeDefaultInternetRequest();
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        log("setPhoneActive true: phoneId = " + phoneId);
        mPhoneSwitcherMock.setPhoneActive(phoneId, true);

        activatePhoneInPhoneSwitcher(phoneId, true);
        processAllMessages();
        assertEquals(1, mNetworkRequestList.size());

@@ -204,7 +209,7 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
        assertEquals(2, mNetworkRequestList.size());

        log("setPhoneActive false: phoneId = " + phoneId);
        mPhoneSwitcherMock.setPhoneActive(phoneId, false);
        activatePhoneInPhoneSwitcher(phoneId, false);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

@@ -214,27 +219,27 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
        assertEquals(0, mNetworkRequestList.size());

        log("setPhoneActive true: phoneId = " + phoneId);
        mPhoneSwitcherMock.setPhoneActive(phoneId, true);
        activatePhoneInPhoneSwitcher(phoneId, true);
        processAllMessages();
        assertEquals(3, mNetworkRequestList.size());

        log("releaseNetworkRequest: subSpecificDefault = " + subSpecificDefault);
        mConnectivityServiceMock.releaseNetworkRequest(subSpecificDefault);
        releaseNetworkRequest(subSpecificDefault);
        processAllMessages();
        assertEquals(2, mNetworkRequestList.size());

        log("setPhoneActive false: phoneId = " + phoneId);
        mPhoneSwitcherMock.setPhoneActive(phoneId, false);
        activatePhoneInPhoneSwitcher(phoneId, false);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        log("releaseNetworkRequest: subSpecificMms = " + subSpecificMms);
        mConnectivityServiceMock.releaseNetworkRequest(subSpecificMms);
        releaseNetworkRequest(subSpecificMms);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        log("setPhoneActive true: phoneId = " + phoneId);
        mPhoneSwitcherMock.setPhoneActive(phoneId, true);
        activatePhoneInPhoneSwitcher(phoneId, true);
        processAllMessages();
        assertEquals(1, mNetworkRequestList.size());
    }
@@ -253,39 +258,37 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
        final int altSubId = 1;
        final int unusedSubId = 2;

        createMockedTelephonyComponents(numberOfPhones);
        createMockedTelephonyComponents();

        mPhoneSwitcherMock.setPreferredDataPhoneId(phoneId);
        mSubscriptionControllerMock.setDefaultDataSubId(subId);
        mSubscriptionControllerMock.setSlotSubId(phoneId, subId);
        doReturn(subId).when(mSubscriptionController).getSubIdUsingPhoneId(phoneId);
        mTelephonyNetworkFactoryUT.mInternalHandler.sendEmptyMessage(
                TelephonyNetworkFactory.EVENT_SUBSCRIPTION_CHANGED);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        mPhoneSwitcherMock.setPhoneActive(phoneId, true);
        activatePhoneInPhoneSwitcher(phoneId, true);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        mConnectivityServiceMock.addDefaultRequest();
        makeDefaultInternetRequest();
        processAllMessages();
        assertEquals(1, mNetworkRequestList.size());

        mSubscriptionControllerMock.setSlotSubId(altPhoneId, altSubId);
        doReturn(altSubId).when(mSubscriptionController).getSubIdUsingPhoneId(altPhoneId);
        processAllMessages();
        assertEquals(1, mNetworkRequestList.size());

        mPhoneSwitcherMock.setPreferredDataPhoneId(altPhoneId);
        mSubscriptionControllerMock.setDefaultDataSubId(altSubId);
        mPhoneSwitcherMock.notifyActivePhoneChange(phoneId);
        activatePhoneInPhoneSwitcher(phoneId, false);
        mTelephonyNetworkFactoryUT.mInternalHandler.sendEmptyMessage(EVENT_ACTIVE_PHONE_SWITCH);
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        makeSubSpecificMmsRequest(subId);
        NetworkRequest subSpecificMmsRequest = makeSubSpecificMmsRequest(subId);
        activatePhoneInPhoneSwitcher(phoneId, subSpecificMmsRequest, true);
        processAllMessages();
        assertEquals(1, mNetworkRequestList.size());

        mSubscriptionControllerMock.setSlotSubId(phoneId, unusedSubId);
        doReturn(unusedSubId).when(mSubscriptionController).getSubIdUsingPhoneId(phoneId);
        mTelephonyNetworkFactoryUT.mInternalHandler.sendEmptyMessage(
                TelephonyNetworkFactory.EVENT_SUBSCRIPTION_CHANGED);
        processAllMessages();
@@ -295,14 +298,12 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
        processAllMessages();
        assertEquals(0, mNetworkRequestList.size());

        mSubscriptionControllerMock.setSlotSubId(phoneId, subId);
        doReturn(subId).when(mSubscriptionController).getSubIdUsingPhoneId(phoneId);
        mTelephonyNetworkFactoryUT.mInternalHandler.sendEmptyMessage(
                TelephonyNetworkFactory.EVENT_SUBSCRIPTION_CHANGED);
        processAllMessages();

        mSubscriptionControllerMock.setDefaultDataSubId(subId);
        mPhoneSwitcherMock.setPreferredDataPhoneId(phoneId);
        mPhoneSwitcherMock.notifyActivePhoneChange(phoneId);
        activatePhoneInPhoneSwitcher(phoneId, true);
        processAllMessages();
        assertEquals(3, mNetworkRequestList.size());
    }
@@ -313,15 +314,13 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
    @Test
    @SmallTest
    public void testHandoverNoLiveData() throws Exception {
        createMockedTelephonyComponents(1);
        mPhoneSwitcherMock.setPreferredDataPhoneId(0);
        mSubscriptionControllerMock.setDefaultDataSubId(0);
        mSubscriptionControllerMock.setSlotSubId(0, 0);
        createMockedTelephonyComponents();
        doReturn(0).when(mSubscriptionController).getSubIdUsingPhoneId(0);
        mTelephonyNetworkFactoryUT.mInternalHandler.sendEmptyMessage(
                TelephonyNetworkFactory.EVENT_SUBSCRIPTION_CHANGED);

        mPhoneSwitcherMock.setPhoneActive(0, true);
        mConnectivityServiceMock.addDefaultRequest();
        activatePhoneInPhoneSwitcher(0, true);
        makeDefaultInternetRequest();

        makeSubSpecificMmsRequest(0);
        processAllMessages();
+0 −618

File deleted.

Preview size limit exceeded, changes collapsed.

+0 −1352

File deleted.

Preview size limit exceeded, changes collapsed.

+0 −90
Original line number Diff line number Diff line
/*
 * Copyright (C) 2006 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.internal.telephony.mocks;

import android.os.Handler;
import android.os.Looper;
import android.os.Registrant;
import android.os.RegistrantList;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.PhoneSwitcher;
import com.android.internal.telephony.SubscriptionController;

import java.lang.reflect.Field;
import java.util.concurrent.atomic.AtomicBoolean;

public class PhoneSwitcherMock extends PhoneSwitcher {
    private final RegistrantList mActivePhoneRegistrants;
    private final AtomicBoolean mIsActive[];

    public PhoneSwitcherMock(int numPhones, Looper looper, SubscriptionController subController)
            throws Exception {
        super(numPhones, looper);

        mActivePhoneRegistrants = new RegistrantList();
        mIsActive = new AtomicBoolean[numPhones];
        for(int i = 0; i < numPhones; i++) {
            mIsActive[i] = new AtomicBoolean(false);
        }

        if (subController != null) {
            Field subControllerField =
                this.getClass().getSuperclass().getDeclaredField("mSubscriptionController");
            subControllerField.setAccessible(true);
            subControllerField.set(this, subController);
        }
    }

    @Override
    public void onRadioCapChanged(int phoneId) {
        throw new RuntimeException("resendPhone not implemented");
    }

    @Override
    protected boolean isPhoneActive(int phoneId) {
        return mIsActive[phoneId].get();
    }

    @Override
    public void registerForActivePhoneSwitch(Handler h, int what, Object o) {
        Registrant r = new Registrant(h, what, o);
        mActivePhoneRegistrants.add(r);
        r.notifyRegistrant();
    }

    @Override
    public void unregisterForActivePhoneSwitch(Handler h) {
        mActivePhoneRegistrants.remove(h);
    }

    @VisibleForTesting
    public void setPhoneActive(int phoneId, boolean active) {
        validatePhoneId(phoneId);
        if (mIsActive[phoneId].getAndSet(active) != active) {
            notifyActivePhoneChange(phoneId);
        }
    }

    public void setPreferredDataPhoneId(int preferredDataPhoneId) {
        mPreferredDataPhoneId = preferredDataPhoneId;
    }

    public void notifyActivePhoneChange(int phoneId) {
        mActivePhoneRegistrants.notifyRegistrants();
    }
}
Loading