Search in sources :

Example 61 with ConditionVariable

use of android.os.ConditionVariable in project platform_frameworks_base by android.

the class ConnectivityServiceTest method testWiFiFallback.

@SmallTest
public void testWiFiFallback() throws Exception {
    // Test bringing up unvalidated WiFi.
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    ConditionVariable cv = waitForConnectivityBroadcasts(1);
    mWiFiNetworkAgent.connect(false);
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_WIFI);
    // Test bringing up validated cellular.
    mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
    cv = waitForConnectivityBroadcasts(2);
    mCellNetworkAgent.connect(true);
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_CELLULAR);
    // Reevaluate cellular (it'll instantly fail DNS).
    cv = waitForConnectivityBroadcasts(2);
    assertTrue(mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()).hasCapability(NET_CAPABILITY_VALIDATED));
    mCm.reportBadNetwork(mCellNetworkAgent.getNetwork());
    // Should quickly fall back to WiFi.
    waitFor(cv);
    assertFalse(mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()).hasCapability(NET_CAPABILITY_VALIDATED));
    verifyActiveNetwork(TRANSPORT_WIFI);
}
Also used : ConditionVariable(android.os.ConditionVariable) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 62 with ConditionVariable

use of android.os.ConditionVariable in project platform_frameworks_base by android.

the class ConnectivityServiceTest method testCellularFallback.

@SmallTest
public void testCellularFallback() throws Exception {
    // Test bringing up validated cellular.
    mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
    ConditionVariable cv = waitForConnectivityBroadcasts(1);
    mCellNetworkAgent.connect(true);
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_CELLULAR);
    // Test bringing up validated WiFi.
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    cv = waitForConnectivityBroadcasts(2);
    mWiFiNetworkAgent.connect(true);
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_WIFI);
    // Reevaluate WiFi (it'll instantly fail DNS).
    cv = waitForConnectivityBroadcasts(2);
    assertTrue(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(NET_CAPABILITY_VALIDATED));
    mCm.reportBadNetwork(mWiFiNetworkAgent.getNetwork());
    // Should quickly fall back to Cellular.
    waitFor(cv);
    assertFalse(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(NET_CAPABILITY_VALIDATED));
    verifyActiveNetwork(TRANSPORT_CELLULAR);
    // Reevaluate cellular (it'll instantly fail DNS).
    cv = waitForConnectivityBroadcasts(2);
    assertTrue(mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()).hasCapability(NET_CAPABILITY_VALIDATED));
    mCm.reportBadNetwork(mCellNetworkAgent.getNetwork());
    // Should quickly fall back to WiFi.
    waitFor(cv);
    assertFalse(mCm.getNetworkCapabilities(mCellNetworkAgent.getNetwork()).hasCapability(NET_CAPABILITY_VALIDATED));
    assertFalse(mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork()).hasCapability(NET_CAPABILITY_VALIDATED));
    verifyActiveNetwork(TRANSPORT_WIFI);
}
Also used : ConditionVariable(android.os.ConditionVariable) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 63 with ConditionVariable

use of android.os.ConditionVariable in project platform_frameworks_base by android.

the class ConnectivityServiceTest method testNetworkPinner.

@SmallTest
public void testNetworkPinner() {
    NetworkRequest wifiRequest = new NetworkRequest.Builder().addTransportType(TRANSPORT_WIFI).build();
    assertNull(mCm.getBoundNetworkForProcess());
    TestNetworkPinner.pin(mServiceContext, wifiRequest);
    assertNull(mCm.getBoundNetworkForProcess());
    mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
    mCellNetworkAgent.connect(true);
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    mWiFiNetworkAgent.connect(false);
    // When wi-fi connects, expect to be pinned.
    assertTrue(TestNetworkPinner.awaitPin(100));
    assertPinnedToWifiWithCellDefault();
    // Disconnect and expect the pin to drop.
    mWiFiNetworkAgent.disconnect();
    assertTrue(TestNetworkPinner.awaitUnpin(100));
    assertNotPinnedToWifi();
    // Reconnecting does not cause the pin to come back.
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    mWiFiNetworkAgent.connect(false);
    assertFalse(TestNetworkPinner.awaitPin(100));
    assertNotPinnedToWifi();
    // Pinning while connected causes the pin to take effect immediately.
    TestNetworkPinner.pin(mServiceContext, wifiRequest);
    assertTrue(TestNetworkPinner.awaitPin(100));
    assertPinnedToWifiWithCellDefault();
    // Explicitly unpin and expect to use the default network again.
    TestNetworkPinner.unpin();
    assertNotPinnedToWifi();
    // Disconnect cell and wifi.
    // cell down, wifi up, wifi down.
    ConditionVariable cv = waitForConnectivityBroadcasts(3);
    mCellNetworkAgent.disconnect();
    mWiFiNetworkAgent.disconnect();
    waitFor(cv);
    // Pinning takes effect even if the pinned network is the default when the pin is set...
    TestNetworkPinner.pin(mServiceContext, wifiRequest);
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    mWiFiNetworkAgent.connect(false);
    assertTrue(TestNetworkPinner.awaitPin(100));
    assertPinnedToWifiWithWifiDefault();
    // ... and is maintained even when that network is no longer the default.
    cv = waitForConnectivityBroadcasts(1);
    mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    mCellNetworkAgent.connect(true);
    waitFor(cv);
    assertPinnedToWifiWithCellDefault();
}
Also used : ConditionVariable(android.os.ConditionVariable) NetworkRequest(android.net.NetworkRequest) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 64 with ConditionVariable

use of android.os.ConditionVariable in project platform_frameworks_base by android.

the class ConnectivityServiceTest method testLingering.

@SmallTest
public void testLingering() throws Exception {
    verifyNoNetwork();
    mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    assertNull(mCm.getActiveNetworkInfo());
    assertNull(mCm.getActiveNetwork());
    // Test bringing up validated cellular.
    ConditionVariable cv = waitForConnectivityBroadcasts(1);
    mCellNetworkAgent.connect(true);
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_CELLULAR);
    assertEquals(2, mCm.getAllNetworks().length);
    assertTrue(mCm.getAllNetworks()[0].equals(mCm.getActiveNetwork()) || mCm.getAllNetworks()[1].equals(mCm.getActiveNetwork()));
    assertTrue(mCm.getAllNetworks()[0].equals(mWiFiNetworkAgent.getNetwork()) || mCm.getAllNetworks()[1].equals(mWiFiNetworkAgent.getNetwork()));
    // Test bringing up validated WiFi.
    cv = waitForConnectivityBroadcasts(2);
    mWiFiNetworkAgent.connect(true);
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_WIFI);
    assertEquals(2, mCm.getAllNetworks().length);
    assertTrue(mCm.getAllNetworks()[0].equals(mCm.getActiveNetwork()) || mCm.getAllNetworks()[1].equals(mCm.getActiveNetwork()));
    assertTrue(mCm.getAllNetworks()[0].equals(mCellNetworkAgent.getNetwork()) || mCm.getAllNetworks()[1].equals(mCellNetworkAgent.getNetwork()));
    // Test cellular linger timeout.
    waitFor(mCellNetworkAgent.getDisconnectedCV());
    mService.waitForIdle();
    assertEquals(1, mCm.getAllNetworks().length);
    verifyActiveNetwork(TRANSPORT_WIFI);
    assertEquals(1, mCm.getAllNetworks().length);
    assertEquals(mCm.getAllNetworks()[0], mCm.getActiveNetwork());
    // Test WiFi disconnect.
    cv = waitForConnectivityBroadcasts(1);
    mWiFiNetworkAgent.disconnect();
    waitFor(cv);
    verifyNoNetwork();
}
Also used : ConditionVariable(android.os.ConditionVariable) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 65 with ConditionVariable

use of android.os.ConditionVariable in project platform_frameworks_base by android.

the class ConnectivityServiceTest method testMMSonWiFi.

@SmallTest
public void testMMSonWiFi() throws Exception {
    // Test bringing up cellular without MMS NetworkRequest gets reaped
    mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
    mCellNetworkAgent.addCapability(NET_CAPABILITY_MMS);
    ConditionVariable cv = mCellNetworkAgent.getDisconnectedCV();
    mCellNetworkAgent.connectWithoutInternet();
    waitFor(cv);
    mService.waitForIdle();
    assertEquals(0, mCm.getAllNetworks().length);
    verifyNoNetwork();
    // Test bringing up validated WiFi.
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    cv = waitForConnectivityBroadcasts(1);
    mWiFiNetworkAgent.connect(true);
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_WIFI);
    // Register MMS NetworkRequest
    NetworkRequest.Builder builder = new NetworkRequest.Builder();
    builder.addCapability(NetworkCapabilities.NET_CAPABILITY_MMS);
    final TestNetworkCallback networkCallback = new TestNetworkCallback();
    mCm.requestNetwork(builder.build(), networkCallback);
    // Test bringing up unvalidated cellular with MMS
    mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
    mCellNetworkAgent.addCapability(NET_CAPABILITY_MMS);
    mCellNetworkAgent.connectWithoutInternet();
    networkCallback.expectAvailableCallbacks(mCellNetworkAgent);
    verifyActiveNetwork(TRANSPORT_WIFI);
    // Test releasing NetworkRequest disconnects cellular with MMS
    cv = mCellNetworkAgent.getDisconnectedCV();
    mCm.unregisterNetworkCallback(networkCallback);
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_WIFI);
}
Also used : ConditionVariable(android.os.ConditionVariable) NetworkRequest(android.net.NetworkRequest) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Aggregations

ConditionVariable (android.os.ConditionVariable)122 LargeTest (android.test.suitebuilder.annotation.LargeTest)36 NetworkRequest (android.net.NetworkRequest)24 SmallTest (android.test.suitebuilder.annotation.SmallTest)17 Handler (android.os.Handler)16 Messenger (android.os.Messenger)8 Test (org.junit.Test)6 Network (android.net.Network)5 Message (android.os.Message)5 PendingIntent (android.app.PendingIntent)4 BroadcastReceiver (android.content.BroadcastReceiver)4 Context (android.content.Context)4 Intent (android.content.Intent)4 IntentFilter (android.content.IntentFilter)4 ConnectivityManager (android.net.ConnectivityManager)4 NetworkCallback (android.net.ConnectivityManager.NetworkCallback)4 DataUsageRequest (android.net.DataUsageRequest)4 NetworkCapabilities (android.net.NetworkCapabilities)4 NetworkStats (android.net.NetworkStats)4 HandlerThread (android.os.HandlerThread)4