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

Commit ec334adf authored by Amit Mahajan's avatar Amit Mahajan
Browse files

First unit test for SMS (EVENT_NEW_SMS in GsmInboundSmsHandler).

Bug: 25691379
Change-Id: Iacb24b23c224a8889cc549d02aa0dbd415e3c3d7
parent 46d25cf0
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ import android.os.IDeviceIdleController;
import android.os.Message;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.preference.PreferenceManager;
@@ -216,8 +215,7 @@ public abstract class InboundSmsHandler extends StateMachine {
        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, name);
        mWakeLock.acquire();    // wake lock released after we enter idle state
        mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
        mDeviceIdleController = IDeviceIdleController.Stub.asInterface(
                ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER));
        mDeviceIdleController = TelephonyComponentFactory.getInstance().getIDeviceIdleController();

        addState(mDefaultState);
        addState(mStartupState, mDefaultState);
@@ -483,7 +481,7 @@ public abstract class InboundSmsHandler extends StateMachine {
        }
    }

    void handleNewSms(AsyncResult ar) {
    private void handleNewSms(AsyncResult ar) {
        if (ar.exception != null) {
            loge("Exception processing incoming SMS: " + ar.exception);
            return;
@@ -541,7 +539,7 @@ public abstract class InboundSmsHandler extends StateMachine {
     * @return a result code from {@link android.provider.Telephony.Sms.Intents},
     *  or {@link Activity#RESULT_OK} for delayed acknowledgment to SMSC
     */
    public int dispatchMessage(SmsMessageBase smsb) {
    private int dispatchMessage(SmsMessageBase smsb) {
        // If sms is null, there was a parsing error.
        if (smsb == null) {
            loge("dispatchSmsMessage: message is null");
+1 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ import android.telephony.SubscriptionManager;
 * into a separate class to support instantiation of multiple SMSDispatchers on
 * dual-mode devices that require support for both 3GPP and 3GPP2 format messages.
 */
public final class SmsStorageMonitor extends Handler {
public class SmsStorageMonitor extends Handler {
    private static final String TAG = "SmsStorageMonitor";

    /** SIM/RUIM storage is full */
+7 −0
Original line number Diff line number Diff line
@@ -18,7 +18,9 @@ package com.android.internal.telephony;

import android.content.Context;
import android.os.Handler;
import android.os.IDeviceIdleController;
import android.os.PowerManager;
import android.os.ServiceManager;

import com.android.ims.ImsManager;
import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
@@ -82,4 +84,9 @@ public class TelephonyComponentFactory {
                                             int what, Object obj) {
        return CdmaSubscriptionSourceManager.getInstance(context, ci, h, what, obj);
    }

    public IDeviceIdleController getIDeviceIdleController() {
        return IDeviceIdleController.Stub.asInterface(
                ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER));
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -37,4 +37,6 @@
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>

</manifest>
+57 −36
Original line number Diff line number Diff line
@@ -27,9 +27,10 @@ import android.app.AppOpsManager;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.IContentProvider;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
@@ -38,15 +39,20 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.IInterface;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Telephony;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.test.mock.MockContentProvider;
import android.test.mock.MockContentResolver;
import android.test.mock.MockContext;
import android.util.Log;

@@ -78,6 +84,27 @@ import static org.mockito.Mockito.when;
public class ContextFixture implements TestFixture<Context> {
    private static final String TAG = "ContextFixture";

    public class FakeContentProvider extends MockContentProvider {
        @Override
        public int delete(Uri uri, String selection, String[] selectionArgs) {
            return 0;
        }

        @Override
        public Uri insert(Uri uri, ContentValues values) {
            if (uri.compareTo(Uri.withAppendedPath(Telephony.Sms.CONTENT_URI, "raw")) == 0) {
                return Uri.withAppendedPath(uri, "1");
            }
            return null;
        }

        @Override
        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
                            String sortOrder) {
            return null;
        }
    }

    public class FakeContext extends MockContext {
        @Override
        public PackageManager getPackageManager() {
@@ -154,33 +181,7 @@ public class ContextFixture implements TestFixture<Context> {

        @Override
        public ContentResolver getContentResolver() {
            return new ContentResolver(mContext) {
                @Override
                protected IContentProvider acquireProvider(Context c, String name) {
                    Log.i(TAG, "acquireProvider " + name);
                    return mContentProvider;
                }

                @Override
                public boolean releaseProvider(IContentProvider icp) {
                    return true;
                }

                @Override
                protected IContentProvider acquireUnstableProvider(Context c, String name) {
                    Log.i(TAG, "acquireUnstableProvider " + name);
                    return mContentProvider;
                }

                @Override
                public boolean releaseUnstableProvider(IContentProvider icp) {
                    return false;
                }

                @Override
                public void unstableProviderDied(IContentProvider icp) {
                }
            };
            return mContentResolver;
        }

        @Override
@@ -199,7 +200,11 @@ public class ContextFixture implements TestFixture<Context> {

        @Override
        public void sendBroadcast(Intent intent) {
            // TODO -- need to ensure this is captured
            logd("sendBroadcast called for " + intent.getAction());
            for (BroadcastReceiver broadcastReceiver :
                    mBroadcastReceiversByAction.get(intent.getAction())) {
                broadcastReceiver.onReceive(mContext, intent);
            }
        }

        @Override
@@ -220,6 +225,18 @@ public class ContextFixture implements TestFixture<Context> {
                Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
        }

        @Override
        public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
                String receiverPermission, int appOp, Bundle options,
                BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
                String initialData, Bundle initialExtras) {
            logd("sendOrderedBroadcastAsUser called for " + intent.getAction());
            sendBroadcast(intent);
            if (resultReceiver != null) {
                resultReceiver.onReceive(this, intent);
            }
        }

        @Override
        public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) {
        }
@@ -245,7 +262,11 @@ public class ContextFixture implements TestFixture<Context> {
            return "com.android.internal.telephony";
        }

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

        public boolean testMethod1() {
            return true;
        }
    };
@@ -279,8 +300,9 @@ public class ContextFixture implements TestFixture<Context> {
    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 ContentProvider mContentProvider = spy(new FakeContentProvider());
    private final SharedPreferences mSharedPreferences = mock(SharedPreferences.class);
    private final MockContentResolver mContentResolver = new MockContentResolver();

    public ContextFixture() {
        MockitoAnnotations.initMocks(this);
@@ -311,6 +333,8 @@ public class ContextFixture implements TestFixture<Context> {
                return args[1];
            }
        }).when(mSharedPreferences).getBoolean(anyString(), anyBoolean());

        mContentResolver.addProvider(Telephony.Sms.CONTENT_URI.getAuthority(), mContentProvider);
    }

    @Override
@@ -354,10 +378,7 @@ public class ContextFixture implements TestFixture<Context> {
        return result;
    }

    public void sendBroadcast(Intent intent) {
        for (BroadcastReceiver broadcastReceiver :
                mBroadcastReceiversByAction.get(intent.getAction())) {
            broadcastReceiver.onReceive(mContext, intent);
        }
    private static void logd(String s) {
        Log.d(TAG, s);
    }
}
Loading