From eca4d64017e2961ca6e690be345e7ce95781b141 Mon Sep 17 00:00:00 2001 From: Fabian Kozynski Date: Mon, 4 May 2020 16:40:02 -0400 Subject: [PATCH] Deflake tests due to real UserBroadcastDispatcher Some fixes: * Add mock dependencies to QSPanelTest * Catch possible exception in UserBroadcastDispatcher. This should only happen if we are in a bad state (i.e. non-isolated tests). Fixes: 155619810 Test: 155619810 Change-Id: I02468cf888633a6a57e200321247653ed6c1e9ee --- .../systemui/broadcast/UserBroadcastDispatcher.kt | 9 ++++++++- .../src/com/android/systemui/qs/QSPanelTest.java | 12 +++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt b/packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt index 4e84f06f51a7c..3272fb7545e27 100644 --- a/packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt +++ b/packages/SystemUI/src/com/android/systemui/broadcast/UserBroadcastDispatcher.kt @@ -32,6 +32,8 @@ import com.android.internal.util.Preconditions import com.android.systemui.Dumpable import java.io.FileDescriptor import java.io.PrintWriter +import java.lang.IllegalArgumentException +import java.lang.IllegalStateException import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicInteger @@ -211,7 +213,12 @@ class UserBroadcastDispatcher( */ override fun run() { if (registered.get()) { - context.unregisterReceiver(this@UserBroadcastDispatcher) + try { + context.unregisterReceiver(this@UserBroadcastDispatcher) + } catch (e: IllegalArgumentException) { + Log.e(TAG, "Trying to unregister unregistered receiver for user $userId", + IllegalStateException(e)) + } registered.set(false) } // Short interval without receiver, this can be problematic diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java index 9d35e53e7421e..128d6e5612f14 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java @@ -25,6 +25,8 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.content.Context; +import android.os.UserManager; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; @@ -37,6 +39,7 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.settingslib.bluetooth.LocalBluetoothManager; +import com.android.systemui.Dependency; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dump.DumpManager; @@ -46,6 +49,7 @@ import com.android.systemui.qs.customize.QSCustomizer; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.notification.NotificationEntryManager; +import com.android.systemui.statusbar.policy.SecurityController; import com.android.systemui.util.concurrency.DelayableExecutor; import org.junit.Before; @@ -100,8 +104,14 @@ public class QSPanelTest extends SysuiTestCase { @Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); - mTestableLooper = TestableLooper.get(this); + + // Dependencies for QSSecurityFooter + mDependency.injectTestDependency(ActivityStarter.class, mActivityStarter); + mDependency.injectMockDependency(SecurityController.class); + mDependency.injectTestDependency(Dependency.BG_LOOPER, mTestableLooper.getLooper()); + mContext.addMockSystemService(Context.USER_SERVICE, mock(UserManager.class)); + mUiEventLogger = new UiEventLoggerFake(); mTestableLooper.runWithLooper(() -> { mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);