diff options
| -rw-r--r-- | tests/net/java/com/android/server/ConnectivityServiceTest.java | 61 |
1 files changed, 38 insertions, 23 deletions
diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index d62c30da583d..46b64031ee8a 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -1103,6 +1103,29 @@ public class ConnectivityServiceTest extends AndroidTestCase { UNAVAILABLE } + private static class CallbackInfo { + public final CallbackState state; + public final Network network; + public final Object arg; + public CallbackInfo(CallbackState s, Network n, Object o) { + state = s; network = n; arg = o; + } + public String toString() { + return String.format("%s (%s)", state, network); + } + @Override + public boolean equals(Object o) { + if (!(o instanceof CallbackInfo)) return false; + // Ignore timeMs, since it's unpredictable. + CallbackInfo other = (CallbackInfo) o; + return (state == other.state) && Objects.equals(network, other.network); + } + @Override + public int hashCode() { + return Objects.hash(state, network); + } + } + /** * Utility NetworkCallback for testing. The caller must explicitly test for all the callbacks * this class receives, by calling expectCallback() exactly once each time a callback is @@ -1114,21 +1137,6 @@ public class ConnectivityServiceTest extends AndroidTestCase { // the linger timeout. private final static int TIMEOUT_MS = 50; - private class CallbackInfo { - public final CallbackState state; - public final Network network; - public Object arg; - public CallbackInfo(CallbackState s, Network n, Object o) { - state = s; network = n; arg = o; - } - public String toString() { return String.format("%s (%s)", state, network); } - public boolean equals(Object o) { - if (!(o instanceof CallbackInfo)) return false; - // Ignore timeMs, since it's unpredictable. - CallbackInfo other = (CallbackInfo) o; - return state == other.state && Objects.equals(network, other.network); - } - } private final LinkedBlockingQueue<CallbackInfo> mCallbacks = new LinkedBlockingQueue<>(); protected void setLastCallback(CallbackState state, Network network, Object o) { @@ -1155,17 +1163,24 @@ public class ConnectivityServiceTest extends AndroidTestCase { setLastCallback(CallbackState.LOST, network, null); } - void expectCallback(CallbackState state, MockNetworkAgent mockAgent, int timeoutMs) { - CallbackInfo expected = new CallbackInfo( - state, (mockAgent != null) ? mockAgent.getNetwork() : null, 0); - CallbackInfo actual; + CallbackInfo nextCallback(int timeoutMs) { + CallbackInfo cb = null; try { - actual = mCallbacks.poll(timeoutMs, TimeUnit.MILLISECONDS); - assertEquals("Unexpected callback:", expected, actual); + cb = mCallbacks.poll(timeoutMs, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { - fail("Did not receive expected " + expected + " after " + TIMEOUT_MS + "ms"); - actual = null; // Or the compiler can't tell it's never used uninitialized. } + if (cb == null) { + // LinkedBlockingQueue.poll() returns null if it timeouts. + fail("Did not receive callback after " + timeoutMs + "ms"); + } + return cb; + } + + void expectCallback(CallbackState state, MockNetworkAgent mockAgent, int timeoutMs) { + CallbackInfo expected = new CallbackInfo( + state, (mockAgent != null) ? mockAgent.getNetwork() : null, 0); + CallbackInfo actual = nextCallback(timeoutMs); + assertEquals("Unexpected callback:", expected, actual); if (state == CallbackState.LOSING) { String msg = String.format( "Invalid linger time value %d, must be between %d and %d", |