Merge "ConnectivityServiceTest: some fixes in CallbackInfo" am: 37727596cc am: ac7e9a2b47

am: 073a0ac614

Change-Id: Ifc208e00e05efb29eaa2ab37abdc66d8c7ed8f4f
This commit is contained in:
Hugo Benichi
2017-01-16 05:13:01 +00:00
committed by android-build-merger

View File

@@ -1089,6 +1089,29 @@ public class ConnectivityServiceTest extends AndroidTestCase {
LOST LOST
} }
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 * 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 * this class receives, by calling expectCallback() exactly once each time a callback is
@@ -1100,21 +1123,6 @@ public class ConnectivityServiceTest extends AndroidTestCase {
// the linger timeout. // the linger timeout.
private final static int TIMEOUT_MS = 50; 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<>(); private final LinkedBlockingQueue<CallbackInfo> mCallbacks = new LinkedBlockingQueue<>();
protected void setLastCallback(CallbackState state, Network network, Object o) { protected void setLastCallback(CallbackState state, Network network, Object o) {
@@ -1136,17 +1144,24 @@ public class ConnectivityServiceTest extends AndroidTestCase {
setLastCallback(CallbackState.LOST, network, null); setLastCallback(CallbackState.LOST, network, null);
} }
CallbackInfo nextCallback(int timeoutMs) {
CallbackInfo cb = null;
try {
cb = mCallbacks.poll(timeoutMs, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
}
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) { void expectCallback(CallbackState state, MockNetworkAgent mockAgent, int timeoutMs) {
CallbackInfo expected = new CallbackInfo( CallbackInfo expected = new CallbackInfo(
state, (mockAgent != null) ? mockAgent.getNetwork() : null, 0); state, (mockAgent != null) ? mockAgent.getNetwork() : null, 0);
CallbackInfo actual; CallbackInfo actual = nextCallback(timeoutMs);
try {
actual = mCallbacks.poll(timeoutMs, TimeUnit.MILLISECONDS);
assertEquals("Unexpected callback:", expected, actual); assertEquals("Unexpected callback:", expected, actual);
} 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 (state == CallbackState.LOSING) { if (state == CallbackState.LOSING) {
String msg = String.format( String msg = String.format(
"Invalid linger time value %d, must be between %d and %d", "Invalid linger time value %d, must be between %d and %d",