From 2e3c3b8d89d83b138bd06cc31be3fbd5348398a9 Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Tue, 14 Apr 2020 03:05:52 +0000 Subject: [PATCH] Test sendNetworkScore Test: this Bug: 139268426 Change-Id: Ie46ff2676944e6d6603bbff271fc6dca9935e548 Merged-In: I66cea443f0c6aa9235da577817787d764fbd030b (cherry picked from commit c7091c91558d56632da237cf0a01567fcde3cba2, aosp/1284561) --- .../src/android/net/cts/NetworkAgentTest.kt | 66 ++++++++++++++++++- 1 file changed, 63 insertions(+), 3 deletions(-) diff --git a/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt b/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt index 4de3a086ce..659950a0db 100644 --- a/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt +++ b/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt @@ -37,6 +37,7 @@ import android.net.NetworkCapabilities import android.net.NetworkProvider import android.net.NetworkRequest import android.net.SocketKeepalive +import android.net.StringNetworkSpecifier import android.net.Uri import android.os.Build import android.os.Bundle @@ -59,8 +60,10 @@ import androidx.test.runner.AndroidJUnit4 import com.android.internal.util.AsyncChannel import com.android.testutils.ArrayTrackRecord import com.android.testutils.DevSdkIgnoreRule +import com.android.testutils.RecorderCallback.CallbackEntry.Available import com.android.testutils.RecorderCallback.CallbackEntry.Lost import com.android.testutils.TestableNetworkCallback +import java.util.UUID import org.junit.After import org.junit.Assert.fail import org.junit.Before @@ -197,6 +200,8 @@ class NetworkAgentTest { data class OnValidationStatus(val status: Int, val uri: Uri?) : CallbackEntry() } + fun getName(): String? = (nc.getNetworkSpecifier() as? StringNetworkSpecifier)?.specifier + override fun onBandwidthUpdateRequested() { history.add(OnBandwidthUpdateRequested) } @@ -267,7 +272,7 @@ class NetworkAgentTest { callbacksToCleanUp.add(callback) } - private fun createNetworkAgent(): TestableNetworkAgent { + private fun createNetworkAgent(name: String? = null): TestableNetworkAgent { val nc = NetworkCapabilities().apply { addTransportType(NetworkCapabilities.TRANSPORT_TEST) removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED) @@ -275,6 +280,9 @@ class NetworkAgentTest { addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED) addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING) addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) + if (null != name) { + setNetworkSpecifier(StringNetworkSpecifier(name)) + } } val lp = LinkProperties().apply { addLinkAddress(LinkAddress(LOCAL_IPV4_ADDRESS, 0)) @@ -285,14 +293,15 @@ class NetworkAgentTest { } } - private fun createConnectedNetworkAgent(): Pair { + private fun createConnectedNetworkAgent(name: String? = null): + Pair { val request: NetworkRequest = NetworkRequest.Builder() .clearCapabilities() .addTransportType(NetworkCapabilities.TRANSPORT_TEST) .build() val callback = TestableNetworkCallback(timeoutMs = DEFAULT_TIMEOUT_MS) requestNetwork(request, callback) - val agent = createNetworkAgent() + val agent = createNetworkAgent(name) agent.register() agent.markConnected() return agent to callback @@ -388,6 +397,57 @@ class NetworkAgentTest { } } + @Test + fun testSendScore() { + // This test will create two networks and check that the one with the stronger + // score wins out for a request that matches them both. + // First create requests to make sure both networks are kept up, using the + // specifier so they are specific to each network + val name1 = UUID.randomUUID().toString() + val name2 = UUID.randomUUID().toString() + val request1 = NetworkRequest.Builder() + .clearCapabilities() + .addTransportType(NetworkCapabilities.TRANSPORT_TEST) + .setNetworkSpecifier(StringNetworkSpecifier(name1)) + .build() + val request2 = NetworkRequest.Builder() + .clearCapabilities() + .addTransportType(NetworkCapabilities.TRANSPORT_TEST) + .setNetworkSpecifier(StringNetworkSpecifier(name2)) + .build() + val callback1 = TestableNetworkCallback() + val callback2 = TestableNetworkCallback() + requestNetwork(request1, callback1) + requestNetwork(request2, callback2) + + // Then file the interesting request + val request = NetworkRequest.Builder() + .clearCapabilities() + .addTransportType(NetworkCapabilities.TRANSPORT_TEST) + .build() + val callback = TestableNetworkCallback() + requestNetwork(request, callback) + + // Connect the first Network + createConnectedNetworkAgent(name1).let { (agent1, _) -> + callback.expectAvailableThenValidatedCallbacks(agent1.network) + // Upgrade agent1 to a better score so that there is no ambiguity when + // agent2 connects that agent1 is still better + agent1.sendNetworkScore(BETTER_NETWORK_SCORE - 1) + // Connect the second agent + createConnectedNetworkAgent(name2).let { (agent2, _) -> + agent2.markConnected() + // The callback should not see anything yet + callback.assertNoCallback(200) + // Now update the score and expect the callback now prefers agent2 + agent2.sendNetworkScore(BETTER_NETWORK_SCORE) + callback.expectCallback(agent2.network) + } + } + + // tearDown() will unregister the requests and agents + } + @Test fun testSetAcceptUnvalidated() { createNetworkAgentWithFakeCS().let { agent ->