Add test coverage for explicitlySelected networks.
Also, make all tests start with mobile data always on disabled. This is because some tests only pass when mobile data always on is disabled. This doesn't cause any problems when running all the tests in the file, because these tests are always run after one or more calls to tearDown, which disables mobile data always on. However, it does cause issues when those tests are run alone. Test: new test passes 50 times in a row Test: ConnectivityServiceTest passes Change-Id: I1eef5d7f5ec5464e0f9a1d7f1130d9ba6dea4557
This commit is contained in:
@@ -337,6 +337,10 @@ public class ConnectivityServiceTest extends AndroidTestCase {
|
||||
mNetworkAgent.sendNetworkScore(mScore);
|
||||
}
|
||||
|
||||
public void explicitlySelected(boolean acceptUnvalidated) {
|
||||
mNetworkAgent.explicitlySelected(acceptUnvalidated);
|
||||
}
|
||||
|
||||
public void addCapability(int capability) {
|
||||
mNetworkCapabilities.addCapability(capability);
|
||||
mNetworkAgent.sendNetworkCapabilities(mNetworkCapabilities);
|
||||
@@ -769,6 +773,7 @@ public class ConnectivityServiceTest extends AndroidTestCase {
|
||||
|
||||
// Ensure that the default setting for Captive Portals is used for most tests
|
||||
setCaptivePortalMode(Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT);
|
||||
setMobileDataAlwaysOn(false);
|
||||
}
|
||||
|
||||
public void tearDown() throws Exception {
|
||||
@@ -1567,13 +1572,104 @@ public class ConnectivityServiceTest extends AndroidTestCase {
|
||||
final int lingerTimeoutMs = TEST_LINGER_DELAY_MS + TEST_LINGER_DELAY_MS / 4;
|
||||
callback.expectCallback(CallbackState.LOST, mCellNetworkAgent, lingerTimeoutMs);
|
||||
|
||||
// Register a TRACK_DEFAULT request and check that it does not affect lingering.
|
||||
TestNetworkCallback trackDefaultCallback = new TestNetworkCallback();
|
||||
mCm.registerDefaultNetworkCallback(trackDefaultCallback);
|
||||
trackDefaultCallback.expectAvailableCallbacks(mWiFiNetworkAgent);
|
||||
mEthernetNetworkAgent = new MockNetworkAgent(TRANSPORT_ETHERNET);
|
||||
mEthernetNetworkAgent.connect(true);
|
||||
callback.expectAvailableCallbacks(mEthernetNetworkAgent);
|
||||
callback.expectCallback(CallbackState.LOSING, mWiFiNetworkAgent);
|
||||
callback.expectCapabilitiesWith(NET_CAPABILITY_VALIDATED, mEthernetNetworkAgent);
|
||||
trackDefaultCallback.expectAvailableAndValidatedCallbacks(mEthernetNetworkAgent);
|
||||
defaultCallback.expectAvailableAndValidatedCallbacks(mEthernetNetworkAgent);
|
||||
|
||||
// Let linger run its course.
|
||||
callback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent, lingerTimeoutMs);
|
||||
|
||||
// Clean up.
|
||||
mWiFiNetworkAgent.disconnect();
|
||||
callback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent);
|
||||
defaultCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent);
|
||||
mEthernetNetworkAgent.disconnect();
|
||||
callback.expectCallback(CallbackState.LOST, mEthernetNetworkAgent);
|
||||
defaultCallback.expectCallback(CallbackState.LOST, mEthernetNetworkAgent);
|
||||
trackDefaultCallback.expectCallback(CallbackState.LOST, mEthernetNetworkAgent);
|
||||
|
||||
mCm.unregisterNetworkCallback(callback);
|
||||
mCm.unregisterNetworkCallback(defaultCallback);
|
||||
mCm.unregisterNetworkCallback(trackDefaultCallback);
|
||||
}
|
||||
|
||||
@SmallTest
|
||||
public void testExplicitlySelected() {
|
||||
NetworkRequest request = new NetworkRequest.Builder()
|
||||
.clearCapabilities().addCapability(NET_CAPABILITY_INTERNET)
|
||||
.build();
|
||||
TestNetworkCallback callback = new TestNetworkCallback();
|
||||
mCm.registerNetworkCallback(request, callback);
|
||||
|
||||
// Bring up validated cell.
|
||||
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
|
||||
mCellNetworkAgent.connect(true);
|
||||
callback.expectAvailableAndValidatedCallbacks(mCellNetworkAgent);
|
||||
|
||||
// Bring up unvalidated wifi with explicitlySelected=true.
|
||||
mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
|
||||
mWiFiNetworkAgent.explicitlySelected(false);
|
||||
mWiFiNetworkAgent.connect(false);
|
||||
callback.expectAvailableCallbacks(mWiFiNetworkAgent);
|
||||
|
||||
// Cell Remains the default.
|
||||
assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
||||
|
||||
// Lower wifi's score to below than cell, and check that it doesn't disconnect because
|
||||
// it's explicitly selected.
|
||||
mWiFiNetworkAgent.adjustScore(-40);
|
||||
mWiFiNetworkAgent.adjustScore(40);
|
||||
callback.assertNoCallback();
|
||||
|
||||
// If the user chooses yes on the "No Internet access, stay connected?" dialog, we switch to
|
||||
// wifi even though it's unvalidated.
|
||||
mCm.setAcceptUnvalidated(mWiFiNetworkAgent.getNetwork(), true, false);
|
||||
callback.expectCallback(CallbackState.LOSING, mCellNetworkAgent);
|
||||
assertEquals(mWiFiNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
||||
|
||||
// Disconnect wifi, and then reconnect, again with explicitlySelected=true.
|
||||
mWiFiNetworkAgent.disconnect();
|
||||
callback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent);
|
||||
mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
|
||||
mWiFiNetworkAgent.explicitlySelected(false);
|
||||
mWiFiNetworkAgent.connect(false);
|
||||
callback.expectAvailableCallbacks(mWiFiNetworkAgent);
|
||||
|
||||
// If the user chooses no on the "No Internet access, stay connected?" dialog, we ask the
|
||||
// network to disconnect.
|
||||
mCm.setAcceptUnvalidated(mWiFiNetworkAgent.getNetwork(), false, false);
|
||||
callback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent);
|
||||
|
||||
// Reconnect, again with explicitlySelected=true, but this time validate.
|
||||
mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
|
||||
mWiFiNetworkAgent.explicitlySelected(false);
|
||||
mWiFiNetworkAgent.connect(true);
|
||||
callback.expectAvailableCallbacks(mWiFiNetworkAgent);
|
||||
callback.expectCallback(CallbackState.LOSING, mCellNetworkAgent);
|
||||
callback.expectCapabilitiesWith(NET_CAPABILITY_VALIDATED, mWiFiNetworkAgent);
|
||||
assertEquals(mWiFiNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
||||
|
||||
// BUG: the network will no longer linger, even though it's validated and outscored.
|
||||
// TODO: fix this.
|
||||
mEthernetNetworkAgent = new MockNetworkAgent(TRANSPORT_ETHERNET);
|
||||
mEthernetNetworkAgent.connect(true);
|
||||
callback.expectAvailableAndValidatedCallbacks(mEthernetNetworkAgent);
|
||||
assertEquals(mEthernetNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
||||
callback.assertNoCallback();
|
||||
|
||||
// Clean up.
|
||||
mWiFiNetworkAgent.disconnect();
|
||||
mCellNetworkAgent.disconnect();
|
||||
mEthernetNetworkAgent.disconnect();
|
||||
|
||||
callback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent);
|
||||
callback.expectCallback(CallbackState.LOST, mCellNetworkAgent);
|
||||
callback.expectCallback(CallbackState.LOST, mEthernetNetworkAgent);
|
||||
}
|
||||
|
||||
private void tryNetworkFactoryRequests(int capability) throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user