From d0bb3fe33ae2ab3ce37611a1f9a8015647c8e6c7 Mon Sep 17 00:00:00 2001 From: Cody Kesting Date: Wed, 15 Jan 2020 16:31:08 -0800 Subject: [PATCH] Use waitForIdle() to wait for Threaded processing. Unit testing for ConnectivityDiagnostics API in ConnectivityServiceTest is updated to use HandlerUtilsKt#waitForIdle. In the general case, this takes the same time to run as verify-with-timeout (used previously). However, test failures due to messages not being enqueued on the handler (backed by the ConnectivityService Thread) won't incur the timeout delay, as the thread will be idle sooner. This shortens the delay in the event of a programming error. Bug: 143187964 Test: atest FrameworksNetTests Change-Id: Iae66309501bb83449ca735dfa5e972a9852cbcd0 --- .../server/ConnectivityServiceTest.java | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index 08defd2784..8da1a5b655 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -6446,14 +6446,16 @@ public class ConnectivityServiceTest { public void testRegisterUnregisterConnectivityDiagnosticsCallback() throws Exception { final NetworkRequest wifiRequest = new NetworkRequest.Builder().addTransportType(TRANSPORT_WIFI).build(); - when(mConnectivityDiagnosticsCallback.asBinder()).thenReturn(mIBinder); mService.registerConnectivityDiagnosticsCallback( mConnectivityDiagnosticsCallback, wifiRequest, mContext.getPackageName()); - verify(mIBinder, timeout(TIMEOUT_MS)) - .linkToDeath(any(ConnectivityDiagnosticsCallbackInfo.class), anyInt()); + // Block until all other events are done processing. + HandlerUtilsKt.waitForIdle(mCsHandlerThread, TIMEOUT_MS); + + verify(mIBinder).linkToDeath(any(ConnectivityDiagnosticsCallbackInfo.class), anyInt()); + verify(mConnectivityDiagnosticsCallback).asBinder(); assertTrue( mService.mConnectivityDiagnosticsCallbacks.containsKey( mConnectivityDiagnosticsCallback)); @@ -6476,8 +6478,10 @@ public class ConnectivityServiceTest { mService.registerConnectivityDiagnosticsCallback( mConnectivityDiagnosticsCallback, wifiRequest, mContext.getPackageName()); - verify(mIBinder, timeout(TIMEOUT_MS)) - .linkToDeath(any(ConnectivityDiagnosticsCallbackInfo.class), anyInt()); + // Block until all other events are done processing. + HandlerUtilsKt.waitForIdle(mCsHandlerThread, TIMEOUT_MS); + + verify(mIBinder).linkToDeath(any(ConnectivityDiagnosticsCallbackInfo.class), anyInt()); verify(mConnectivityDiagnosticsCallback).asBinder(); assertTrue( mService.mConnectivityDiagnosticsCallbacks.containsKey( @@ -6635,8 +6639,11 @@ public class ConnectivityServiceTest { public void testConnectivityDiagnosticsCallbackOnConnectivityReport() throws Exception { setUpConnectivityDiagnosticsCallback(); - // Wait for onConnectivityReport to fire - verify(mConnectivityDiagnosticsCallback, timeout(TIMEOUT_MS)) + // Block until all other events are done processing. + HandlerUtilsKt.waitForIdle(mCsHandlerThread, TIMEOUT_MS); + + // Verify onConnectivityReport fired + verify(mConnectivityDiagnosticsCallback) .onConnectivityReport(any(ConnectivityReport.class)); } @@ -6648,9 +6655,11 @@ public class ConnectivityServiceTest { // cellular network agent mCellNetworkAgent.notifyDataStallSuspected(); - // Wait for onDataStallSuspected to fire - verify(mConnectivityDiagnosticsCallback, timeout(TIMEOUT_MS)) - .onDataStallSuspected(any(DataStallReport.class)); + // Block until all other events are done processing. + HandlerUtilsKt.waitForIdle(mCsHandlerThread, TIMEOUT_MS); + + // Verify onDataStallSuspected fired + verify(mConnectivityDiagnosticsCallback).onDataStallSuspected(any(DataStallReport.class)); } @Test @@ -6661,15 +6670,21 @@ public class ConnectivityServiceTest { final boolean hasConnectivity = true; mService.reportNetworkConnectivity(n, hasConnectivity); - // Wait for onNetworkConnectivityReported to fire - verify(mConnectivityDiagnosticsCallback, timeout(TIMEOUT_MS)) + // Block until all other events are done processing. + HandlerUtilsKt.waitForIdle(mCsHandlerThread, TIMEOUT_MS); + + // Verify onNetworkConnectivityReported fired + verify(mConnectivityDiagnosticsCallback) .onNetworkConnectivityReported(eq(n), eq(hasConnectivity)); final boolean noConnectivity = false; mService.reportNetworkConnectivity(n, noConnectivity); + // Block until all other events are done processing. + HandlerUtilsKt.waitForIdle(mCsHandlerThread, TIMEOUT_MS); + // Wait for onNetworkConnectivityReported to fire - verify(mConnectivityDiagnosticsCallback, timeout(TIMEOUT_MS)) + verify(mConnectivityDiagnosticsCallback) .onNetworkConnectivityReported(eq(n), eq(noConnectivity)); } }