Ensure that NetworkFactory objects cannot be reused.

NetworkFactory is turning into a one-time object that cannot be
re-used. Check for this in ConnectivityService.

Bug: 148635501
Test: test continues to pass
Change-Id: I793436ee0f4b5d778788ad34b8a2575d2ad0ed80
This commit is contained in:
Lorenzo Colitti
2020-03-02 19:46:35 +09:00
parent 449c8fd974
commit 487b677f3a

View File

@@ -2426,7 +2426,7 @@ public class ConnectivityServiceTest {
assertEquals(expectedRequestCount, testFactory.getMyRequestCount()); assertEquals(expectedRequestCount, testFactory.getMyRequestCount());
assertTrue(testFactory.getMyStartRequested()); assertTrue(testFactory.getMyStartRequested());
testFactory.unregister(); testFactory.terminate();
if (networkCallback != null) mCm.unregisterNetworkCallback(networkCallback); if (networkCallback != null) mCm.unregisterNetworkCallback(networkCallback);
handlerThread.quit(); handlerThread.quit();
} }
@@ -2451,6 +2451,38 @@ public class ConnectivityServiceTest {
// Skipping VALIDATED and CAPTIVE_PORTAL as they're disallowed. // Skipping VALIDATED and CAPTIVE_PORTAL as they're disallowed.
} }
@Test
public void testNetworkFactoryUnregister() throws Exception {
final NetworkCapabilities filter = new NetworkCapabilities();
filter.clearAll();
final HandlerThread handlerThread = new HandlerThread("testNetworkFactoryRequests");
handlerThread.start();
// Checks that calling setScoreFilter on a NetworkFactory immediately before closing it
// does not crash.
for (int i = 0; i < 100; i++) {
final MockNetworkFactory testFactory = new MockNetworkFactory(handlerThread.getLooper(),
mServiceContext, "testFactory", filter);
// Register the factory and don't be surprised when the default request arrives.
testFactory.register();
testFactory.expectAddRequestsWithScores(0);
testFactory.waitForNetworkRequests(1);
testFactory.setScoreFilter(42);
testFactory.terminate();
if (i % 2 == 0) {
try {
testFactory.register();
fail("Re-registering terminated NetworkFactory should throw");
} catch (IllegalStateException expected) {
}
}
}
handlerThread.quit();
}
@Test @Test
public void testNoMutableNetworkRequests() throws Exception { public void testNoMutableNetworkRequests() throws Exception {
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, new Intent("a"), 0); PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, new Intent("a"), 0);
@@ -3488,7 +3520,7 @@ public class ConnectivityServiceTest {
cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
assertLength(1, mCm.getAllNetworks()); assertLength(1, mCm.getAllNetworks());
testFactory.unregister(); testFactory.terminate();
mCm.unregisterNetworkCallback(cellNetworkCallback); mCm.unregisterNetworkCallback(cellNetworkCallback);
handlerThread.quit(); handlerThread.quit();
} }
@@ -3828,7 +3860,7 @@ public class ConnectivityServiceTest {
mCm.unregisterNetworkCallback(networkCallback); mCm.unregisterNetworkCallback(networkCallback);
} }
testFactory.unregister(); testFactory.terminate();
handlerThread.quit(); handlerThread.quit();
} }