Search in sources :

Example 56 with ConditionVariable

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

the class ConnectivityServiceTest method testUnvalidatedWifiOutscoresUnvalidatedCellular.

@SmallTest
public void testUnvalidatedWifiOutscoresUnvalidatedCellular() throws Exception {
    // Test bringing up unvalidated cellular.
    mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
    ConditionVariable cv = waitForConnectivityBroadcasts(1);
    mCellNetworkAgent.connect(false);
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_CELLULAR);
    // Test bringing up unvalidated WiFi.
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    cv = waitForConnectivityBroadcasts(2);
    mWiFiNetworkAgent.connect(false);
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_WIFI);
    // Test WiFi disconnect.
    cv = waitForConnectivityBroadcasts(2);
    mWiFiNetworkAgent.disconnect();
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_CELLULAR);
    // Test cellular disconnect.
    cv = waitForConnectivityBroadcasts(1);
    mCellNetworkAgent.disconnect();
    waitFor(cv);
    verifyNoNetwork();
}
Also used : ConditionVariable(android.os.ConditionVariable) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 57 with ConditionVariable

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

the class ConnectivityServiceTest method testMMSonCell.

@SmallTest
public void testMMSonCell() throws Exception {
    // Test bringing up cellular without MMS
    mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
    ConditionVariable cv = waitForConnectivityBroadcasts(1);
    mCellNetworkAgent.connect(false);
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_CELLULAR);
    // 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 MMS cellular network
    MockNetworkAgent mmsNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
    mmsNetworkAgent.addCapability(NET_CAPABILITY_MMS);
    mmsNetworkAgent.connectWithoutInternet();
    networkCallback.expectAvailableCallbacks(mmsNetworkAgent);
    verifyActiveNetwork(TRANSPORT_CELLULAR);
    // Test releasing MMS NetworkRequest does not disconnect main cellular NetworkAgent
    cv = mmsNetworkAgent.getDisconnectedCV();
    mCm.unregisterNetworkCallback(networkCallback);
    waitFor(cv);
    verifyActiveNetwork(TRANSPORT_CELLULAR);
}
Also used : ConditionVariable(android.os.ConditionVariable) NetworkRequest(android.net.NetworkRequest) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 58 with ConditionVariable

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

the class ConnectivityServiceTest method testWaitForIdle.

@SmallTest
public void testWaitForIdle() {
    // Causes the test to take about 200ms on bullhead-eng.
    final int attempts = 50;
    // Tests that waitForIdle returns immediately if the service is already idle.
    for (int i = 0; i < attempts; i++) {
        mService.waitForIdle();
    }
    // Bring up a network that we can use to send messages to ConnectivityService.
    ConditionVariable cv = waitForConnectivityBroadcasts(1);
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    mWiFiNetworkAgent.connect(false);
    waitFor(cv);
    Network n = mWiFiNetworkAgent.getNetwork();
    assertNotNull(n);
    // Tests that calling waitForIdle waits for messages to be processed.
    for (int i = 0; i < attempts; i++) {
        mWiFiNetworkAgent.setSignalStrength(i);
        mService.waitForIdle();
        assertEquals(i, mCm.getNetworkCapabilities(n).getSignalStrength());
    }
}
Also used : ConditionVariable(android.os.ConditionVariable) Network(android.net.Network) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 59 with ConditionVariable

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

the class ConnectivityServiceTest method verifyThatNotWaitingForIdleCausesRaceConditions.

// This test has an inherent race condition in it, and cannot be enabled for continuous testing
// or presubmit tests. It is kept for manual runs and documentation purposes.
public void verifyThatNotWaitingForIdleCausesRaceConditions() {
    // Bring up a network that we can use to send messages to ConnectivityService.
    ConditionVariable cv = waitForConnectivityBroadcasts(1);
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    mWiFiNetworkAgent.connect(false);
    waitFor(cv);
    Network n = mWiFiNetworkAgent.getNetwork();
    assertNotNull(n);
    // Ensure that not calling waitForIdle causes a race condition.
    // Causes the test to take about 200ms on bullhead-eng.
    final int attempts = 50;
    for (int i = 0; i < attempts; i++) {
        mWiFiNetworkAgent.setSignalStrength(i);
        if (i != mCm.getNetworkCapabilities(n).getSignalStrength()) {
            // We hit a race condition, as expected. Pass the test.
            return;
        }
    }
    // No race? There is a bug in this test.
    fail("expected race condition at least once in " + attempts + " attempts");
}
Also used : ConditionVariable(android.os.ConditionVariable) Network(android.net.Network)

Example 60 with ConditionVariable

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

the class ConnectivityServiceTest method tryNetworkFactoryRequests.

private void tryNetworkFactoryRequests(int capability) throws Exception {
    // Verify NOT_RESTRICTED is set appropriately
    final NetworkCapabilities nc = new NetworkRequest.Builder().addCapability(capability).build().networkCapabilities;
    if (capability == NET_CAPABILITY_CBS || capability == NET_CAPABILITY_DUN || capability == NET_CAPABILITY_EIMS || capability == NET_CAPABILITY_FOTA || capability == NET_CAPABILITY_IA || capability == NET_CAPABILITY_IMS || capability == NET_CAPABILITY_RCS || capability == NET_CAPABILITY_XCAP) {
        assertFalse(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
    } else {
        assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
    }
    NetworkCapabilities filter = new NetworkCapabilities();
    filter.addCapability(capability);
    final HandlerThread handlerThread = new HandlerThread("testNetworkFactoryRequests");
    handlerThread.start();
    final MockNetworkFactory testFactory = new MockNetworkFactory(handlerThread.getLooper(), mServiceContext, "testFactory", filter);
    testFactory.setScoreFilter(40);
    ConditionVariable cv = testFactory.getNetworkStartedCV();
    testFactory.expectAddRequests(1);
    testFactory.register();
    testFactory.waitForNetworkRequests(1);
    int expectedRequestCount = 1;
    NetworkCallback networkCallback = null;
    // add one.
    if (capability != NET_CAPABILITY_INTERNET) {
        assertFalse(testFactory.getMyStartRequested());
        NetworkRequest request = new NetworkRequest.Builder().addCapability(capability).build();
        networkCallback = new NetworkCallback();
        testFactory.expectAddRequests(1);
        mCm.requestNetwork(request, networkCallback);
        expectedRequestCount++;
        testFactory.waitForNetworkRequests(expectedRequestCount);
    }
    waitFor(cv);
    assertEquals(expectedRequestCount, testFactory.getMyRequestCount());
    assertTrue(testFactory.getMyStartRequested());
    // Now bring in a higher scored network.
    MockNetworkAgent testAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
    // Rather than create a validated network which complicates things by registering it's
    // own NetworkRequest during startup, just bump up the score to cancel out the
    // unvalidated penalty.
    testAgent.adjustScore(40);
    cv = testFactory.getNetworkStoppedCV();
    // When testAgent connects, ConnectivityService will re-send us all current requests with
    // the new score. There are expectedRequestCount such requests, and we must wait for all of
    // them.
    testFactory.expectAddRequests(expectedRequestCount);
    testAgent.connect(false);
    testAgent.addCapability(capability);
    waitFor(cv);
    testFactory.waitForNetworkRequests(expectedRequestCount);
    assertFalse(testFactory.getMyStartRequested());
    // Bring in a bunch of requests.
    testFactory.expectAddRequests(10);
    assertEquals(expectedRequestCount, testFactory.getMyRequestCount());
    ConnectivityManager.NetworkCallback[] networkCallbacks = new ConnectivityManager.NetworkCallback[10];
    for (int i = 0; i < networkCallbacks.length; i++) {
        networkCallbacks[i] = new ConnectivityManager.NetworkCallback();
        NetworkRequest.Builder builder = new NetworkRequest.Builder();
        builder.addCapability(capability);
        mCm.requestNetwork(builder.build(), networkCallbacks[i]);
    }
    testFactory.waitForNetworkRequests(10 + expectedRequestCount);
    assertFalse(testFactory.getMyStartRequested());
    // Remove the requests.
    testFactory.expectRemoveRequests(10);
    for (int i = 0; i < networkCallbacks.length; i++) {
        mCm.unregisterNetworkCallback(networkCallbacks[i]);
    }
    testFactory.waitForNetworkRequests(expectedRequestCount);
    assertFalse(testFactory.getMyStartRequested());
    // Drop the higher scored network.
    cv = testFactory.getNetworkStartedCV();
    testAgent.disconnect();
    waitFor(cv);
    assertEquals(expectedRequestCount, testFactory.getMyRequestCount());
    assertTrue(testFactory.getMyStartRequested());
    testFactory.unregister();
    if (networkCallback != null)
        mCm.unregisterNetworkCallback(networkCallback);
    handlerThread.quit();
}
Also used : ConnectivityManager(android.net.ConnectivityManager) NetworkRequest(android.net.NetworkRequest) NetworkCallback(android.net.ConnectivityManager.NetworkCallback) NetworkCapabilities(android.net.NetworkCapabilities) NetworkCallback(android.net.ConnectivityManager.NetworkCallback) ConditionVariable(android.os.ConditionVariable) HandlerThread(android.os.HandlerThread)

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