Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ae3c6231 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

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
parent d29ddfd1
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -64,7 +64,8 @@ class SplashScreenExceptionList {
                mOnPropertiesChangedListener);
    }

    private void updateDeviceConfig(String values) {
    @VisibleForTesting
    void updateDeviceConfig(String values) {
        parseDeviceConfigPackageList(values);
    }

+13 −7
Original line number Diff line number Diff line
@@ -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);
        }
    }