From db2eabbbabef5bcb09f6cdf9ed351b1431851184 Mon Sep 17 00:00:00 2001 From: Sundeep Ghuman Date: Fri, 28 Jul 2017 14:51:05 -0700 Subject: [PATCH] Fix race condition / test flakiness. The potential for a race condition exists in WifiTrackerTest, which intermittently manifests in APCT. By waiting for all handlers to be idle before asserting our test verification, we can fix this flaky test. Also added more verification steps to test code to more precisely indicate where a test may be failing. Bug: b/64047370 Test: runtest --path frameworks/base/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java Change-Id: I597fd7dc29e7f3b0d13c8cdebfa208326a64f507 --- .../android/settingslib/wifi/WifiTrackerTest.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java index 6ede55d2941e4..76d9823c6ab6a 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java @@ -346,7 +346,10 @@ public class WifiTrackerTest { Intent intent = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION); intent.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo); - return createTrackerWithImmediateBroadcastsAndInjectInitialScanResults(intent); + WifiTracker tracker = + createTrackerWithImmediateBroadcastsAndInjectInitialScanResults(intent); + assertThat(tracker.isConnected()).isTrue(); + return tracker; } private void waitForHandlersToProcessCurrentlyEnqueuedMessages(WifiTracker tracker) @@ -860,23 +863,26 @@ public class WifiTrackerTest { intent.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo); tracker.mReceiver.onReceive(mContext, intent); + waitForHandlersToProcessCurrentlyEnqueuedMessages(tracker); verify(mockWifiListener, times(1)).onConnectedChanged(); } @Test - public void onConnectedChangedCallback_shouldNBeInvokedWhenStateChanges() throws Exception { + public void onConnectedChangedCallback_shouldBeInvokedWhenStateChanges() throws Exception { WifiTracker tracker = createTrackerWithScanResultsAndAccessPoint1Connected(); verify(mockWifiListener, times(1)).onConnectedChanged(); NetworkInfo networkInfo = new NetworkInfo( ConnectivityManager.TYPE_WIFI, 0, "Type Wifi", "subtype"); networkInfo.setDetailedState( - NetworkInfo.DetailedState.DISCONNECTED, "dicconnected", "test"); + NetworkInfo.DetailedState.DISCONNECTED, "disconnected", "test"); Intent intent = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION); intent.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo); tracker.mReceiver.onReceive(mContext, intent); + waitForHandlersToProcessCurrentlyEnqueuedMessages(tracker); + assertThat(tracker.isConnected()).isFalse(); verify(mockWifiListener, times(2)).onConnectedChanged(); } }