diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index d86aa51a53..3e552b41ad 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -91,6 +91,7 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.BooleanSupplier; /** * Tests for {@link ConnectivityService}. @@ -622,7 +623,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { } private class WrappedAvoidBadWifiTracker extends AvoidBadWifiTracker { - public boolean configRestrictsAvoidBadWifi; + public volatile boolean configRestrictsAvoidBadWifi; public WrappedAvoidBadWifiTracker(Context c, Handler h, Runnable r) { super(c, h, r); @@ -2165,7 +2166,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { tracker.reevaluate(); mService.waitForIdle(); String msg = String.format("config=false, setting=%s", values[i]); - assertTrue(msg, mService.avoidBadWifi()); + assertEventuallyTrue(() -> mService.avoidBadWifi(), 50); assertFalse(msg, tracker.shouldNotifyWifiUnvalidated()); } @@ -2174,19 +2175,19 @@ public class ConnectivityServiceTest extends AndroidTestCase { Settings.Global.putInt(cr, settingName, 0); tracker.reevaluate(); mService.waitForIdle(); - assertFalse(mService.avoidBadWifi()); + assertEventuallyTrue(() -> !mService.avoidBadWifi(), 50); assertFalse(tracker.shouldNotifyWifiUnvalidated()); Settings.Global.putInt(cr, settingName, 1); tracker.reevaluate(); mService.waitForIdle(); - assertTrue(mService.avoidBadWifi()); + assertEventuallyTrue(() -> mService.avoidBadWifi(), 50); assertFalse(tracker.shouldNotifyWifiUnvalidated()); Settings.Global.putString(cr, settingName, null); tracker.reevaluate(); mService.waitForIdle(); - assertFalse(mService.avoidBadWifi()); + assertEventuallyTrue(() -> !mService.avoidBadWifi(), 50); assertTrue(tracker.shouldNotifyWifiUnvalidated()); } @@ -2403,6 +2404,17 @@ public class ConnectivityServiceTest extends AndroidTestCase { networkCallback.assertNoCallback(); } + public void assertEventuallyTrue(BooleanSupplier fn, long maxWaitingTimeMs) throws Exception { + long start = SystemClock.elapsedRealtime(); + while (SystemClock.elapsedRealtime() <= start + maxWaitingTimeMs) { + if (fn.getAsBoolean()) { + return; + } + Thread.sleep(10); + } + assertTrue(fn.getAsBoolean()); + } + private static class TestKeepaliveCallback extends PacketKeepaliveCallback { public static enum CallbackType { ON_STARTED, ON_STOPPED, ON_ERROR };