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

Commit b6514b21 authored by Jack Yu's avatar Jack Yu
Browse files

Fixed the broken testSetRadioPower test.

Fixed the broken testSetRadioPower test due to telephony debug
service change.

bug: 25691379
Change-Id: I1fb25671eda2ae53ba2165a0e0c64cc4525ac81b
parent bba3bfb3
Loading
Loading
Loading
Loading
+5 −11
Original line number Diff line number Diff line
@@ -272,14 +272,6 @@ public class ServiceStateTracker extends Handler {
        public final AtomicInteger mPreviousSubId =
                new AtomicInteger(SubscriptionManager.INVALID_SUBSCRIPTION_ID);

        /**
         * Explicitly set looper to mainLooper. This is needed only for tests; in real scenario
         * this code is called only on the main thread which makes this constructor a no-op.
         */
        protected SstSubscriptionsChangedListener() {
            super(Looper.getMainLooper());
        }

        /**
         * Callback invoked when there is any change to any SubscriptionInfo. Typically
         * this method would invoke {@link SubscriptionManager#getActiveSubscriptionInfoList}
@@ -663,6 +655,7 @@ public class ServiceStateTracker extends Handler {
        int rat = mSS.getRilDataRadioTechnology();
        int drs = mSS.getDataRegState();
        if (DBG) log("notifyDataRegStateRilRadioTechnologyChanged: drs=" + drs + " rat=" + rat);

        mPhone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
                ServiceState.rilRadioTechnologyToString(rat));
        mDataRegStateOrRatChangedRegistrants.notifyResult(new Pair<Integer, Integer>(drs, rat));
@@ -2068,8 +2061,9 @@ public class ServiceStateTracker extends Handler {
            // Save the roaming state before carrier config possibly overrides it.
            mNewSS.setDataRoamingFromRegistration(roaming);

            ICarrierConfigLoader configLoader =
                    (ICarrierConfigLoader) ServiceManager.getService(Context.CARRIER_CONFIG_SERVICE);
            CarrierConfigManager configLoader = (CarrierConfigManager)
                    mPhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE);

            if (configLoader != null) {
                try {
                    PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId());
@@ -2086,7 +2080,7 @@ public class ServiceStateTracker extends Handler {
                                + mNewSS.getOperatorNumeric());
                        roaming = true;
                    }
                } catch (RemoteException e) {
                } catch (Exception e) {
                    loge("updateRoamingState: unable to access carrier config service");
                }
            } else {
+20 −13
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.telephony.Rlog;
import android.telephony.SignalStrength;

import com.android.internal.telephony.BaseCommands;
import com.android.internal.telephony.CommandException;
@@ -790,21 +791,27 @@ public class SimulatedCommands extends BaseCommands
    @Override
    public void getMute (Message result) {unimplemented(result);}
    
    /**
     * response.obj is an AsyncResult
     * response.obj.result is an int[2]
     * response.obj.result[0] is received signal strength (0-31, 99)
     * response.obj.result[1] is  bit error rate (0-7, 99)
     * as defined in TS 27.007 8.5
     */
    @Override
    public void getSignalStrength (Message result) {
        int ret[] = new int[2];

        ret[0] = 23;
        ret[1] = 0;

        resultSuccess(result, ret);
        SignalStrength ss = new SignalStrength(
                20, // gsmSignalStrength
                0,  // gsmBitErrorRate
                -1, // cdmaDbm
                -1, // cdmaEcio
                -1, // evdoDbm
                -1, // evdoEcio
                -1, // evdoSnr
                99, // lteSignalStrength
                SignalStrength.INVALID,     // lteRsrp
                SignalStrength.INVALID,     // lteRsrq
                SignalStrength.INVALID,     // lteRssnr
                SignalStrength.INVALID,     // lteCqi
                SignalStrength.INVALID,     // tdScdmaRscp
                true                        // gsmFlag
        );

        resultSuccess(result, ss);
    }

     /**
+15 −2
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.res.Resources;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.IInterface;
@@ -60,6 +61,7 @@ import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
@@ -128,6 +130,8 @@ public class ContextFixture implements TestFixture<Context> {
                    return TestApplication.getAppContext().getSystemService(name);
                case Context.TELEPHONY_SUBSCRIPTION_SERVICE:
                    return mSubscriptionManager;
                case Context.WIFI_SERVICE:
                    return mWifiManager;
                default:
                    return null;
            }
@@ -216,6 +220,10 @@ public class ContextFixture implements TestFixture<Context> {
                Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
        }

        @Override
        public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) {
        }

        @Override
        public Context createPackageContextAsUser(String packageName, int flags, UserHandle user)
                throws PackageManager.NameNotFoundException {
@@ -237,8 +245,8 @@ public class ContextFixture implements TestFixture<Context> {
            return "com.android.internal.telephony";
        }

        public int testMethod() {
            return 0;
        public boolean testMethod() {
            return true;
        }
    };

@@ -270,6 +278,7 @@ public class ContextFixture implements TestFixture<Context> {
    private final UserManager mUserManager = mock(UserManager.class);
    private final CarrierConfigManager mCarrierConfigManager = mock(CarrierConfigManager.class);
    private final SubscriptionManager mSubscriptionManager = mock(SubscriptionManager.class);
    private final WifiManager mWifiManager = mock(WifiManager.class);
    private final IContentProvider mContentProvider = mock(IContentProvider.class);
    private final SharedPreferences mSharedPreferences = mock(SharedPreferences.class);

@@ -325,6 +334,10 @@ public class ContextFixture implements TestFixture<Context> {
        when(mResources.getBoolean(eq(id))).thenReturn(value);
    }

    public void putStringArrayResource(int id, String[] values) {
        doReturn(values).when(mResources).getStringArray(eq(id));
    }

    private void addService(String action, ComponentName name, IInterface service) {
        mComponentNamesByAction.put(action, name);
        mServiceByComponentName.put(name, service);
+58 −4
Original line number Diff line number Diff line
@@ -16,10 +16,12 @@

package com.android.internal.telephony;

import android.os.Looper;
import android.os.HandlerThread;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.Log;
import android.util.SparseArray;

import com.android.internal.telephony.dataconnection.DcTracker;
import com.android.internal.telephony.test.SimulatedCommands;
import com.android.internal.telephony.uicc.UiccController;

@@ -31,7 +33,6 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;

import java.lang.reflect.Field;

@@ -44,13 +45,49 @@ public class ServiceStateTrackerTest {
    private UiccController mUiccController;
    @Mock
    private SubscriptionController mSubscriptionController;
    @Mock
    private SparseArray<TelephonyEventLog> mLogInstances;
    @Mock
    private TelephonyEventLog mTelephonyEventLog;
    @Mock
    private DcTracker mDct;

    private SimulatedCommands simulatedCommands;
    private ContextFixture contextFixture;
    private ServiceStateTracker sst;

    private Object mLock = new Object();
    private boolean mReady = false;

    private class ServiceStateTrackerTestHandler extends HandlerThread {

        private ServiceStateTrackerTestHandler(String name) {
            super(name);
        }

        @Override
        public void onLooperPrepared() {
            sst = new ServiceStateTracker(mPhone, simulatedCommands);
            synchronized (mLock) {
                mReady = true;
            }
        }
    }

    private void waitUntilReady() {
        while(true) {
            synchronized (mLock) {
                if (mReady) {
                    break;
                }
            }
        }
    }

    @Before
    public void setUp() throws Exception {

        logd("ServiceStateTrackerTest +Setup!");
        MockitoAnnotations.initMocks(this);
        contextFixture = new ContextFixture();
        simulatedCommands = new SimulatedCommands();
@@ -58,6 +95,7 @@ public class ServiceStateTrackerTest {
        doReturn(contextFixture.getTestDouble()).when(mPhone).getContext();
        doReturn(true).when(mPhone).getUnitTestMode();
        doReturn(true).when(mPhone).isPhoneTypeGsm();
        mPhone.mDcTracker = mDct;

        //Use reflection to mock singleton
        Field field = SubscriptionController.class.getDeclaredField("sInstance");
@@ -69,8 +107,23 @@ public class ServiceStateTrackerTest {
        field.setAccessible(true);
        field.set(null, mUiccController);

        Looper.prepare();
        sst = new ServiceStateTracker(mPhone, simulatedCommands);
        doReturn(mTelephonyEventLog).when(mLogInstances).get(anyInt());

        // Use reflection to replace TelephonyEventLog.sInstances with our mocked mLogInstances
        field = TelephonyEventLog.class.getDeclaredField("sInstances");
        field.setAccessible(true);
        field.set(null, mLogInstances);

        contextFixture.putStringArrayResource(
                com.android.internal.R.array.config_sameNamedOperatorConsideredRoaming,
                new String[]{"123456"});

        contextFixture.putStringArrayResource(
                com.android.internal.R.array.config_operatorConsideredNonRoaming,
                new String[]{"123456"});

        new ServiceStateTrackerTestHandler(TAG).start();
        logd("ServiceStateTrackerTest -Setup!");
    }

    @After
@@ -80,6 +133,7 @@ public class ServiceStateTrackerTest {

    @Test @SmallTest
    public void testSetRadioPower() {
        waitUntilReady();
        boolean oldState = simulatedCommands.getRadioState().isOn();
        sst.setRadioPower(!oldState);
        assertTrue(oldState != simulatedCommands.getRadioState().isOn());