Loading tests/net/java/com/android/server/ConnectivityServiceTest.java +25 −16 Original line number Original line Diff line number Diff line Loading @@ -1112,7 +1112,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { // Chosen to be much less than the linger timeout. This ensures that we can distinguish // Chosen to be much less than the linger timeout. This ensures that we can distinguish // between a LOST callback that arrives immediately and a LOST callback that arrives after // between a LOST callback that arrives immediately and a LOST callback that arrives after // the linger timeout. // the linger timeout. private final static int TIMEOUT_MS = 50; private final static int TIMEOUT_MS = 100; private final LinkedBlockingQueue<CallbackInfo> mCallbacks = new LinkedBlockingQueue<>(); private final LinkedBlockingQueue<CallbackInfo> mCallbacks = new LinkedBlockingQueue<>(); Loading Loading @@ -1464,8 +1464,8 @@ public class ConnectivityServiceTest extends AndroidTestCase { // Let linger run its course. // Let linger run its course. callback.assertNoCallback(); callback.assertNoCallback(); callback.expectCallback(CallbackState.LOST, mCellNetworkAgent, final int lingerTimeoutMs = TEST_LINGER_DELAY_MS + TEST_LINGER_DELAY_MS / 4; TEST_LINGER_DELAY_MS /* timeoutMs */); callback.expectCallback(CallbackState.LOST, mCellNetworkAgent, lingerTimeoutMs); // Clean up. // Clean up. mWiFiNetworkAgent.disconnect(); mWiFiNetworkAgent.disconnect(); Loading Loading @@ -1954,7 +1954,9 @@ public class ConnectivityServiceTest extends AndroidTestCase { assertTrue(isForegroundNetwork(mWiFiNetworkAgent)); assertTrue(isForegroundNetwork(mWiFiNetworkAgent)); // When lingering is complete, cell is still there but is now in the background. // When lingering is complete, cell is still there but is now in the background. fgCallback.expectCallback(CallbackState.LOST, mCellNetworkAgent, TEST_LINGER_DELAY_MS); mService.waitForIdle(); int timeoutMs = TEST_LINGER_DELAY_MS + TEST_LINGER_DELAY_MS / 4; fgCallback.expectCallback(CallbackState.LOST, mCellNetworkAgent, timeoutMs); callback.assertNoCallback(); callback.assertNoCallback(); assertFalse(isForegroundNetwork(mCellNetworkAgent)); assertFalse(isForegroundNetwork(mCellNetworkAgent)); assertTrue(isForegroundNetwork(mWiFiNetworkAgent)); assertTrue(isForegroundNetwork(mWiFiNetworkAgent)); Loading @@ -1980,6 +1982,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { // Disconnect wifi and check that cell is foreground again. // Disconnect wifi and check that cell is foreground again. mWiFiNetworkAgent.disconnect(); mWiFiNetworkAgent.disconnect(); mService.waitForIdle(); callback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); callback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); fgCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); fgCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); fgCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent); fgCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent); Loading Loading @@ -2316,14 +2319,14 @@ public class ConnectivityServiceTest extends AndroidTestCase { NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkCapabilities.TRANSPORT_WIFI).build(); NetworkCapabilities.TRANSPORT_WIFI).build(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); mCm.requestNetwork(nr, networkCallback, 10); final int timeoutMs = 150; mCm.requestNetwork(nr, networkCallback, timeoutMs); mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); mWiFiNetworkAgent.connect(false); mWiFiNetworkAgent.connect(false); networkCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent); networkCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent, timeoutMs); // pass timeout and validate that UNAVAILABLE is not called // pass timeout and validate that UNAVAILABLE is not called sleepFor(15); networkCallback.assertNoCallback(); networkCallback.assertNoCallback(); } } Loading @@ -2336,17 +2339,19 @@ public class ConnectivityServiceTest extends AndroidTestCase { NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkCapabilities.TRANSPORT_WIFI).build(); NetworkCapabilities.TRANSPORT_WIFI).build(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); mCm.requestNetwork(nr, networkCallback, 500); final int requestTimeoutMs = 100; mCm.requestNetwork(nr, networkCallback, requestTimeoutMs); mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); mWiFiNetworkAgent.connect(false); mWiFiNetworkAgent.connect(false); networkCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent); final int assertTimeoutMs = 150; networkCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent, assertTimeoutMs); sleepFor(20); sleepFor(20); mWiFiNetworkAgent.disconnect(); mWiFiNetworkAgent.disconnect(); networkCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); networkCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); // pass timeout and validate that UNAVAILABLE is not called // pass timeout and validate that UNAVAILABLE is not called sleepFor(600); sleepFor(100); networkCallback.assertNoCallback(); networkCallback.assertNoCallback(); } } Loading @@ -2360,7 +2365,8 @@ public class ConnectivityServiceTest extends AndroidTestCase { NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkCapabilities.TRANSPORT_WIFI).build(); NetworkCapabilities.TRANSPORT_WIFI).build(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); mCm.requestNetwork(nr, networkCallback, 10); final int timeoutMs = 10; mCm.requestNetwork(nr, networkCallback, timeoutMs); // pass timeout and validate that UNAVAILABLE is called // pass timeout and validate that UNAVAILABLE is called networkCallback.expectCallback(CallbackState.UNAVAILABLE, null); networkCallback.expectCallback(CallbackState.UNAVAILABLE, null); Loading @@ -2380,7 +2386,8 @@ public class ConnectivityServiceTest extends AndroidTestCase { NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkCapabilities.TRANSPORT_WIFI).build(); NetworkCapabilities.TRANSPORT_WIFI).build(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); mCm.requestNetwork(nr, networkCallback, 10); final int timeoutMs = 10; mCm.requestNetwork(nr, networkCallback, timeoutMs); // remove request // remove request mCm.unregisterNetworkCallback(networkCallback); mCm.unregisterNetworkCallback(networkCallback); Loading @@ -2397,13 +2404,13 @@ public class ConnectivityServiceTest extends AndroidTestCase { networkCallback.assertNoCallback(); networkCallback.assertNoCallback(); } } public void assertEventuallyTrue(BooleanSupplier fn, long maxWaitingTimeMs) throws Exception { public void assertEventuallyTrue(BooleanSupplier fn, long maxWaitingTimeMs) { long start = SystemClock.elapsedRealtime(); long start = SystemClock.elapsedRealtime(); while (SystemClock.elapsedRealtime() <= start + maxWaitingTimeMs) { while (SystemClock.elapsedRealtime() <= start + maxWaitingTimeMs) { if (fn.getAsBoolean()) { if (fn.getAsBoolean()) { return; return; } } Thread.sleep(10); sleepFor(15); } } assertTrue(fn.getAsBoolean()); assertTrue(fn.getAsBoolean()); } } Loading Loading @@ -2571,7 +2578,9 @@ public class ConnectivityServiceTest extends AndroidTestCase { callback.expectError(PacketKeepalive.ERROR_INVALID_NETWORK); callback.expectError(PacketKeepalive.ERROR_INVALID_NETWORK); // ... and that stopping it after that has no adverse effects. // ... and that stopping it after that has no adverse effects. assertNull(mCm.getNetworkCapabilities(myNet)); // TODO: investigate assertEventuallyTrue is needed and waitForIdle() is not enough final Network myNetAlias = myNet; assertEventuallyTrue(() -> mCm.getNetworkCapabilities(myNetAlias) == null, 100); ka.stop(); ka.stop(); // Reconnect. // Reconnect. Loading Loading @@ -2815,11 +2824,11 @@ public class ConnectivityServiceTest extends AndroidTestCase { } } /* test utilities */ /* test utilities */ // TODO: eliminate all usages of sleepFor and replace by proper timeouts/waitForIdle. static private void sleepFor(int ms) { static private void sleepFor(int ms) { try { try { Thread.sleep(ms); Thread.sleep(ms); } catch (InterruptedException e) { } catch (InterruptedException e) { } } } } } } Loading
tests/net/java/com/android/server/ConnectivityServiceTest.java +25 −16 Original line number Original line Diff line number Diff line Loading @@ -1112,7 +1112,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { // Chosen to be much less than the linger timeout. This ensures that we can distinguish // Chosen to be much less than the linger timeout. This ensures that we can distinguish // between a LOST callback that arrives immediately and a LOST callback that arrives after // between a LOST callback that arrives immediately and a LOST callback that arrives after // the linger timeout. // the linger timeout. private final static int TIMEOUT_MS = 50; private final static int TIMEOUT_MS = 100; private final LinkedBlockingQueue<CallbackInfo> mCallbacks = new LinkedBlockingQueue<>(); private final LinkedBlockingQueue<CallbackInfo> mCallbacks = new LinkedBlockingQueue<>(); Loading Loading @@ -1464,8 +1464,8 @@ public class ConnectivityServiceTest extends AndroidTestCase { // Let linger run its course. // Let linger run its course. callback.assertNoCallback(); callback.assertNoCallback(); callback.expectCallback(CallbackState.LOST, mCellNetworkAgent, final int lingerTimeoutMs = TEST_LINGER_DELAY_MS + TEST_LINGER_DELAY_MS / 4; TEST_LINGER_DELAY_MS /* timeoutMs */); callback.expectCallback(CallbackState.LOST, mCellNetworkAgent, lingerTimeoutMs); // Clean up. // Clean up. mWiFiNetworkAgent.disconnect(); mWiFiNetworkAgent.disconnect(); Loading Loading @@ -1954,7 +1954,9 @@ public class ConnectivityServiceTest extends AndroidTestCase { assertTrue(isForegroundNetwork(mWiFiNetworkAgent)); assertTrue(isForegroundNetwork(mWiFiNetworkAgent)); // When lingering is complete, cell is still there but is now in the background. // When lingering is complete, cell is still there but is now in the background. fgCallback.expectCallback(CallbackState.LOST, mCellNetworkAgent, TEST_LINGER_DELAY_MS); mService.waitForIdle(); int timeoutMs = TEST_LINGER_DELAY_MS + TEST_LINGER_DELAY_MS / 4; fgCallback.expectCallback(CallbackState.LOST, mCellNetworkAgent, timeoutMs); callback.assertNoCallback(); callback.assertNoCallback(); assertFalse(isForegroundNetwork(mCellNetworkAgent)); assertFalse(isForegroundNetwork(mCellNetworkAgent)); assertTrue(isForegroundNetwork(mWiFiNetworkAgent)); assertTrue(isForegroundNetwork(mWiFiNetworkAgent)); Loading @@ -1980,6 +1982,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { // Disconnect wifi and check that cell is foreground again. // Disconnect wifi and check that cell is foreground again. mWiFiNetworkAgent.disconnect(); mWiFiNetworkAgent.disconnect(); mService.waitForIdle(); callback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); callback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); fgCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); fgCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); fgCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent); fgCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent); Loading Loading @@ -2316,14 +2319,14 @@ public class ConnectivityServiceTest extends AndroidTestCase { NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkCapabilities.TRANSPORT_WIFI).build(); NetworkCapabilities.TRANSPORT_WIFI).build(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); mCm.requestNetwork(nr, networkCallback, 10); final int timeoutMs = 150; mCm.requestNetwork(nr, networkCallback, timeoutMs); mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); mWiFiNetworkAgent.connect(false); mWiFiNetworkAgent.connect(false); networkCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent); networkCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent, timeoutMs); // pass timeout and validate that UNAVAILABLE is not called // pass timeout and validate that UNAVAILABLE is not called sleepFor(15); networkCallback.assertNoCallback(); networkCallback.assertNoCallback(); } } Loading @@ -2336,17 +2339,19 @@ public class ConnectivityServiceTest extends AndroidTestCase { NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkCapabilities.TRANSPORT_WIFI).build(); NetworkCapabilities.TRANSPORT_WIFI).build(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); mCm.requestNetwork(nr, networkCallback, 500); final int requestTimeoutMs = 100; mCm.requestNetwork(nr, networkCallback, requestTimeoutMs); mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); mWiFiNetworkAgent.connect(false); mWiFiNetworkAgent.connect(false); networkCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent); final int assertTimeoutMs = 150; networkCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent, assertTimeoutMs); sleepFor(20); sleepFor(20); mWiFiNetworkAgent.disconnect(); mWiFiNetworkAgent.disconnect(); networkCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); networkCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); // pass timeout and validate that UNAVAILABLE is not called // pass timeout and validate that UNAVAILABLE is not called sleepFor(600); sleepFor(100); networkCallback.assertNoCallback(); networkCallback.assertNoCallback(); } } Loading @@ -2360,7 +2365,8 @@ public class ConnectivityServiceTest extends AndroidTestCase { NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkCapabilities.TRANSPORT_WIFI).build(); NetworkCapabilities.TRANSPORT_WIFI).build(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); mCm.requestNetwork(nr, networkCallback, 10); final int timeoutMs = 10; mCm.requestNetwork(nr, networkCallback, timeoutMs); // pass timeout and validate that UNAVAILABLE is called // pass timeout and validate that UNAVAILABLE is called networkCallback.expectCallback(CallbackState.UNAVAILABLE, null); networkCallback.expectCallback(CallbackState.UNAVAILABLE, null); Loading @@ -2380,7 +2386,8 @@ public class ConnectivityServiceTest extends AndroidTestCase { NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkRequest nr = new NetworkRequest.Builder().addTransportType( NetworkCapabilities.TRANSPORT_WIFI).build(); NetworkCapabilities.TRANSPORT_WIFI).build(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); final TestNetworkCallback networkCallback = new TestNetworkCallback(); mCm.requestNetwork(nr, networkCallback, 10); final int timeoutMs = 10; mCm.requestNetwork(nr, networkCallback, timeoutMs); // remove request // remove request mCm.unregisterNetworkCallback(networkCallback); mCm.unregisterNetworkCallback(networkCallback); Loading @@ -2397,13 +2404,13 @@ public class ConnectivityServiceTest extends AndroidTestCase { networkCallback.assertNoCallback(); networkCallback.assertNoCallback(); } } public void assertEventuallyTrue(BooleanSupplier fn, long maxWaitingTimeMs) throws Exception { public void assertEventuallyTrue(BooleanSupplier fn, long maxWaitingTimeMs) { long start = SystemClock.elapsedRealtime(); long start = SystemClock.elapsedRealtime(); while (SystemClock.elapsedRealtime() <= start + maxWaitingTimeMs) { while (SystemClock.elapsedRealtime() <= start + maxWaitingTimeMs) { if (fn.getAsBoolean()) { if (fn.getAsBoolean()) { return; return; } } Thread.sleep(10); sleepFor(15); } } assertTrue(fn.getAsBoolean()); assertTrue(fn.getAsBoolean()); } } Loading Loading @@ -2571,7 +2578,9 @@ public class ConnectivityServiceTest extends AndroidTestCase { callback.expectError(PacketKeepalive.ERROR_INVALID_NETWORK); callback.expectError(PacketKeepalive.ERROR_INVALID_NETWORK); // ... and that stopping it after that has no adverse effects. // ... and that stopping it after that has no adverse effects. assertNull(mCm.getNetworkCapabilities(myNet)); // TODO: investigate assertEventuallyTrue is needed and waitForIdle() is not enough final Network myNetAlias = myNet; assertEventuallyTrue(() -> mCm.getNetworkCapabilities(myNetAlias) == null, 100); ka.stop(); ka.stop(); // Reconnect. // Reconnect. Loading Loading @@ -2815,11 +2824,11 @@ public class ConnectivityServiceTest extends AndroidTestCase { } } /* test utilities */ /* test utilities */ // TODO: eliminate all usages of sleepFor and replace by proper timeouts/waitForIdle. static private void sleepFor(int ms) { static private void sleepFor(int ms) { try { try { Thread.sleep(ms); Thread.sleep(ms); } catch (InterruptedException e) { } catch (InterruptedException e) { } } } } } }