Fix flake in testMobileDataAlwaysOn

The internal structure backing getAllNetworks is updated after
invoking lost callbacks, so the test needs to wait for the handler
to be idle before calling getAllNetworks.

Also avoid assertions in finally clauses, as it causes confusing
error messages.

Bug: 185081944
Change-Id: I8ad5ab45a3e65b0031672e6f594b1a6d6ad5abcb
Test: atest ConnectivityServiceTest
This commit is contained in:
Remi NGUYEN VAN
2021-07-05 06:31:01 +00:00
parent 6be4ebcb0a
commit e687d5844e

View File

@@ -1167,20 +1167,14 @@ public class ConnectivityServiceTest {
assertEquals(count, getMyRequestCount()); assertEquals(count, getMyRequestCount());
} }
@Override
public void terminate() {
super.terminate();
// Make sure there are no remaining requests unaccounted for.
HandlerUtils.waitForIdle(mHandlerSendingRequests, TIMEOUT_MS);
assertNull(mRequestHistory.poll(0, r -> true));
}
// Trigger releasing the request as unfulfillable // Trigger releasing the request as unfulfillable
public void triggerUnfulfillable(NetworkRequest r) { public void triggerUnfulfillable(NetworkRequest r) {
super.releaseRequestAsUnfulfillableByAnyFactory(r); super.releaseRequestAsUnfulfillableByAnyFactory(r);
} }
public void assertNoRequestChanged() { public void assertNoRequestChanged() {
// Make sure there are no remaining requests unaccounted for.
HandlerUtils.waitForIdle(mHandlerSendingRequests, TIMEOUT_MS);
assertNull(mRequestHistory.poll(0, r -> true)); assertNull(mRequestHistory.poll(0, r -> true));
} }
} }
@@ -3234,6 +3228,7 @@ public class ConnectivityServiceTest {
assertTrue(testFactory.getMyStartRequested()); assertTrue(testFactory.getMyStartRequested());
testFactory.terminate(); testFactory.terminate();
testFactory.assertNoRequestChanged();
if (networkCallback != null) mCm.unregisterNetworkCallback(networkCallback); if (networkCallback != null) mCm.unregisterNetworkCallback(networkCallback);
handlerThread.quit(); handlerThread.quit();
} }
@@ -3318,6 +3313,7 @@ public class ConnectivityServiceTest {
testFactory.setScoreFilter(42); testFactory.setScoreFilter(42);
testFactory.terminate(); testFactory.terminate();
testFactory.assertNoRequestChanged();
if (i % 2 == 0) { if (i % 2 == 0) {
try { try {
@@ -4619,6 +4615,9 @@ public class ConnectivityServiceTest {
// and the test factory should see it now that it isn't hopelessly outscored. // and the test factory should see it now that it isn't hopelessly outscored.
mCellNetworkAgent.disconnect(); mCellNetworkAgent.disconnect();
cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
// Wait for the network to be removed from internal structures before
// calling synchronous getter
waitForIdle();
assertLength(1, mCm.getAllNetworks()); assertLength(1, mCm.getAllNetworks());
testFactory.expectRequestAdd(); testFactory.expectRequestAdd();
testFactory.assertRequestCountEquals(1); testFactory.assertRequestCountEquals(1);
@@ -4629,6 +4628,7 @@ public class ConnectivityServiceTest {
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR); mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
mCellNetworkAgent.connect(true); mCellNetworkAgent.connect(true);
cellNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); cellNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
waitForIdle();
assertLength(2, mCm.getAllNetworks()); assertLength(2, mCm.getAllNetworks());
testFactory.expectRequestRemove(); testFactory.expectRequestRemove();
testFactory.assertRequestCountEquals(0); testFactory.assertRequestCountEquals(0);
@@ -4640,8 +4640,9 @@ public class ConnectivityServiceTest {
cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent); cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
waitForIdle(); waitForIdle();
assertLength(1, mCm.getAllNetworks()); assertLength(1, mCm.getAllNetworks());
} finally {
testFactory.terminate(); testFactory.terminate();
testFactory.assertNoRequestChanged();
} finally {
mCm.unregisterNetworkCallback(cellNetworkCallback); mCm.unregisterNetworkCallback(cellNetworkCallback);
handlerThread.quit(); handlerThread.quit();
} }