Merge "Deflake test in AppOpsControllerTest" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
5c82912ab7
@@ -19,6 +19,7 @@ package com.android.systemui.appops;
|
||||
import static junit.framework.TestCase.assertFalse;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
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.verify;
|
||||
|
||||
import static java.lang.Thread.sleep;
|
||||
|
||||
import android.app.AppOpsManager;
|
||||
import android.os.Looper;
|
||||
import android.os.UserHandle;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper;
|
||||
@@ -229,12 +229,7 @@ public class AppOpsControllerTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testActiveOpNotRemovedAfterNoted() throws InterruptedException {
|
||||
// Replaces the timeout delay with 5 ms
|
||||
AppOpsControllerImpl.H testHandler = mController.new H(mTestableLooper.getLooper()) {
|
||||
@Override
|
||||
public void scheduleRemoval(AppOpItem item, long timeToRemoval) {
|
||||
super.scheduleRemoval(item, 5L);
|
||||
}
|
||||
};
|
||||
TestHandler testHandler = new TestHandler(mTestableLooper.getLooper());
|
||||
|
||||
mController.addCallback(new int[]{AppOpsManager.OP_FINE_LOCATION}, mCallback);
|
||||
mController.setBGHandler(testHandler);
|
||||
@@ -245,6 +240,10 @@ public class AppOpsControllerTest extends SysuiTestCase {
|
||||
mController.onOpNoted(AppOpsManager.OP_FINE_LOCATION, TEST_UID, TEST_PACKAGE_NAME,
|
||||
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();
|
||||
List<AppOpItem> list = mController.getActiveAppOps();
|
||||
verify(mCallback).onActiveStateChanged(
|
||||
@@ -253,8 +252,8 @@ public class AppOpsControllerTest extends SysuiTestCase {
|
||||
// Duplicates are not removed between active and noted
|
||||
assertEquals(2, list.size());
|
||||
|
||||
sleep(10L);
|
||||
|
||||
// Now is later, so we can schedule delayed messages.
|
||||
testHandler.scheduleDelayed();
|
||||
mTestableLooper.processAllMessages();
|
||||
|
||||
verify(mCallback, never()).onActiveStateChanged(
|
||||
@@ -321,4 +320,24 @@ public class AppOpsControllerTest extends SysuiTestCase {
|
||||
verify(mCallback).onActiveStateChanged(
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user