Improve testing of CONNECTIVITY_ACTION broadcasts.
We currently test CONNECTIVITY_ACTION broadcasts by directly registering BroadcastReceivers with BroadcastInterceptingContext, and making the receivers unregister themselves when all the broadcasts they expect have been received. This works for current test cases, but does not work if anything registers another receiver for CONNECTIVITY_ACTION. In that case, when we unregister the receiver in the receiver's onReceive method, BroadcastInterceptingContext will throw a ConcurrentModificationException because the list of receivers is being modified during iteration. Fix this by adding an ExpectedBroadcast class that stores the receiver and unregisters the receiver only when the test checks that the broadcast was received, which happens after the receiver runs. This is easier to use and also guarantees that the receiver is unregistered even if the test is expecting that the broadcast is never fired. Accordingly, remove mRegisteredReceivers and the code that uses it; it's no longer necessary now that ExpectedBroadcast always unregisters its receivers. Also add a convenience expectConnectivityAction method to expect a CONNECTIVITY_ACTION broadcast with specific contents. This makes the test easier to read and more detailed. Convert some existing tests to this method. While I'm at it, fix a test that was using "mCellNetworkAgent" to represent a wifi network. Bug: 173331190 Test: test-only change Change-Id: Ibada8b4215625e1016d9fd170526206920af76f5
This commit is contained in:
@@ -289,13 +289,16 @@ import java.util.HashSet;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.TimeoutException;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -405,9 +408,6 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
private class MockContext extends BroadcastInterceptingContext {
|
private class MockContext extends BroadcastInterceptingContext {
|
||||||
private final MockContentResolver mContentResolver;
|
private final MockContentResolver mContentResolver;
|
||||||
// Contains all registered receivers since this object was created. Useful to clear
|
|
||||||
// them when needed, as BroadcastInterceptingContext does not provide this facility.
|
|
||||||
private final List<BroadcastReceiver> mRegisteredReceivers = new ArrayList<>();
|
|
||||||
|
|
||||||
@Spy private Resources mResources;
|
@Spy private Resources mResources;
|
||||||
private final LinkedBlockingQueue<Intent> mStartedActivities = new LinkedBlockingQueue<>();
|
private final LinkedBlockingQueue<Intent> mStartedActivities = new LinkedBlockingQueue<>();
|
||||||
@@ -544,19 +544,6 @@ public class ConnectivityServiceTest {
|
|||||||
public void setPermission(String permission, Integer granted) {
|
public void setPermission(String permission, Integer granted) {
|
||||||
mMockedPermissions.put(permission, granted);
|
mMockedPermissions.put(permission, granted);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
|
|
||||||
mRegisteredReceivers.add(receiver);
|
|
||||||
return super.registerReceiver(receiver, filter);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clearRegisteredReceivers() {
|
|
||||||
// super.unregisterReceiver is a no-op for receivers that are not registered (because
|
|
||||||
// they haven't been registered or because they have already been unregistered).
|
|
||||||
// For the same reason, don't bother clearing mRegisteredReceivers.
|
|
||||||
for (final BroadcastReceiver rcv : mRegisteredReceivers) unregisterReceiver(rcv);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void waitForIdle() {
|
private void waitForIdle() {
|
||||||
@@ -585,10 +572,10 @@ public class ConnectivityServiceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Bring up a network that we can use to send messages to ConnectivityService.
|
// Bring up a network that we can use to send messages to ConnectivityService.
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = expectConnectivityAction(TYPE_WIFI, DetailedState.CONNECTED);
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
mWiFiNetworkAgent.connect(false);
|
mWiFiNetworkAgent.connect(false);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
Network n = mWiFiNetworkAgent.getNetwork();
|
Network n = mWiFiNetworkAgent.getNetwork();
|
||||||
assertNotNull(n);
|
assertNotNull(n);
|
||||||
|
|
||||||
@@ -605,10 +592,10 @@ public class ConnectivityServiceTest {
|
|||||||
@Ignore
|
@Ignore
|
||||||
public void verifyThatNotWaitingForIdleCausesRaceConditions() throws Exception {
|
public void verifyThatNotWaitingForIdleCausesRaceConditions() throws Exception {
|
||||||
// Bring up a network that we can use to send messages to ConnectivityService.
|
// Bring up a network that we can use to send messages to ConnectivityService.
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = expectConnectivityAction(TYPE_WIFI, DetailedState.CONNECTED);
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
mWiFiNetworkAgent.connect(false);
|
mWiFiNetworkAgent.connect(false);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
Network n = mWiFiNetworkAgent.getNetwork();
|
Network n = mWiFiNetworkAgent.getNetwork();
|
||||||
assertNotNull(n);
|
assertNotNull(n);
|
||||||
|
|
||||||
@@ -1508,29 +1495,79 @@ public class ConnectivityServiceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a ConditionVariable that opens when {@code count} numbers of CONNECTIVITY_ACTION
|
* Class to simplify expecting broadcasts using BroadcastInterceptingContext.
|
||||||
* broadcasts are received.
|
* Ensures that the receiver is unregistered after the expected broadcast is received. This
|
||||||
|
* cannot be done in the BroadcastReceiver itself because BroadcastInterceptingContext runs
|
||||||
|
* the receivers' receive method while iterating over the list of receivers, and unregistering
|
||||||
|
* the receiver during iteration throws ConcurrentModificationException.
|
||||||
*/
|
*/
|
||||||
private ConditionVariable registerConnectivityBroadcast(final int count) {
|
private class ExpectedBroadcast extends CompletableFuture<Intent> {
|
||||||
|
private final BroadcastReceiver mReceiver;
|
||||||
|
|
||||||
|
ExpectedBroadcast(BroadcastReceiver receiver) {
|
||||||
|
mReceiver = receiver;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Intent expectBroadcast(int timeoutMs) throws Exception {
|
||||||
|
try {
|
||||||
|
return get(timeoutMs, TimeUnit.MILLISECONDS);
|
||||||
|
} catch (TimeoutException e) {
|
||||||
|
fail("Expected broadcast not received after " + timeoutMs + " ms");
|
||||||
|
return null;
|
||||||
|
} finally {
|
||||||
|
mServiceContext.unregisterReceiver(mReceiver);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Intent expectBroadcast() throws Exception {
|
||||||
|
return expectBroadcast(TIMEOUT_MS);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void expectNoBroadcast(int timeoutMs) throws Exception {
|
||||||
|
waitForIdle();
|
||||||
|
try {
|
||||||
|
final Intent intent = get(timeoutMs, TimeUnit.MILLISECONDS);
|
||||||
|
fail("Unexpected broadcast: " + intent.getAction());
|
||||||
|
} catch (TimeoutException expected) {
|
||||||
|
} finally {
|
||||||
|
mServiceContext.unregisterReceiver(mReceiver);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Expects that {@code count} CONNECTIVITY_ACTION broadcasts are received. */
|
||||||
|
private ExpectedBroadcast registerConnectivityBroadcast(final int count) {
|
||||||
return registerConnectivityBroadcastThat(count, intent -> true);
|
return registerConnectivityBroadcastThat(count, intent -> true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ConditionVariable registerConnectivityBroadcastThat(final int count,
|
private ExpectedBroadcast registerConnectivityBroadcastThat(final int count,
|
||||||
@NonNull final Predicate<Intent> filter) {
|
@NonNull final Predicate<Intent> filter) {
|
||||||
final ConditionVariable cv = new ConditionVariable();
|
|
||||||
final IntentFilter intentFilter = new IntentFilter(CONNECTIVITY_ACTION);
|
final IntentFilter intentFilter = new IntentFilter(CONNECTIVITY_ACTION);
|
||||||
|
// AtomicReference allows receiver to access expected even though it is constructed later.
|
||||||
|
final AtomicReference<ExpectedBroadcast> expectedRef = new AtomicReference<>();
|
||||||
final BroadcastReceiver receiver = new BroadcastReceiver() {
|
final BroadcastReceiver receiver = new BroadcastReceiver() {
|
||||||
private int remaining = count;
|
private int mRemaining = count;
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
if (!filter.test(intent)) return;
|
final int type = intent.getIntExtra(EXTRA_NETWORK_TYPE, -1);
|
||||||
if (--remaining == 0) {
|
final NetworkInfo ni = intent.getParcelableExtra(EXTRA_NETWORK_INFO);
|
||||||
cv.open();
|
Log.d(TAG, "Received CONNECTIVITY_ACTION type=" + type + " ni=" + ni);
|
||||||
mServiceContext.unregisterReceiver(this);
|
if (!filter.test(intent)) return;
|
||||||
}
|
if (--mRemaining == 0) {
|
||||||
}
|
expectedRef.get().complete(intent);
|
||||||
};
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
final ExpectedBroadcast expected = new ExpectedBroadcast(receiver);
|
||||||
|
expectedRef.set(expected);
|
||||||
mServiceContext.registerReceiver(receiver, intentFilter);
|
mServiceContext.registerReceiver(receiver, intentFilter);
|
||||||
return cv;
|
return expected;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ExpectedBroadcast expectConnectivityAction(int type, NetworkInfo.DetailedState state) {
|
||||||
|
return registerConnectivityBroadcastThat(1, intent ->
|
||||||
|
type == intent.getIntExtra(EXTRA_NETWORK_TYPE, -1) && state.equals(
|
||||||
|
((NetworkInfo) intent.getParcelableExtra(EXTRA_NETWORK_INFO))
|
||||||
|
.getDetailedState()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1554,10 +1591,9 @@ public class ConnectivityServiceTest {
|
|||||||
// Connect the cell agent and wait for the connected broadcast.
|
// Connect the cell agent and wait for the connected broadcast.
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||||
mCellNetworkAgent.addCapability(NET_CAPABILITY_SUPL);
|
mCellNetworkAgent.addCapability(NET_CAPABILITY_SUPL);
|
||||||
final ConditionVariable cv1 = registerConnectivityBroadcastThat(1,
|
ExpectedBroadcast b = expectConnectivityAction(TYPE_MOBILE, DetailedState.CONNECTED);
|
||||||
intent -> intent.getIntExtra(EXTRA_NETWORK_TYPE, -1) == TYPE_MOBILE);
|
|
||||||
mCellNetworkAgent.connect(true);
|
mCellNetworkAgent.connect(true);
|
||||||
waitFor(cv1);
|
b.expectBroadcast();
|
||||||
|
|
||||||
// Build legacy request for SUPL.
|
// Build legacy request for SUPL.
|
||||||
final NetworkCapabilities legacyCaps = new NetworkCapabilities();
|
final NetworkCapabilities legacyCaps = new NetworkCapabilities();
|
||||||
@@ -1567,27 +1603,17 @@ public class ConnectivityServiceTest {
|
|||||||
ConnectivityManager.REQUEST_ID_UNSET, NetworkRequest.Type.REQUEST);
|
ConnectivityManager.REQUEST_ID_UNSET, NetworkRequest.Type.REQUEST);
|
||||||
|
|
||||||
// File request, withdraw it and make sure no broadcast is sent
|
// File request, withdraw it and make sure no broadcast is sent
|
||||||
final ConditionVariable cv2 = registerConnectivityBroadcast(1);
|
b = registerConnectivityBroadcast(1);
|
||||||
final TestNetworkCallback callback = new TestNetworkCallback();
|
final TestNetworkCallback callback = new TestNetworkCallback();
|
||||||
mCm.requestNetwork(legacyRequest, callback);
|
mCm.requestNetwork(legacyRequest, callback);
|
||||||
callback.expectCallback(CallbackEntry.AVAILABLE, mCellNetworkAgent);
|
callback.expectCallback(CallbackEntry.AVAILABLE, mCellNetworkAgent);
|
||||||
mCm.unregisterNetworkCallback(callback);
|
mCm.unregisterNetworkCallback(callback);
|
||||||
assertFalse(cv2.block(800)); // 800ms long enough to at least flake if this is sent
|
b.expectNoBroadcast(800); // 800ms long enough to at least flake if this is sent
|
||||||
// As the broadcast did not fire, the receiver was not unregistered. Do this now.
|
|
||||||
mServiceContext.clearRegisteredReceivers();
|
|
||||||
|
|
||||||
// Disconnect the network and expect mobile disconnected broadcast. Use a small hack to
|
// Disconnect the network and expect mobile disconnected broadcast.
|
||||||
// check that has been sent.
|
b = expectConnectivityAction(TYPE_MOBILE, DetailedState.DISCONNECTED);
|
||||||
final AtomicBoolean vanillaAction = new AtomicBoolean(false);
|
|
||||||
final ConditionVariable cv3 = registerConnectivityBroadcastThat(1, intent -> {
|
|
||||||
if (intent.getAction().equals(CONNECTIVITY_ACTION)) {
|
|
||||||
vanillaAction.set(true);
|
|
||||||
}
|
|
||||||
return !((NetworkInfo) intent.getExtra(EXTRA_NETWORK_INFO, -1)).isConnected();
|
|
||||||
});
|
|
||||||
mCellNetworkAgent.disconnect();
|
mCellNetworkAgent.disconnect();
|
||||||
waitFor(cv3);
|
b.expectBroadcast();
|
||||||
assertTrue(vanillaAction.get());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1598,9 +1624,9 @@ public class ConnectivityServiceTest {
|
|||||||
assertNull(mCm.getActiveNetworkInfo());
|
assertNull(mCm.getActiveNetworkInfo());
|
||||||
assertNull(mCm.getActiveNetwork());
|
assertNull(mCm.getActiveNetwork());
|
||||||
// Test bringing up validated cellular.
|
// Test bringing up validated cellular.
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = expectConnectivityAction(TYPE_MOBILE, DetailedState.CONNECTED);
|
||||||
mCellNetworkAgent.connect(true);
|
mCellNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
||||||
assertLength(2, mCm.getAllNetworks());
|
assertLength(2, mCm.getAllNetworks());
|
||||||
assertTrue(mCm.getAllNetworks()[0].equals(mCm.getActiveNetwork()) ||
|
assertTrue(mCm.getAllNetworks()[0].equals(mCm.getActiveNetwork()) ||
|
||||||
@@ -1608,9 +1634,9 @@ public class ConnectivityServiceTest {
|
|||||||
assertTrue(mCm.getAllNetworks()[0].equals(mWiFiNetworkAgent.getNetwork()) ||
|
assertTrue(mCm.getAllNetworks()[0].equals(mWiFiNetworkAgent.getNetwork()) ||
|
||||||
mCm.getAllNetworks()[1].equals(mWiFiNetworkAgent.getNetwork()));
|
mCm.getAllNetworks()[1].equals(mWiFiNetworkAgent.getNetwork()));
|
||||||
// Test bringing up validated WiFi.
|
// Test bringing up validated WiFi.
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mWiFiNetworkAgent.connect(true);
|
mWiFiNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
assertLength(2, mCm.getAllNetworks());
|
assertLength(2, mCm.getAllNetworks());
|
||||||
assertTrue(mCm.getAllNetworks()[0].equals(mCm.getActiveNetwork()) ||
|
assertTrue(mCm.getAllNetworks()[0].equals(mCm.getActiveNetwork()) ||
|
||||||
@@ -1625,9 +1651,9 @@ public class ConnectivityServiceTest {
|
|||||||
assertLength(1, mCm.getAllNetworks());
|
assertLength(1, mCm.getAllNetworks());
|
||||||
assertEquals(mCm.getAllNetworks()[0], mCm.getActiveNetwork());
|
assertEquals(mCm.getAllNetworks()[0], mCm.getActiveNetwork());
|
||||||
// Test WiFi disconnect.
|
// Test WiFi disconnect.
|
||||||
cv = registerConnectivityBroadcast(1);
|
b = registerConnectivityBroadcast(1);
|
||||||
mWiFiNetworkAgent.disconnect();
|
mWiFiNetworkAgent.disconnect();
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyNoNetwork();
|
verifyNoNetwork();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1635,9 +1661,9 @@ public class ConnectivityServiceTest {
|
|||||||
public void testValidatedCellularOutscoresUnvalidatedWiFi() throws Exception {
|
public void testValidatedCellularOutscoresUnvalidatedWiFi() throws Exception {
|
||||||
// Test bringing up unvalidated WiFi
|
// Test bringing up unvalidated WiFi
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = registerConnectivityBroadcast(1);
|
||||||
mWiFiNetworkAgent.connect(false);
|
mWiFiNetworkAgent.connect(false);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
// Test bringing up unvalidated cellular
|
// Test bringing up unvalidated cellular
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||||
@@ -1650,19 +1676,19 @@ public class ConnectivityServiceTest {
|
|||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
// Test bringing up validated cellular
|
// Test bringing up validated cellular
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mCellNetworkAgent.connect(true);
|
mCellNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
||||||
// Test cellular disconnect.
|
// Test cellular disconnect.
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mCellNetworkAgent.disconnect();
|
mCellNetworkAgent.disconnect();
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
// Test WiFi disconnect.
|
// Test WiFi disconnect.
|
||||||
cv = registerConnectivityBroadcast(1);
|
b = registerConnectivityBroadcast(1);
|
||||||
mWiFiNetworkAgent.disconnect();
|
mWiFiNetworkAgent.disconnect();
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyNoNetwork();
|
verifyNoNetwork();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1670,25 +1696,25 @@ public class ConnectivityServiceTest {
|
|||||||
public void testUnvalidatedWifiOutscoresUnvalidatedCellular() throws Exception {
|
public void testUnvalidatedWifiOutscoresUnvalidatedCellular() throws Exception {
|
||||||
// Test bringing up unvalidated cellular.
|
// Test bringing up unvalidated cellular.
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = registerConnectivityBroadcast(1);
|
||||||
mCellNetworkAgent.connect(false);
|
mCellNetworkAgent.connect(false);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
||||||
// Test bringing up unvalidated WiFi.
|
// Test bringing up unvalidated WiFi.
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mWiFiNetworkAgent.connect(false);
|
mWiFiNetworkAgent.connect(false);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
// Test WiFi disconnect.
|
// Test WiFi disconnect.
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mWiFiNetworkAgent.disconnect();
|
mWiFiNetworkAgent.disconnect();
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
||||||
// Test cellular disconnect.
|
// Test cellular disconnect.
|
||||||
cv = registerConnectivityBroadcast(1);
|
b = registerConnectivityBroadcast(1);
|
||||||
mCellNetworkAgent.disconnect();
|
mCellNetworkAgent.disconnect();
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyNoNetwork();
|
verifyNoNetwork();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1696,24 +1722,24 @@ public class ConnectivityServiceTest {
|
|||||||
public void testUnlingeringDoesNotValidate() throws Exception {
|
public void testUnlingeringDoesNotValidate() throws Exception {
|
||||||
// Test bringing up unvalidated WiFi.
|
// Test bringing up unvalidated WiFi.
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = registerConnectivityBroadcast(1);
|
||||||
mWiFiNetworkAgent.connect(false);
|
mWiFiNetworkAgent.connect(false);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
assertFalse(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(
|
assertFalse(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(
|
||||||
NET_CAPABILITY_VALIDATED));
|
NET_CAPABILITY_VALIDATED));
|
||||||
// Test bringing up validated cellular.
|
// Test bringing up validated cellular.
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mCellNetworkAgent.connect(true);
|
mCellNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
||||||
assertFalse(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(
|
assertFalse(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(
|
||||||
NET_CAPABILITY_VALIDATED));
|
NET_CAPABILITY_VALIDATED));
|
||||||
// Test cellular disconnect.
|
// Test cellular disconnect.
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mCellNetworkAgent.disconnect();
|
mCellNetworkAgent.disconnect();
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
// Unlingering a network should not cause it to be marked as validated.
|
// Unlingering a network should not cause it to be marked as validated.
|
||||||
assertFalse(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(
|
assertFalse(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(
|
||||||
@@ -1724,25 +1750,25 @@ public class ConnectivityServiceTest {
|
|||||||
public void testCellularOutscoresWeakWifi() throws Exception {
|
public void testCellularOutscoresWeakWifi() throws Exception {
|
||||||
// Test bringing up validated cellular.
|
// Test bringing up validated cellular.
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = registerConnectivityBroadcast(1);
|
||||||
mCellNetworkAgent.connect(true);
|
mCellNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
||||||
// Test bringing up validated WiFi.
|
// Test bringing up validated WiFi.
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mWiFiNetworkAgent.connect(true);
|
mWiFiNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
// Test WiFi getting really weak.
|
// Test WiFi getting really weak.
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mWiFiNetworkAgent.adjustScore(-11);
|
mWiFiNetworkAgent.adjustScore(-11);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
||||||
// Test WiFi restoring signal strength.
|
// Test WiFi restoring signal strength.
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mWiFiNetworkAgent.adjustScore(11);
|
mWiFiNetworkAgent.adjustScore(11);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1760,9 +1786,9 @@ public class ConnectivityServiceTest {
|
|||||||
mCellNetworkAgent.expectDisconnected();
|
mCellNetworkAgent.expectDisconnected();
|
||||||
// Test bringing up validated WiFi.
|
// Test bringing up validated WiFi.
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
final ConditionVariable cv = registerConnectivityBroadcast(1);
|
final ExpectedBroadcast b = expectConnectivityAction(TYPE_WIFI, DetailedState.CONNECTED);
|
||||||
mWiFiNetworkAgent.connect(true);
|
mWiFiNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
// Test bringing up unvalidated cellular.
|
// Test bringing up unvalidated cellular.
|
||||||
// Expect it to be torn down because it could never be the highest scoring network
|
// Expect it to be torn down because it could never be the highest scoring network
|
||||||
@@ -1779,33 +1805,33 @@ public class ConnectivityServiceTest {
|
|||||||
public void testCellularFallback() throws Exception {
|
public void testCellularFallback() throws Exception {
|
||||||
// Test bringing up validated cellular.
|
// Test bringing up validated cellular.
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = registerConnectivityBroadcast(1);
|
||||||
mCellNetworkAgent.connect(true);
|
mCellNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
||||||
// Test bringing up validated WiFi.
|
// Test bringing up validated WiFi.
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mWiFiNetworkAgent.connect(true);
|
mWiFiNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
// Reevaluate WiFi (it'll instantly fail DNS).
|
// Reevaluate WiFi (it'll instantly fail DNS).
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
assertTrue(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(
|
assertTrue(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(
|
||||||
NET_CAPABILITY_VALIDATED));
|
NET_CAPABILITY_VALIDATED));
|
||||||
mCm.reportBadNetwork(mWiFiNetworkAgent.getNetwork());
|
mCm.reportBadNetwork(mWiFiNetworkAgent.getNetwork());
|
||||||
// Should quickly fall back to Cellular.
|
// Should quickly fall back to Cellular.
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
assertFalse(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(
|
assertFalse(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(
|
||||||
NET_CAPABILITY_VALIDATED));
|
NET_CAPABILITY_VALIDATED));
|
||||||
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
||||||
// Reevaluate cellular (it'll instantly fail DNS).
|
// Reevaluate cellular (it'll instantly fail DNS).
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
assertTrue(mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()).hasCapability(
|
assertTrue(mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()).hasCapability(
|
||||||
NET_CAPABILITY_VALIDATED));
|
NET_CAPABILITY_VALIDATED));
|
||||||
mCm.reportBadNetwork(mCellNetworkAgent.getNetwork());
|
mCm.reportBadNetwork(mCellNetworkAgent.getNetwork());
|
||||||
// Should quickly fall back to WiFi.
|
// Should quickly fall back to WiFi.
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
assertFalse(mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()).hasCapability(
|
assertFalse(mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()).hasCapability(
|
||||||
NET_CAPABILITY_VALIDATED));
|
NET_CAPABILITY_VALIDATED));
|
||||||
assertFalse(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(
|
assertFalse(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(
|
||||||
@@ -1817,23 +1843,23 @@ public class ConnectivityServiceTest {
|
|||||||
public void testWiFiFallback() throws Exception {
|
public void testWiFiFallback() throws Exception {
|
||||||
// Test bringing up unvalidated WiFi.
|
// Test bringing up unvalidated WiFi.
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = registerConnectivityBroadcast(1);
|
||||||
mWiFiNetworkAgent.connect(false);
|
mWiFiNetworkAgent.connect(false);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
// Test bringing up validated cellular.
|
// Test bringing up validated cellular.
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mCellNetworkAgent.connect(true);
|
mCellNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
||||||
// Reevaluate cellular (it'll instantly fail DNS).
|
// Reevaluate cellular (it'll instantly fail DNS).
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
assertTrue(mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()).hasCapability(
|
assertTrue(mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()).hasCapability(
|
||||||
NET_CAPABILITY_VALIDATED));
|
NET_CAPABILITY_VALIDATED));
|
||||||
mCm.reportBadNetwork(mCellNetworkAgent.getNetwork());
|
mCm.reportBadNetwork(mCellNetworkAgent.getNetwork());
|
||||||
// Should quickly fall back to WiFi.
|
// Should quickly fall back to WiFi.
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
assertFalse(mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()).hasCapability(
|
assertFalse(mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()).hasCapability(
|
||||||
NET_CAPABILITY_VALIDATED));
|
NET_CAPABILITY_VALIDATED));
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
@@ -1903,13 +1929,13 @@ public class ConnectivityServiceTest {
|
|||||||
mCm.registerNetworkCallback(cellRequest, cellNetworkCallback);
|
mCm.registerNetworkCallback(cellRequest, cellNetworkCallback);
|
||||||
|
|
||||||
// Test unvalidated networks
|
// Test unvalidated networks
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = registerConnectivityBroadcast(1);
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||||
mCellNetworkAgent.connect(false);
|
mCellNetworkAgent.connect(false);
|
||||||
genericNetworkCallback.expectAvailableCallbacksUnvalidated(mCellNetworkAgent);
|
genericNetworkCallback.expectAvailableCallbacksUnvalidated(mCellNetworkAgent);
|
||||||
cellNetworkCallback.expectAvailableCallbacksUnvalidated(mCellNetworkAgent);
|
cellNetworkCallback.expectAvailableCallbacksUnvalidated(mCellNetworkAgent);
|
||||||
assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
assertNoCallbacks(genericNetworkCallback, wifiNetworkCallback, cellNetworkCallback);
|
assertNoCallbacks(genericNetworkCallback, wifiNetworkCallback, cellNetworkCallback);
|
||||||
|
|
||||||
// This should not trigger spurious onAvailable() callbacks, b/21762680.
|
// This should not trigger spurious onAvailable() callbacks, b/21762680.
|
||||||
@@ -1918,28 +1944,28 @@ public class ConnectivityServiceTest {
|
|||||||
assertNoCallbacks(genericNetworkCallback, wifiNetworkCallback, cellNetworkCallback);
|
assertNoCallbacks(genericNetworkCallback, wifiNetworkCallback, cellNetworkCallback);
|
||||||
assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
||||||
|
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
mWiFiNetworkAgent.connect(false);
|
mWiFiNetworkAgent.connect(false);
|
||||||
genericNetworkCallback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
|
genericNetworkCallback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
|
||||||
wifiNetworkCallback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
|
wifiNetworkCallback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
|
||||||
assertEquals(mWiFiNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
assertEquals(mWiFiNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
assertNoCallbacks(genericNetworkCallback, wifiNetworkCallback, cellNetworkCallback);
|
assertNoCallbacks(genericNetworkCallback, wifiNetworkCallback, cellNetworkCallback);
|
||||||
|
|
||||||
cv = registerConnectivityBroadcast(2);
|
b = registerConnectivityBroadcast(2);
|
||||||
mWiFiNetworkAgent.disconnect();
|
mWiFiNetworkAgent.disconnect();
|
||||||
genericNetworkCallback.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent);
|
genericNetworkCallback.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent);
|
||||||
wifiNetworkCallback.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent);
|
wifiNetworkCallback.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent);
|
||||||
cellNetworkCallback.assertNoCallback();
|
cellNetworkCallback.assertNoCallback();
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
assertNoCallbacks(genericNetworkCallback, wifiNetworkCallback, cellNetworkCallback);
|
assertNoCallbacks(genericNetworkCallback, wifiNetworkCallback, cellNetworkCallback);
|
||||||
|
|
||||||
cv = registerConnectivityBroadcast(1);
|
b = registerConnectivityBroadcast(1);
|
||||||
mCellNetworkAgent.disconnect();
|
mCellNetworkAgent.disconnect();
|
||||||
genericNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
|
genericNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
|
||||||
cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
|
cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
assertNoCallbacks(genericNetworkCallback, wifiNetworkCallback, cellNetworkCallback);
|
assertNoCallbacks(genericNetworkCallback, wifiNetworkCallback, cellNetworkCallback);
|
||||||
|
|
||||||
// Test validated networks
|
// Test validated networks
|
||||||
@@ -2660,9 +2686,9 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
// Test bringing up validated WiFi.
|
// Test bringing up validated WiFi.
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
final ConditionVariable cv = registerConnectivityBroadcast(1);
|
final ExpectedBroadcast b = expectConnectivityAction(TYPE_WIFI, DetailedState.CONNECTED);
|
||||||
mWiFiNetworkAgent.connect(true);
|
mWiFiNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
|
|
||||||
// Register MMS NetworkRequest
|
// Register MMS NetworkRequest
|
||||||
@@ -2688,9 +2714,9 @@ public class ConnectivityServiceTest {
|
|||||||
public void testMMSonCell() throws Exception {
|
public void testMMSonCell() throws Exception {
|
||||||
// Test bringing up cellular without MMS
|
// Test bringing up cellular without MMS
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = expectConnectivityAction(TYPE_MOBILE, DetailedState.CONNECTED);
|
||||||
mCellNetworkAgent.connect(false);
|
mCellNetworkAgent.connect(false);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
verifyActiveNetwork(TRANSPORT_CELLULAR);
|
||||||
|
|
||||||
// Register MMS NetworkRequest
|
// Register MMS NetworkRequest
|
||||||
@@ -4168,9 +4194,9 @@ public class ConnectivityServiceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = expectConnectivityAction(TYPE_WIFI, DetailedState.CONNECTED);
|
||||||
mWiFiNetworkAgent.connect(true);
|
mWiFiNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verifyActiveNetwork(TRANSPORT_WIFI);
|
verifyActiveNetwork(TRANSPORT_WIFI);
|
||||||
mWiFiNetworkAgent.sendLinkProperties(lp);
|
mWiFiNetworkAgent.sendLinkProperties(lp);
|
||||||
waitForIdle();
|
waitForIdle();
|
||||||
@@ -4726,10 +4752,10 @@ public class ConnectivityServiceTest {
|
|||||||
assertNotPinnedToWifi();
|
assertNotPinnedToWifi();
|
||||||
|
|
||||||
// Disconnect cell and wifi.
|
// Disconnect cell and wifi.
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(3); // cell down, wifi up, wifi down.
|
ExpectedBroadcast b = registerConnectivityBroadcast(3); // cell down, wifi up, wifi down.
|
||||||
mCellNetworkAgent.disconnect();
|
mCellNetworkAgent.disconnect();
|
||||||
mWiFiNetworkAgent.disconnect();
|
mWiFiNetworkAgent.disconnect();
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
|
|
||||||
// Pinning takes effect even if the pinned network is the default when the pin is set...
|
// Pinning takes effect even if the pinned network is the default when the pin is set...
|
||||||
TestNetworkPinner.pin(mServiceContext, wifiRequest);
|
TestNetworkPinner.pin(mServiceContext, wifiRequest);
|
||||||
@@ -4739,10 +4765,10 @@ public class ConnectivityServiceTest {
|
|||||||
assertPinnedToWifiWithWifiDefault();
|
assertPinnedToWifiWithWifiDefault();
|
||||||
|
|
||||||
// ... and is maintained even when that network is no longer the default.
|
// ... and is maintained even when that network is no longer the default.
|
||||||
cv = registerConnectivityBroadcast(1);
|
b = registerConnectivityBroadcast(1);
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
mCellNetworkAgent.connect(true);
|
mCellNetworkAgent.connect(true);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
assertPinnedToWifiWithCellDefault();
|
assertPinnedToWifiWithCellDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4842,7 +4868,7 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNetworkInfoOfTypeNone() throws Exception {
|
public void testNetworkInfoOfTypeNone() throws Exception {
|
||||||
ConditionVariable broadcastCV = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = registerConnectivityBroadcast(1);
|
||||||
|
|
||||||
verifyNoNetwork();
|
verifyNoNetwork();
|
||||||
TestNetworkAgentWrapper wifiAware = new TestNetworkAgentWrapper(TRANSPORT_WIFI_AWARE);
|
TestNetworkAgentWrapper wifiAware = new TestNetworkAgentWrapper(TRANSPORT_WIFI_AWARE);
|
||||||
@@ -4875,9 +4901,7 @@ public class ConnectivityServiceTest {
|
|||||||
mCm.unregisterNetworkCallback(callback);
|
mCm.unregisterNetworkCallback(callback);
|
||||||
|
|
||||||
verifyNoNetwork();
|
verifyNoNetwork();
|
||||||
if (broadcastCV.block(10)) {
|
b.expectNoBroadcast(10);
|
||||||
fail("expected no broadcast, but got CONNECTIVITY_ACTION broadcast");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -7114,11 +7138,11 @@ public class ConnectivityServiceTest {
|
|||||||
// prefix discovery is never started.
|
// prefix discovery is never started.
|
||||||
LinkProperties lp = new LinkProperties(baseLp);
|
LinkProperties lp = new LinkProperties(baseLp);
|
||||||
lp.setNat64Prefix(pref64FromRa);
|
lp.setNat64Prefix(pref64FromRa);
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI, lp);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI, lp);
|
||||||
mCellNetworkAgent.connect(false);
|
mWiFiNetworkAgent.connect(false);
|
||||||
final Network network = mCellNetworkAgent.getNetwork();
|
final Network network = mWiFiNetworkAgent.getNetwork();
|
||||||
int netId = network.getNetId();
|
int netId = network.getNetId();
|
||||||
callback.expectAvailableCallbacksUnvalidated(mCellNetworkAgent);
|
callback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
|
||||||
inOrder.verify(mMockNetd).clatdStart(iface, pref64FromRa.toString());
|
inOrder.verify(mMockNetd).clatdStart(iface, pref64FromRa.toString());
|
||||||
inOrder.verify(mMockDnsResolver).setPrefix64(netId, pref64FromRa.toString());
|
inOrder.verify(mMockDnsResolver).setPrefix64(netId, pref64FromRa.toString());
|
||||||
inOrder.verify(mMockDnsResolver, never()).startPrefix64Discovery(netId);
|
inOrder.verify(mMockDnsResolver, never()).startPrefix64Discovery(netId);
|
||||||
@@ -7127,8 +7151,8 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
// If the RA prefix is withdrawn, clatd is stopped and prefix discovery is started.
|
// If the RA prefix is withdrawn, clatd is stopped and prefix discovery is started.
|
||||||
lp.setNat64Prefix(null);
|
lp.setNat64Prefix(null);
|
||||||
mCellNetworkAgent.sendLinkProperties(lp);
|
mWiFiNetworkAgent.sendLinkProperties(lp);
|
||||||
expectNat64PrefixChange(callback, mCellNetworkAgent, null);
|
expectNat64PrefixChange(callback, mWiFiNetworkAgent, null);
|
||||||
inOrder.verify(mMockNetd).clatdStop(iface);
|
inOrder.verify(mMockNetd).clatdStop(iface);
|
||||||
inOrder.verify(mMockDnsResolver).setPrefix64(netId, "");
|
inOrder.verify(mMockDnsResolver).setPrefix64(netId, "");
|
||||||
inOrder.verify(mMockDnsResolver).startPrefix64Discovery(netId);
|
inOrder.verify(mMockDnsResolver).startPrefix64Discovery(netId);
|
||||||
@@ -7136,8 +7160,8 @@ public class ConnectivityServiceTest {
|
|||||||
// If the RA prefix appears while DNS discovery is in progress, discovery is stopped and
|
// If the RA prefix appears while DNS discovery is in progress, discovery is stopped and
|
||||||
// clatd is started with the prefix from the RA.
|
// clatd is started with the prefix from the RA.
|
||||||
lp.setNat64Prefix(pref64FromRa);
|
lp.setNat64Prefix(pref64FromRa);
|
||||||
mCellNetworkAgent.sendLinkProperties(lp);
|
mWiFiNetworkAgent.sendLinkProperties(lp);
|
||||||
expectNat64PrefixChange(callback, mCellNetworkAgent, pref64FromRa);
|
expectNat64PrefixChange(callback, mWiFiNetworkAgent, pref64FromRa);
|
||||||
inOrder.verify(mMockNetd).clatdStart(iface, pref64FromRa.toString());
|
inOrder.verify(mMockNetd).clatdStart(iface, pref64FromRa.toString());
|
||||||
inOrder.verify(mMockDnsResolver).stopPrefix64Discovery(netId);
|
inOrder.verify(mMockDnsResolver).stopPrefix64Discovery(netId);
|
||||||
inOrder.verify(mMockDnsResolver).setPrefix64(netId, pref64FromRa.toString());
|
inOrder.verify(mMockDnsResolver).setPrefix64(netId, pref64FromRa.toString());
|
||||||
@@ -7145,21 +7169,21 @@ public class ConnectivityServiceTest {
|
|||||||
// Withdraw the RA prefix so we can test the case where an RA prefix appears after DNS
|
// Withdraw the RA prefix so we can test the case where an RA prefix appears after DNS
|
||||||
// discovery has succeeded.
|
// discovery has succeeded.
|
||||||
lp.setNat64Prefix(null);
|
lp.setNat64Prefix(null);
|
||||||
mCellNetworkAgent.sendLinkProperties(lp);
|
mWiFiNetworkAgent.sendLinkProperties(lp);
|
||||||
expectNat64PrefixChange(callback, mCellNetworkAgent, null);
|
expectNat64PrefixChange(callback, mWiFiNetworkAgent, null);
|
||||||
inOrder.verify(mMockNetd).clatdStop(iface);
|
inOrder.verify(mMockNetd).clatdStop(iface);
|
||||||
inOrder.verify(mMockDnsResolver).setPrefix64(netId, "");
|
inOrder.verify(mMockDnsResolver).setPrefix64(netId, "");
|
||||||
inOrder.verify(mMockDnsResolver).startPrefix64Discovery(netId);
|
inOrder.verify(mMockDnsResolver).startPrefix64Discovery(netId);
|
||||||
|
|
||||||
mService.mNetdEventCallback.onNat64PrefixEvent(netId, true /* added */,
|
mService.mNetdEventCallback.onNat64PrefixEvent(netId, true /* added */,
|
||||||
pref64FromDnsStr, 96);
|
pref64FromDnsStr, 96);
|
||||||
expectNat64PrefixChange(callback, mCellNetworkAgent, pref64FromDns);
|
expectNat64PrefixChange(callback, mWiFiNetworkAgent, pref64FromDns);
|
||||||
inOrder.verify(mMockNetd).clatdStart(iface, pref64FromDns.toString());
|
inOrder.verify(mMockNetd).clatdStart(iface, pref64FromDns.toString());
|
||||||
|
|
||||||
// If an RA advertises the same prefix that was discovered by DNS, nothing happens: prefix
|
// If an RA advertises the same prefix that was discovered by DNS, nothing happens: prefix
|
||||||
// discovery is not stopped, and there are no callbacks.
|
// discovery is not stopped, and there are no callbacks.
|
||||||
lp.setNat64Prefix(pref64FromDns);
|
lp.setNat64Prefix(pref64FromDns);
|
||||||
mCellNetworkAgent.sendLinkProperties(lp);
|
mWiFiNetworkAgent.sendLinkProperties(lp);
|
||||||
callback.assertNoCallback();
|
callback.assertNoCallback();
|
||||||
inOrder.verify(mMockNetd, never()).clatdStop(iface);
|
inOrder.verify(mMockNetd, never()).clatdStop(iface);
|
||||||
inOrder.verify(mMockNetd, never()).clatdStart(eq(iface), anyString());
|
inOrder.verify(mMockNetd, never()).clatdStart(eq(iface), anyString());
|
||||||
@@ -7169,7 +7193,7 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
// If the RA is later withdrawn, nothing happens again.
|
// If the RA is later withdrawn, nothing happens again.
|
||||||
lp.setNat64Prefix(null);
|
lp.setNat64Prefix(null);
|
||||||
mCellNetworkAgent.sendLinkProperties(lp);
|
mWiFiNetworkAgent.sendLinkProperties(lp);
|
||||||
callback.assertNoCallback();
|
callback.assertNoCallback();
|
||||||
inOrder.verify(mMockNetd, never()).clatdStop(iface);
|
inOrder.verify(mMockNetd, never()).clatdStop(iface);
|
||||||
inOrder.verify(mMockNetd, never()).clatdStart(eq(iface), anyString());
|
inOrder.verify(mMockNetd, never()).clatdStart(eq(iface), anyString());
|
||||||
@@ -7179,8 +7203,8 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
// If the RA prefix changes, clatd is restarted and prefix discovery is stopped.
|
// If the RA prefix changes, clatd is restarted and prefix discovery is stopped.
|
||||||
lp.setNat64Prefix(pref64FromRa);
|
lp.setNat64Prefix(pref64FromRa);
|
||||||
mCellNetworkAgent.sendLinkProperties(lp);
|
mWiFiNetworkAgent.sendLinkProperties(lp);
|
||||||
expectNat64PrefixChange(callback, mCellNetworkAgent, pref64FromRa);
|
expectNat64PrefixChange(callback, mWiFiNetworkAgent, pref64FromRa);
|
||||||
inOrder.verify(mMockNetd).clatdStop(iface);
|
inOrder.verify(mMockNetd).clatdStop(iface);
|
||||||
inOrder.verify(mMockDnsResolver).stopPrefix64Discovery(netId);
|
inOrder.verify(mMockDnsResolver).stopPrefix64Discovery(netId);
|
||||||
|
|
||||||
@@ -7194,8 +7218,8 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
// If the RA prefix changes, clatd is restarted and prefix discovery is not started.
|
// If the RA prefix changes, clatd is restarted and prefix discovery is not started.
|
||||||
lp.setNat64Prefix(newPref64FromRa);
|
lp.setNat64Prefix(newPref64FromRa);
|
||||||
mCellNetworkAgent.sendLinkProperties(lp);
|
mWiFiNetworkAgent.sendLinkProperties(lp);
|
||||||
expectNat64PrefixChange(callback, mCellNetworkAgent, newPref64FromRa);
|
expectNat64PrefixChange(callback, mWiFiNetworkAgent, newPref64FromRa);
|
||||||
inOrder.verify(mMockNetd).clatdStop(iface);
|
inOrder.verify(mMockNetd).clatdStop(iface);
|
||||||
inOrder.verify(mMockDnsResolver).setPrefix64(netId, "");
|
inOrder.verify(mMockDnsResolver).setPrefix64(netId, "");
|
||||||
inOrder.verify(mMockNetd).clatdStart(iface, newPref64FromRa.toString());
|
inOrder.verify(mMockNetd).clatdStart(iface, newPref64FromRa.toString());
|
||||||
@@ -7205,7 +7229,7 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
// If the RA prefix changes to the same value, nothing happens.
|
// If the RA prefix changes to the same value, nothing happens.
|
||||||
lp.setNat64Prefix(newPref64FromRa);
|
lp.setNat64Prefix(newPref64FromRa);
|
||||||
mCellNetworkAgent.sendLinkProperties(lp);
|
mWiFiNetworkAgent.sendLinkProperties(lp);
|
||||||
callback.assertNoCallback();
|
callback.assertNoCallback();
|
||||||
assertEquals(newPref64FromRa, mCm.getLinkProperties(network).getNat64Prefix());
|
assertEquals(newPref64FromRa, mCm.getLinkProperties(network).getNat64Prefix());
|
||||||
inOrder.verify(mMockNetd, never()).clatdStop(iface);
|
inOrder.verify(mMockNetd, never()).clatdStop(iface);
|
||||||
@@ -7219,19 +7243,19 @@ public class ConnectivityServiceTest {
|
|||||||
// If the same prefix is learned first by DNS and then by RA, and clat is later stopped,
|
// If the same prefix is learned first by DNS and then by RA, and clat is later stopped,
|
||||||
// (e.g., because the network disconnects) setPrefix64(netid, "") is never called.
|
// (e.g., because the network disconnects) setPrefix64(netid, "") is never called.
|
||||||
lp.setNat64Prefix(null);
|
lp.setNat64Prefix(null);
|
||||||
mCellNetworkAgent.sendLinkProperties(lp);
|
mWiFiNetworkAgent.sendLinkProperties(lp);
|
||||||
expectNat64PrefixChange(callback, mCellNetworkAgent, null);
|
expectNat64PrefixChange(callback, mWiFiNetworkAgent, null);
|
||||||
inOrder.verify(mMockNetd).clatdStop(iface);
|
inOrder.verify(mMockNetd).clatdStop(iface);
|
||||||
inOrder.verify(mMockDnsResolver).setPrefix64(netId, "");
|
inOrder.verify(mMockDnsResolver).setPrefix64(netId, "");
|
||||||
inOrder.verify(mMockDnsResolver).startPrefix64Discovery(netId);
|
inOrder.verify(mMockDnsResolver).startPrefix64Discovery(netId);
|
||||||
mService.mNetdEventCallback.onNat64PrefixEvent(netId, true /* added */,
|
mService.mNetdEventCallback.onNat64PrefixEvent(netId, true /* added */,
|
||||||
pref64FromDnsStr, 96);
|
pref64FromDnsStr, 96);
|
||||||
expectNat64PrefixChange(callback, mCellNetworkAgent, pref64FromDns);
|
expectNat64PrefixChange(callback, mWiFiNetworkAgent, pref64FromDns);
|
||||||
inOrder.verify(mMockNetd).clatdStart(iface, pref64FromDns.toString());
|
inOrder.verify(mMockNetd).clatdStart(iface, pref64FromDns.toString());
|
||||||
inOrder.verify(mMockDnsResolver, never()).setPrefix64(eq(netId), any());
|
inOrder.verify(mMockDnsResolver, never()).setPrefix64(eq(netId), any());
|
||||||
|
|
||||||
lp.setNat64Prefix(pref64FromDns);
|
lp.setNat64Prefix(pref64FromDns);
|
||||||
mCellNetworkAgent.sendLinkProperties(lp);
|
mWiFiNetworkAgent.sendLinkProperties(lp);
|
||||||
callback.assertNoCallback();
|
callback.assertNoCallback();
|
||||||
inOrder.verify(mMockNetd, never()).clatdStop(iface);
|
inOrder.verify(mMockNetd, never()).clatdStop(iface);
|
||||||
inOrder.verify(mMockNetd, never()).clatdStart(eq(iface), anyString());
|
inOrder.verify(mMockNetd, never()).clatdStart(eq(iface), anyString());
|
||||||
@@ -7242,10 +7266,10 @@ public class ConnectivityServiceTest {
|
|||||||
// When tearing down a network, clat state is only updated after CALLBACK_LOST is fired, but
|
// When tearing down a network, clat state is only updated after CALLBACK_LOST is fired, but
|
||||||
// before CONNECTIVITY_ACTION is sent. Wait for CONNECTIVITY_ACTION before verifying that
|
// before CONNECTIVITY_ACTION is sent. Wait for CONNECTIVITY_ACTION before verifying that
|
||||||
// clat has been stopped, or the test will be flaky.
|
// clat has been stopped, or the test will be flaky.
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = expectConnectivityAction(TYPE_WIFI, DetailedState.DISCONNECTED);
|
||||||
mCellNetworkAgent.disconnect();
|
mWiFiNetworkAgent.disconnect();
|
||||||
callback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
|
callback.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent);
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
|
|
||||||
inOrder.verify(mMockNetd).clatdStop(iface);
|
inOrder.verify(mMockNetd).clatdStop(iface);
|
||||||
inOrder.verify(mMockDnsResolver).stopPrefix64Discovery(netId);
|
inOrder.verify(mMockDnsResolver).stopPrefix64Discovery(netId);
|
||||||
@@ -7320,10 +7344,10 @@ public class ConnectivityServiceTest {
|
|||||||
.destroyNetworkCache(eq(mCellNetworkAgent.getNetwork().netId));
|
.destroyNetworkCache(eq(mCellNetworkAgent.getNetwork().netId));
|
||||||
|
|
||||||
// Disconnect wifi
|
// Disconnect wifi
|
||||||
ConditionVariable cv = registerConnectivityBroadcast(1);
|
ExpectedBroadcast b = expectConnectivityAction(TYPE_WIFI, DetailedState.DISCONNECTED);
|
||||||
reset(mNetworkManagementService);
|
reset(mNetworkManagementService);
|
||||||
mWiFiNetworkAgent.disconnect();
|
mWiFiNetworkAgent.disconnect();
|
||||||
waitFor(cv);
|
b.expectBroadcast();
|
||||||
verify(mNetworkManagementService, times(1)).removeIdleTimer(eq(WIFI_IFNAME));
|
verify(mNetworkManagementService, times(1)).removeIdleTimer(eq(WIFI_IFNAME));
|
||||||
|
|
||||||
// Clean up
|
// Clean up
|
||||||
|
|||||||
Reference in New Issue
Block a user