Fix test flakiness of SplashScreenExceptionListTest

The listener map of DeviceConfig uses OnPropertiesChangedListener
as key, so when iterating the map for dispatching change event,
the order may not be the same as the order of adding the listener.
Then the test may fail because the CountDownLatch counts before the
listener of SplashScreenExceptionList is called.

This change removes the additional test listener by overriding the
method which needs to be waited until it is called, which also
eliminates the dependency of listener callback order.

Fixes: 212660691
Test: atest SplashScreenExceptionListTest

Change-Id: I405932729d26f43428c70f5e282aeb8ae82d81c8
This commit is contained in:
Riddle Hsu
2021-12-30 18:19:31 +08:00
parent d29ddfd18b
commit ae3c6231e5
2 changed files with 15 additions and 8 deletions

View File

@@ -64,7 +64,8 @@ class SplashScreenExceptionList {
mOnPropertiesChangedListener);
}
private void updateDeviceConfig(String values) {
@VisibleForTesting
void updateDeviceConfig(String values) {
parseDeviceConfigPackageList(values);
}

View File

@@ -39,6 +39,7 @@ import org.junit.Test;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
/**
* Test for the splash screen exception list
@@ -55,7 +56,16 @@ public class SplashScreenExceptionListTest {
private DeviceConfig.Properties mInitialWindowManagerProperties;
private final HandlerExecutor mExecutor = new HandlerExecutor(
new Handler(Looper.getMainLooper()));
private final SplashScreenExceptionList mList = new SplashScreenExceptionList(mExecutor);
private final SplashScreenExceptionList mList = new SplashScreenExceptionList(mExecutor) {
@Override
void updateDeviceConfig(String rawList) {
super.updateDeviceConfig(rawList);
if (mOnUpdateDeviceConfig != null) {
mOnUpdateDeviceConfig.accept(rawList);
}
}
};
private Consumer<String> mOnUpdateDeviceConfig;
@Before
public void setUp() throws Exception {
@@ -91,13 +101,11 @@ public class SplashScreenExceptionListTest {
private void setExceptionListAndWaitForCallback(String commaSeparatedList) {
CountDownLatch latch = new CountDownLatch(1);
DeviceConfig.OnPropertiesChangedListener onPropertiesChangedListener = (p) -> {
if (commaSeparatedList.equals(p.getString(KEY_SPLASH_SCREEN_EXCEPTION_LIST, null))) {
mOnUpdateDeviceConfig = rawList -> {
if (commaSeparatedList.equals(rawList)) {
latch.countDown();
}
};
DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_WINDOW_MANAGER,
mExecutor, onPropertiesChangedListener);
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER,
KEY_SPLASH_SCREEN_EXCEPTION_LIST, commaSeparatedList, false);
try {
@@ -105,8 +113,6 @@ public class SplashScreenExceptionListTest {
latch.await(1, TimeUnit.SECONDS));
} catch (InterruptedException e) {
Assert.fail(e.getMessage());
} finally {
DeviceConfig.removeOnPropertiesChangedListener(onPropertiesChangedListener);
}
}