Merge "Fixing flakiness of AppStandbyController test."

This commit is contained in:
TreeHugger Robot
2019-03-01 23:46:54 +00:00
committed by Android (Google) Code Review

View File

@@ -61,7 +61,6 @@ import android.util.ArraySet;
import android.view.Display;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.FlakyTest;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
@@ -323,6 +322,8 @@ public class AppStandbyControllerTests {
private boolean mOnParole = false;
private CountDownLatch mLatch;
private long mLastParoleChangeTime;
private boolean mIsExpecting = false;
private boolean mExpectedParoleState;
public boolean getParoleState() {
synchronized (this) {
@@ -333,6 +334,15 @@ public class AppStandbyControllerTests {
public void rearmLatch() {
synchronized (this) {
mLatch = new CountDownLatch(1);
mIsExpecting = false;
}
}
public void rearmLatch(boolean expectedParoleState) {
synchronized (this) {
mLatch = new CountDownLatch(1);
mIsExpecting = true;
mExpectedParoleState = expectedParoleState;
}
}
@@ -358,7 +368,9 @@ public class AppStandbyControllerTests {
if (mLatch != null && mLatch.getCount() > 0) {
mOnParole = isParoleOn;
mLastParoleChangeTime = getCurrentTime();
mLatch.countDown();
if (!mIsExpecting || isParoleOn == mExpectedParoleState) {
mLatch.countDown();
}
}
}
}
@@ -417,17 +429,23 @@ public class AppStandbyControllerTests {
}
@Test
@FlakyTest(bugId = 119774928)
public void testEnabledState() throws Exception {
TestParoleListener paroleListener = new TestParoleListener();
paroleListener.rearmLatch(true);
mController.addListener(paroleListener);
long lastUpdateTime;
// Test that listeners are notified if enabled changes when the device is not in parole.
setChargingState(mController, false);
// Start off not enabled. Device is effectively on permanent parole.
// Start off not enabled. Device is effectively in permanent parole.
setAppIdleEnabled(mController, false);
// Since AppStandbyController uses a handler to notify listeners of a state change, there is
// some inherent latency between changing the state and getting the notification. We need to
// wait until the paroleListener has been notified that parole is on before continuing with
// the test.
paroleListener.awaitOnLatch(STABLE_CHARGING_THRESHOLD * 3 / 2);
assertTrue(paroleListener.mOnParole);
// Enable controller
paroleListener.rearmLatch();