Merge "ConnectivityServiceTest: some fixes in CallbackInfo" am: 37727596cc am: ac7e9a2b47
am: 073a0ac614
Change-Id: Ifc208e00e05efb29eaa2ab37abdc66d8c7ed8f4f
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user