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
// 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) {
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",