Merge "Cleanup TestableNetworkCallback#assertNoCallback"

This commit is contained in:
Treehugger Robot
2023-01-13 07:41:06 +00:00
committed by Gerrit Code Review
3 changed files with 36 additions and 30 deletions

View File

@@ -2391,7 +2391,7 @@ public class ConnectivityManagerTest {
getHistory().add(new CallbackEntry.BlockedStatusInt(network, blockedReasons)); getHistory().add(new CallbackEntry.BlockedStatusInt(network, blockedReasons));
} }
private void assertNoBlockedStatusCallback() { private void assertNoBlockedStatusCallback() {
super.assertNoCallbackThat(NO_CALLBACK_TIMEOUT_MS, super.assertNoCallback(NO_CALLBACK_TIMEOUT_MS,
c -> c instanceof CallbackEntry.BlockedStatus); c -> c instanceof CallbackEntry.BlockedStatus);
} }
} }
@@ -2979,7 +2979,7 @@ public class ConnectivityManagerTest {
defaultCb.eventuallyExpect(CallbackEntry.AVAILABLE, NETWORK_CALLBACK_TIMEOUT_MS, defaultCb.eventuallyExpect(CallbackEntry.AVAILABLE, NETWORK_CALLBACK_TIMEOUT_MS,
entry -> cellNetwork.equals(entry.getNetwork())); entry -> cellNetwork.equals(entry.getNetwork()));
// The network should not validate again. // The network should not validate again.
wifiCb.assertNoCallbackThat(NO_CALLBACK_TIMEOUT_MS, c -> isValidatedCaps(c)); wifiCb.assertNoCallback(NO_CALLBACK_TIMEOUT_MS, c -> isValidatedCaps(c));
} finally { } finally {
resetAvoidBadWifi(previousAvoidBadWifi); resetAvoidBadWifi(previousAvoidBadWifi);
mHttpServer.stop(); mHttpServer.stop();
@@ -3151,7 +3151,7 @@ public class ConnectivityManagerTest {
*/ */
private void assertNoCallbackExceptCapOrLpChange( private void assertNoCallbackExceptCapOrLpChange(
@NonNull final TestableNetworkCallback cb) { @NonNull final TestableNetworkCallback cb) {
cb.assertNoCallbackThat(NO_CALLBACK_TIMEOUT_MS, cb.assertNoCallback(NO_CALLBACK_TIMEOUT_MS,
c -> !(c instanceof CallbackEntry.CapabilitiesChanged c -> !(c instanceof CallbackEntry.CapabilitiesChanged
|| c instanceof CallbackEntry.LinkPropertiesChanged)); || c instanceof CallbackEntry.LinkPropertiesChanged));
} }

View File

@@ -57,8 +57,8 @@ import android.os.Build
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.os.OutcomeReceiver import android.os.OutcomeReceiver
import android.os.SystemProperties
import android.os.Process import android.os.Process
import android.os.SystemProperties
import android.platform.test.annotations.AppModeFull import android.platform.test.annotations.AppModeFull
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import com.android.net.module.util.ArrayTrackRecord import com.android.net.module.util.ArrayTrackRecord
@@ -77,16 +77,10 @@ import com.android.testutils.TestableNetworkCallback
import com.android.testutils.assertThrows import com.android.testutils.assertThrows
import com.android.testutils.runAsShell import com.android.testutils.runAsShell
import com.android.testutils.waitForIdle import com.android.testutils.waitForIdle
import org.junit.After
import org.junit.Assume.assumeFalse
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import java.io.IOException import java.io.IOException
import java.net.Inet6Address import java.net.Inet6Address
import java.util.Random
import java.net.Socket import java.net.Socket
import java.util.Random
import java.util.concurrent.CompletableFuture import java.util.concurrent.CompletableFuture
import java.util.concurrent.ExecutionException import java.util.concurrent.ExecutionException
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@@ -99,6 +93,12 @@ import kotlin.test.assertNotNull
import kotlin.test.assertNull import kotlin.test.assertNull
import kotlin.test.assertTrue import kotlin.test.assertTrue
import kotlin.test.fail import kotlin.test.fail
import org.junit.After
import org.junit.Assume.assumeFalse
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
private const val TAG = "EthernetManagerTest" private const val TAG = "EthernetManagerTest"
// This timeout does not affect the test duration for passing tests. It needs to be long enough to // This timeout does not affect the test duration for passing tests. It needs to be long enough to
@@ -530,12 +530,10 @@ class EthernetManagerTest {
eventuallyExpect(Lost::class) { n?.equals(it.network) ?: true } eventuallyExpect(Lost::class) { n?.equals(it.network) ?: true }
private fun TestableNetworkCallback.assertNeverLost(n: Network? = null) = private fun TestableNetworkCallback.assertNeverLost(n: Network? = null) =
assertNoCallbackThat() { assertNoCallback { it is Lost && (n?.equals(it.network) ?: true) }
it is Lost && (n?.equals(it.network) ?: true)
}
private fun TestableNetworkCallback.assertNeverAvailable(n: Network? = null) = private fun TestableNetworkCallback.assertNeverAvailable(n: Network? = null) =
assertNoCallbackThat { it is Available && (n?.equals(it.network) ?: true) } assertNoCallback { it is Available && (n?.equals(it.network) ?: true) }
private fun TestableNetworkCallback.expectCapabilitiesWithInterfaceName(name: String) = private fun TestableNetworkCallback.expectCapabilitiesWithInterfaceName(name: String) =
expect<CapabilitiesChanged> { it.caps.networkSpecifier == EthernetNetworkSpecifier(name) } expect<CapabilitiesChanged> { it.caps.networkSpecifier == EthernetNetworkSpecifier(name) }

View File

@@ -2806,7 +2806,8 @@ public class ConnectivityServiceTest {
// for any other request. // for any other request.
generalCb.expectLosing(net2); generalCb.expectLosing(net2);
net2.assertNotDisconnected(TEST_CALLBACK_TIMEOUT_MS); net2.assertNotDisconnected(TEST_CALLBACK_TIMEOUT_MS);
generalCb.assertNoCallback(); // Timeout 0 because after a while LOST will actually arrive
generalCb.assertNoCallback(0 /* timeoutMs */);
net2.expectDisconnected(UNREASONABLY_LONG_ALARM_WAIT_MS); net2.expectDisconnected(UNREASONABLY_LONG_ALARM_WAIT_MS);
} else { } else {
net2.expectDisconnected(TEST_CALLBACK_TIMEOUT_MS); net2.expectDisconnected(TEST_CALLBACK_TIMEOUT_MS);
@@ -3006,14 +3007,12 @@ public class ConnectivityServiceTest {
*/ */
private class TestNetworkCallback extends TestableNetworkCallback { private class TestNetworkCallback extends TestableNetworkCallback {
TestNetworkCallback() { TestNetworkCallback() {
super(TEST_CALLBACK_TIMEOUT_MS); // In the context of this test, the testable network callbacks should use waitForIdle
} // before calling assertNoCallback in an effort to detect issues where a callback is
// not yet sent but a message currently in the queue of a handler will cause it to
@Override // be sent soon.
public void assertNoCallback() { super(TEST_CALLBACK_TIMEOUT_MS, TEST_CALLBACK_TIMEOUT_MS,
// TODO: better support this use case in TestableNetworkCallback ConnectivityServiceTest.this::waitForIdle);
waitForIdle();
assertNoCallback(0 /* timeout */);
} }
public CallbackEntry.Losing expectLosing(final HasNetwork n, final long timeoutMs) { public CallbackEntry.Losing expectLosing(final HasNetwork n, final long timeoutMs) {
@@ -3039,9 +3038,15 @@ public class ConnectivityServiceTest {
// Can't be part of TestNetworkCallback because "cannot be declared static; static methods can // Can't be part of TestNetworkCallback because "cannot be declared static; static methods can
// only be declared in a static or top level type". // only be declared in a static or top level type".
static void assertNoCallbacks(final long timeoutMs, TestNetworkCallback ... callbacks) {
for (TestNetworkCallback c : callbacks) {
c.assertNoCallback(timeoutMs);
}
}
static void assertNoCallbacks(TestNetworkCallback ... callbacks) { static void assertNoCallbacks(TestNetworkCallback ... callbacks) {
for (TestNetworkCallback c : callbacks) { for (TestNetworkCallback c : callbacks) {
c.assertNoCallback(); c.assertNoCallback(); // each callback uses its own timeout
} }
} }
@@ -3177,7 +3182,10 @@ public class ConnectivityServiceTest {
wifiNetworkCallback.expectAvailableThenValidatedCallbacks(mWiFiNetworkAgent); wifiNetworkCallback.expectAvailableThenValidatedCallbacks(mWiFiNetworkAgent);
cellNetworkCallback.expectLosing(mCellNetworkAgent); cellNetworkCallback.expectLosing(mCellNetworkAgent);
assertEquals(mWiFiNetworkAgent.getNetwork(), mCm.getActiveNetwork()); assertEquals(mWiFiNetworkAgent.getNetwork(), mCm.getActiveNetwork());
assertNoCallbacks(genericNetworkCallback, wifiNetworkCallback, cellNetworkCallback); // Cell will disconnect after the lingering period. Before that elapses check that
// there have been no callbacks.
assertNoCallbacks(0 /* timeoutMs */,
genericNetworkCallback, wifiNetworkCallback, cellNetworkCallback);
mWiFiNetworkAgent.disconnect(); mWiFiNetworkAgent.disconnect();
genericNetworkCallback.expect(CallbackEntry.LOST, mWiFiNetworkAgent); genericNetworkCallback.expect(CallbackEntry.LOST, mWiFiNetworkAgent);
@@ -3488,7 +3496,7 @@ public class ConnectivityServiceTest {
callback.expectLosing(mCellNetworkAgent); callback.expectLosing(mCellNetworkAgent);
// Let linger run its course. // Let linger run its course.
callback.assertNoCallback(); callback.assertNoCallback(0 /* timeoutMs */);
final int lingerTimeoutMs = mService.mLingerDelayMs + mService.mLingerDelayMs / 4; final int lingerTimeoutMs = mService.mLingerDelayMs + mService.mLingerDelayMs / 4;
callback.expect(CallbackEntry.LOST, mCellNetworkAgent, lingerTimeoutMs); callback.expect(CallbackEntry.LOST, mCellNetworkAgent, lingerTimeoutMs);
@@ -5927,7 +5935,7 @@ public class ConnectivityServiceTest {
.clearCapabilities() .clearCapabilities()
.addTransportType(TRANSPORT_WIFI) .addTransportType(TRANSPORT_WIFI)
.build(); .build();
final TestableNetworkCallback wifiCallback = new TestableNetworkCallback(); final TestNetworkCallback wifiCallback = new TestNetworkCallback();
mCm.registerNetworkCallback(wifiRequest, wifiCallback); mCm.registerNetworkCallback(wifiRequest, wifiCallback);
// Bring up validated cell and unvalidated wifi. // Bring up validated cell and unvalidated wifi.
@@ -10507,7 +10515,7 @@ public class ConnectivityServiceTest {
mCm.unregisterNetworkCallback(networkCallback); mCm.unregisterNetworkCallback(networkCallback);
} }
private void expectNat64PrefixChange(TestableNetworkCallback callback, private void expectNat64PrefixChange(TestNetworkCallback callback,
TestNetworkAgentWrapper agent, IpPrefix prefix) { TestNetworkAgentWrapper agent, IpPrefix prefix) {
callback.expectLinkPropertiesThat(agent, x -> Objects.equals(x.getNat64Prefix(), prefix)); callback.expectLinkPropertiesThat(agent, x -> Objects.equals(x.getNat64Prefix(), prefix));
} }
@@ -16409,7 +16417,7 @@ public class ConnectivityServiceTest {
final NetworkCallback[] callbacks = new NetworkCallback[remainingCount]; final NetworkCallback[] callbacks = new NetworkCallback[remainingCount];
doAsUid(otherAppUid, () -> { doAsUid(otherAppUid, () -> {
for (int i = 0; i < remainingCount; ++i) { for (int i = 0; i < remainingCount; ++i) {
callbacks[i] = new TestableNetworkCallback(); callbacks[i] = new TestNetworkCallback();
mCm.registerDefaultNetworkCallback(callbacks[i]); mCm.registerDefaultNetworkCallback(callbacks[i]);
} }
}); });