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

Commit b1b03d15 authored by Brad Ebinger's avatar Brad Ebinger
Browse files

Call clearInlineMocks after each test

1) call clearInlineMocks to deal with OOM errors when using Mockito.
2) Modify tests to better handle threads that are accessing mocks
after the test ends.

Bug: 140797149
Test: atest TelecomUnitTests
Change-Id: I44ae19e69c6ba2d22ca6952fca116475f5c4b14d
parent 728c412a
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.telecom;

import android.media.AudioManager;
import android.os.Looper;
import android.os.Message;
import android.telecom.Log;
import android.telecom.Logging.Runnable;
@@ -490,6 +491,23 @@ public class CallAudioModeStateMachine extends StateMachine {
        mSystemStateHelper = systemStateHelper;
        mMostRecentMode = AudioManager.MODE_NORMAL;

        createStates();
    }

    /**
     * Used for testing
     */
    public CallAudioModeStateMachine(SystemStateHelper systemStateHelper,
            AudioManager audioManager, Looper looper) {
        super(CallAudioModeStateMachine.class.getSimpleName(), looper);
        mAudioManager = audioManager;
        mSystemStateHelper = systemStateHelper;
        mMostRecentMode = AudioManager.MODE_NORMAL;

        createStates();
    }

    private void createStates() {
        addState(mUnfocusedState);
        addState(mRingingFocusState);
        addState(mSimCallFocusState);
+40 −11
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.media.AudioDeviceInfo;
import android.media.AudioManager;
import android.media.IAudioService;
import android.os.Binder;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
import android.os.UserHandle;
@@ -1316,7 +1317,7 @@ public class CallAudioRouteStateMachine extends StateMachine {
    private final WiredHeadsetManager mWiredHeadsetManager;
    private final StatusBarNotifier mStatusBarNotifier;
    private final CallAudioManager.AudioServiceFactory mAudioServiceFactory;
    private final boolean mDoesDeviceSupportEarpieceRoute;
    private boolean mDoesDeviceSupportEarpieceRoute;
    private final TelecomSystem.SyncRoot mLock;
    private boolean mHasUserExplicitlyLeftBluetooth = false;

@@ -1339,16 +1340,28 @@ public class CallAudioRouteStateMachine extends StateMachine {
            CallAudioManager.AudioServiceFactory audioServiceFactory,
            int earpieceControl) {
        super(NAME);
        addState(mActiveEarpieceRoute);
        addState(mActiveHeadsetRoute);
        addState(mActiveBluetoothRoute);
        addState(mActiveSpeakerRoute);
        addState(mRingingBluetoothRoute);
        addState(mQuiescentEarpieceRoute);
        addState(mQuiescentHeadsetRoute);
        addState(mQuiescentBluetoothRoute);
        addState(mQuiescentSpeakerRoute);
        mContext = context;
        mCallsManager = callsManager;
        mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
        mBluetoothRouteManager = bluetoothManager;
        mWiredHeadsetManager = wiredHeadsetManager;
        mStatusBarNotifier = statusBarNotifier;
        mAudioServiceFactory = audioServiceFactory;
        mLock = callsManager.getLock();

        createStates(earpieceControl);
    }

    /** Used for testing only */
    public CallAudioRouteStateMachine(
            Context context,
            CallsManager callsManager,
            BluetoothRouteManager bluetoothManager,
            WiredHeadsetManager wiredHeadsetManager,
            StatusBarNotifier statusBarNotifier,
            CallAudioManager.AudioServiceFactory audioServiceFactory,
            int earpieceControl, Looper looper) {
        super(NAME, looper);
        mContext = context;
        mCallsManager = callsManager;
        mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
@@ -1356,6 +1369,12 @@ public class CallAudioRouteStateMachine extends StateMachine {
        mWiredHeadsetManager = wiredHeadsetManager;
        mStatusBarNotifier = statusBarNotifier;
        mAudioServiceFactory = audioServiceFactory;
        mLock = callsManager.getLock();

        createStates(earpieceControl);
    }

    private void createStates(int earpieceControl) {
        switch (earpieceControl) {
            case EARPIECE_FORCE_DISABLED:
                mDoesDeviceSupportEarpieceRoute = false;
@@ -1366,7 +1385,17 @@ public class CallAudioRouteStateMachine extends StateMachine {
            default:
                mDoesDeviceSupportEarpieceRoute = checkForEarpieceSupport();
        }
        mLock = callsManager.getLock();

        addState(mActiveEarpieceRoute);
        addState(mActiveHeadsetRoute);
        addState(mActiveBluetoothRoute);
        addState(mActiveSpeakerRoute);
        addState(mRingingBluetoothRoute);
        addState(mQuiescentEarpieceRoute);
        addState(mQuiescentHeadsetRoute);
        addState(mQuiescentBluetoothRoute);
        addState(mQuiescentSpeakerRoute);


        mStateNameToRouteCode = new HashMap<>(8);
        mStateNameToRouteCode.put(mQuiescentEarpieceRoute.getName(), ROUTE_EARPIECE);
+7 −3
Original line number Diff line number Diff line
@@ -312,6 +312,7 @@ public class CallsManager extends Call.ListenerBase
    private final MissedCallNotifier mMissedCallNotifier;
    private IncomingCallNotifier mIncomingCallNotifier;
    private final CallerInfoLookupHelper mCallerInfoLookupHelper;
    private final IncomingCallFilter.Factory mIncomingCallFilterFactory;
    private final DefaultDialerCache mDefaultDialerCache;
    private final Timeouts.Adapter mTimeoutsAdapter;
    private final PhoneNumberUtilsAdapter mPhoneNumberUtilsAdapter;
@@ -434,7 +435,8 @@ public class CallsManager extends Call.ListenerBase
            CallAudioRouteStateMachine.Factory callAudioRouteStateMachineFactory,
            CallAudioModeStateMachine.Factory callAudioModeStateMachineFactory,
            InCallControllerFactory inCallControllerFactory,
            RoleManagerAdapter roleManagerAdapter) {
            RoleManagerAdapter roleManagerAdapter,
            IncomingCallFilter.Factory incomingCallFilterFactory) {
        mContext = context;
        mLock = lock;
        mPhoneNumberUtilsAdapter = phoneNumberUtilsAdapter;
@@ -450,6 +452,7 @@ public class CallsManager extends Call.ListenerBase
        mTimeoutsAdapter = timeoutsAdapter;
        mEmergencyCallHelper = emergencyCallHelper;
        mCallerInfoLookupHelper = callerInfoLookupHelper;
        mIncomingCallFilterFactory = incomingCallFilterFactory;

        mDtmfLocalTonePlayer =
                new DtmfLocalTonePlayer(new DtmfLocalTonePlayer.ToneGeneratorProxy());
@@ -632,7 +635,7 @@ public class CallsManager extends Call.ListenerBase
                        return null;
                    }
                }));
        new IncomingCallFilter(mContext, this, incomingCall, mLock,
        mIncomingCallFilterFactory.create(mContext, this, incomingCall, mLock,
                mTimeoutsAdapter, filters).performFiltering();
    }

@@ -1029,7 +1032,8 @@ public class CallsManager extends Call.ListenerBase
        mListeners.add(listener);
    }

    void removeListener(CallsManagerListener listener) {
    @VisibleForTesting
    public void removeListener(CallsManagerListener listener) {
        mListeners.remove(listener);
    }

+11 −0
Original line number Diff line number Diff line
@@ -40,6 +40,12 @@ import java.io.InputStream;
public class ContactsAsyncHelper {
    private static final String LOG_TAG = ContactsAsyncHelper.class.getSimpleName();

    public static class Factory {
        public ContactsAsyncHelper create(ContentResolverAdapter adapter) {
            return new ContactsAsyncHelper(adapter);
        }
    }

    /**
     * Interface for a WorkerHandler result return.
     */
@@ -77,6 +83,11 @@ public class ContactsAsyncHelper {
        mContentResolverAdapter = contentResolverAdapter;
    }

    public ContactsAsyncHelper(ContentResolverAdapter contentResolverAdapter, Looper looper) {
        mContentResolverAdapter = contentResolverAdapter;
        mThreadHandler = new WorkerHandler(looper);
    }

    private static final class WorkerArgs {
        public Context context;
        public Uri displayPhotoUri;
+7 −2
Original line number Diff line number Diff line
@@ -731,6 +731,7 @@ public class InCallController extends CallsManagerListenerBase {
    private final Timeouts.Adapter mTimeoutsAdapter;
    private final DefaultDialerCache mDefaultDialerCache;
    private final EmergencyCallHelper mEmergencyCallHelper;
    private final Handler mHandler = new Handler(Looper.getMainLooper());
    private CarSwappingInCallServiceConnection mInCallServiceConnection;
    private NonUIInCallServiceConnectionCollection mNonUIInCallServiceConnections;

@@ -817,8 +818,7 @@ public class InCallController extends CallsManagerListenerBase {
            /** Let's add a 2 second delay before we send unbind to the services to hopefully
             *  give them enough time to process all the pending messages.
             */
            Handler handler = new Handler(Looper.getMainLooper());
            handler.postDelayed(new Runnable("ICC.oCR", mLock) {
            mHandler.postDelayed(new Runnable("ICC.oCR", mLock) {
                @Override
                public void loggedRun() {
                    // Check again to make sure there are no active calls.
@@ -1597,4 +1597,9 @@ public class InCallController extends CallsManagerListenerBase {
        childCalls.addAll(parentCalls);
        return childCalls;
    }

    @VisibleForTesting
    public Handler getHandler() {
        return mHandler;
    }
}
Loading