Merge "Deflake test in AppOpsControllerTest" into rvc-dev am: 5c82912ab7

Change-Id: I2284bf9977e6156c5a13d0104cde585fbdf7f223
This commit is contained in:
Fabian Kozynski
2020-05-19 13:29:48 +00:00
committed by Automerger Merge Worker

View File

@@ -19,6 +19,7 @@ package com.android.systemui.appops;
import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertFalse;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -29,9 +30,8 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static java.lang.Thread.sleep;
import android.app.AppOpsManager; import android.app.AppOpsManager;
import android.os.Looper;
import android.os.UserHandle; import android.os.UserHandle;
import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper; import android.testing.TestableLooper;
@@ -229,12 +229,7 @@ public class AppOpsControllerTest extends SysuiTestCase {
@Test @Test
public void testActiveOpNotRemovedAfterNoted() throws InterruptedException { public void testActiveOpNotRemovedAfterNoted() throws InterruptedException {
// Replaces the timeout delay with 5 ms // Replaces the timeout delay with 5 ms
AppOpsControllerImpl.H testHandler = mController.new H(mTestableLooper.getLooper()) { TestHandler testHandler = new TestHandler(mTestableLooper.getLooper());
@Override
public void scheduleRemoval(AppOpItem item, long timeToRemoval) {
super.scheduleRemoval(item, 5L);
}
};
mController.addCallback(new int[]{AppOpsManager.OP_FINE_LOCATION}, mCallback); mController.addCallback(new int[]{AppOpsManager.OP_FINE_LOCATION}, mCallback);
mController.setBGHandler(testHandler); mController.setBGHandler(testHandler);
@@ -245,6 +240,10 @@ public class AppOpsControllerTest extends SysuiTestCase {
mController.onOpNoted(AppOpsManager.OP_FINE_LOCATION, TEST_UID, TEST_PACKAGE_NAME, mController.onOpNoted(AppOpsManager.OP_FINE_LOCATION, TEST_UID, TEST_PACKAGE_NAME,
AppOpsManager.MODE_ALLOWED); AppOpsManager.MODE_ALLOWED);
// Check that we "scheduled" the removal. Don't actually schedule until we are ready to
// process messages at a later time.
assertNotNull(testHandler.mDelayScheduled);
mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages();
List<AppOpItem> list = mController.getActiveAppOps(); List<AppOpItem> list = mController.getActiveAppOps();
verify(mCallback).onActiveStateChanged( verify(mCallback).onActiveStateChanged(
@@ -253,8 +252,8 @@ public class AppOpsControllerTest extends SysuiTestCase {
// Duplicates are not removed between active and noted // Duplicates are not removed between active and noted
assertEquals(2, list.size()); assertEquals(2, list.size());
sleep(10L); // Now is later, so we can schedule delayed messages.
testHandler.scheduleDelayed();
mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages();
verify(mCallback, never()).onActiveStateChanged( verify(mCallback, never()).onActiveStateChanged(
@@ -321,4 +320,24 @@ public class AppOpsControllerTest extends SysuiTestCase {
verify(mCallback).onActiveStateChanged( verify(mCallback).onActiveStateChanged(
AppOpsManager.OP_FINE_LOCATION, TEST_UID, TEST_PACKAGE_NAME, true); AppOpsManager.OP_FINE_LOCATION, TEST_UID, TEST_PACKAGE_NAME, true);
} }
private class TestHandler extends AppOpsControllerImpl.H {
TestHandler(Looper looper) {
mController.super(looper);
}
Runnable mDelayScheduled;
void scheduleDelayed() {
if (mDelayScheduled != null) {
mDelayScheduled.run();
mDelayScheduled = null;
}
}
@Override
public void scheduleRemoval(AppOpItem item, long timeToRemoval) {
mDelayScheduled = () -> super.scheduleRemoval(item, 0L);
}
}
} }