Unit tests for avoid bad wifi networks setting. am: 83633c897a am: 26b930e3c7
am: f131f80e0a Change-Id: I1c0f4549545ff9f1836154ef65661395835ad756
This commit is contained in:
@@ -2802,6 +2802,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
showValidationNotification(nai, NotificationType.NO_INTERNET);
|
showValidationNotification(nai, NotificationType.NO_INTERNET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Delete this like updateMobileDataAlwaysOn above.
|
||||||
|
@VisibleForTesting
|
||||||
|
void updateNetworkAvoidBadWifi() {
|
||||||
|
mHandler.sendEmptyMessage(EVENT_CONFIGURE_NETWORK_AVOID_BAD_WIFI);
|
||||||
|
}
|
||||||
|
|
||||||
private void handleNetworkUnvalidated(NetworkAgentInfo nai) {
|
private void handleNetworkUnvalidated(NetworkAgentInfo nai) {
|
||||||
NetworkCapabilities nc = nai.networkCapabilities;
|
NetworkCapabilities nc = nai.networkCapabilities;
|
||||||
if (DBG) log("handleNetworkUnvalidated " + nai.name() + " cap=" + nc);
|
if (DBG) log("handleNetworkUnvalidated " + nai.name() + " cap=" + nc);
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import static android.net.NetworkCapabilities.*;
|
|||||||
|
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
|
import android.app.NotificationManager;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
@@ -137,7 +138,8 @@ public class ConnectivityServiceTest extends AndroidTestCase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getSystemService(String name) {
|
public Object getSystemService(String name) {
|
||||||
if (name == Context.CONNECTIVITY_SERVICE) return mCm;
|
if (Context.CONNECTIVITY_SERVICE.equals(name)) return mCm;
|
||||||
|
if (Context.NOTIFICATION_SERVICE.equals(name)) return mock(NotificationManager.class);
|
||||||
return super.getSystemService(name);
|
return super.getSystemService(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2031,6 +2033,79 @@ public class ConnectivityServiceTest extends AndroidTestCase {
|
|||||||
handlerThread.quit();
|
handlerThread.quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SmallTest
|
||||||
|
public void testAvoidBadWifiSetting() throws Exception {
|
||||||
|
ContentResolver cr = mServiceContext.getContentResolver();
|
||||||
|
|
||||||
|
// File a request for cell to ensure it doesn't go down.
|
||||||
|
final TestNetworkCallback cellNetworkCallback = new TestNetworkCallback();
|
||||||
|
final NetworkRequest cellRequest = new NetworkRequest.Builder()
|
||||||
|
.addTransportType(TRANSPORT_CELLULAR).build();
|
||||||
|
mCm.requestNetwork(cellRequest, cellNetworkCallback);
|
||||||
|
|
||||||
|
TestNetworkCallback defaultCallback = new TestNetworkCallback();
|
||||||
|
mCm.registerDefaultNetworkCallback(defaultCallback);
|
||||||
|
|
||||||
|
NetworkRequest validatedWifiRequest = new NetworkRequest.Builder()
|
||||||
|
.addTransportType(TRANSPORT_WIFI)
|
||||||
|
.addCapability(NET_CAPABILITY_VALIDATED)
|
||||||
|
.build();
|
||||||
|
TestNetworkCallback validatedWifiCallback = new TestNetworkCallback();
|
||||||
|
mCm.registerNetworkCallback(validatedWifiRequest, validatedWifiCallback);
|
||||||
|
|
||||||
|
// Takes effect on every rematch.
|
||||||
|
Settings.Global.putInt(cr, Settings.Global.NETWORK_AVOID_BAD_WIFI, 0);
|
||||||
|
|
||||||
|
// Bring up validated cell.
|
||||||
|
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
|
||||||
|
mCellNetworkAgent.connect(true);
|
||||||
|
cellNetworkCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent);
|
||||||
|
defaultCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent);
|
||||||
|
Network cellNetwork = mCellNetworkAgent.getNetwork();
|
||||||
|
|
||||||
|
// Bring up validated wifi.
|
||||||
|
mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
|
||||||
|
mWiFiNetworkAgent.connect(true);
|
||||||
|
defaultCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent);
|
||||||
|
validatedWifiCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent);
|
||||||
|
Network wifiNetwork = mWiFiNetworkAgent.getNetwork();
|
||||||
|
|
||||||
|
// Fail validation on wifi.
|
||||||
|
mWiFiNetworkAgent.getWrappedNetworkMonitor().gen204ProbeResult = 599;
|
||||||
|
mCm.reportNetworkConnectivity(wifiNetwork, false);
|
||||||
|
validatedWifiCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent);
|
||||||
|
|
||||||
|
// Because avoid bad wifi is off, we don't switch to cellular.
|
||||||
|
defaultCallback.assertNoCallback();
|
||||||
|
assertFalse(mCm.getNetworkCapabilities(wifiNetwork).hasCapability(
|
||||||
|
NET_CAPABILITY_VALIDATED));
|
||||||
|
assertTrue(mCm.getNetworkCapabilities(cellNetwork).hasCapability(
|
||||||
|
NET_CAPABILITY_VALIDATED));
|
||||||
|
assertEquals(mCm.getActiveNetwork(), wifiNetwork);
|
||||||
|
|
||||||
|
// Simulate the user selecting "switch" on the dialog.
|
||||||
|
Settings.Global.putInt(cr, Settings.Global.NETWORK_AVOID_BAD_WIFI, 1);
|
||||||
|
mService.updateNetworkAvoidBadWifi();
|
||||||
|
|
||||||
|
// We now switch to cell.
|
||||||
|
defaultCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent);
|
||||||
|
assertFalse(mCm.getNetworkCapabilities(wifiNetwork).hasCapability(
|
||||||
|
NET_CAPABILITY_VALIDATED));
|
||||||
|
assertTrue(mCm.getNetworkCapabilities(cellNetwork).hasCapability(
|
||||||
|
NET_CAPABILITY_VALIDATED));
|
||||||
|
assertEquals(mCm.getActiveNetwork(), cellNetwork);
|
||||||
|
|
||||||
|
// If cell goes down, we switch to wifi.
|
||||||
|
mCellNetworkAgent.disconnect();
|
||||||
|
defaultCallback.expectCallback(CallbackState.LOST, mCellNetworkAgent);
|
||||||
|
defaultCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent);
|
||||||
|
validatedWifiCallback.assertNoCallback();
|
||||||
|
|
||||||
|
mCm.unregisterNetworkCallback(cellNetworkCallback);
|
||||||
|
mCm.unregisterNetworkCallback(validatedWifiCallback);
|
||||||
|
mCm.unregisterNetworkCallback(defaultCallback);
|
||||||
|
}
|
||||||
|
|
||||||
private static class TestKeepaliveCallback extends PacketKeepaliveCallback {
|
private static class TestKeepaliveCallback extends PacketKeepaliveCallback {
|
||||||
|
|
||||||
public static enum CallbackType { ON_STARTED, ON_STOPPED, ON_ERROR };
|
public static enum CallbackType { ON_STARTED, ON_STOPPED, ON_ERROR };
|
||||||
|
|||||||
Reference in New Issue
Block a user