Merge "Make sure agents start in the CONNECTING state" am: e3c9bb8545 am: 846ace20b8 am: f6d624ecf2
Original change: https://android-review.googlesource.com/c/platform/cts/+/1460705 Change-Id: I68d3a5a6a36f6e29d9bb69657d0842538c03838b
This commit is contained in:
@@ -34,6 +34,7 @@ import android.net.NetworkAgent.INVALID_NETWORK
|
|||||||
import android.net.NetworkAgent.VALID_NETWORK
|
import android.net.NetworkAgent.VALID_NETWORK
|
||||||
import android.net.NetworkAgentConfig
|
import android.net.NetworkAgentConfig
|
||||||
import android.net.NetworkCapabilities
|
import android.net.NetworkCapabilities
|
||||||
|
import android.net.NetworkInfo
|
||||||
import android.net.NetworkProvider
|
import android.net.NetworkProvider
|
||||||
import android.net.NetworkRequest
|
import android.net.NetworkRequest
|
||||||
import android.net.SocketKeepalive
|
import android.net.SocketKeepalive
|
||||||
@@ -71,6 +72,13 @@ import org.junit.Before
|
|||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.ArgumentMatchers.any
|
||||||
|
import org.mockito.ArgumentMatchers.anyInt
|
||||||
|
import org.mockito.ArgumentMatchers.argThat
|
||||||
|
import org.mockito.ArgumentMatchers.eq
|
||||||
|
import org.mockito.Mockito.doReturn
|
||||||
|
import org.mockito.Mockito.mock
|
||||||
|
import org.mockito.Mockito.verify
|
||||||
import java.net.InetAddress
|
import java.net.InetAddress
|
||||||
import java.time.Duration
|
import java.time.Duration
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
@@ -98,7 +106,7 @@ private const val BETTER_NETWORK_SCORE = 75
|
|||||||
private const val FAKE_NET_ID = 1098
|
private const val FAKE_NET_ID = 1098
|
||||||
private val instrumentation: Instrumentation
|
private val instrumentation: Instrumentation
|
||||||
get() = InstrumentationRegistry.getInstrumentation()
|
get() = InstrumentationRegistry.getInstrumentation()
|
||||||
private val context: Context
|
private val realContext: Context
|
||||||
get() = InstrumentationRegistry.getContext()
|
get() = InstrumentationRegistry.getContext()
|
||||||
private fun Message(what: Int, arg1: Int, arg2: Int, obj: Any?) = Message.obtain().also {
|
private fun Message(what: Int, arg1: Int, arg2: Int, obj: Any?) = Message.obtain().also {
|
||||||
it.what = what
|
it.what = what
|
||||||
@@ -115,7 +123,7 @@ class NetworkAgentTest {
|
|||||||
private val LOCAL_IPV4_ADDRESS = InetAddress.parseNumericAddress("192.0.2.1")
|
private val LOCAL_IPV4_ADDRESS = InetAddress.parseNumericAddress("192.0.2.1")
|
||||||
private val REMOTE_IPV4_ADDRESS = InetAddress.parseNumericAddress("192.0.2.2")
|
private val REMOTE_IPV4_ADDRESS = InetAddress.parseNumericAddress("192.0.2.2")
|
||||||
|
|
||||||
private val mCM = context.getSystemService(ConnectivityManager::class.java)
|
private val mCM = realContext.getSystemService(ConnectivityManager::class.java)
|
||||||
private val mHandlerThread = HandlerThread("${javaClass.simpleName} handler thread")
|
private val mHandlerThread = HandlerThread("${javaClass.simpleName} handler thread")
|
||||||
private val mFakeConnectivityService by lazy { FakeConnectivityService(mHandlerThread.looper) }
|
private val mFakeConnectivityService by lazy { FakeConnectivityService(mHandlerThread.looper) }
|
||||||
|
|
||||||
@@ -166,7 +174,7 @@ class NetworkAgentTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun connect(agentMsngr: Messenger) = asyncChannel.connect(context, handler, agentMsngr)
|
fun connect(agentMsngr: Messenger) = asyncChannel.connect(realContext, handler, agentMsngr)
|
||||||
|
|
||||||
fun disconnect() = asyncChannel.disconnect()
|
fun disconnect() = asyncChannel.disconnect()
|
||||||
|
|
||||||
@@ -180,6 +188,7 @@ class NetworkAgentTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private open class TestableNetworkAgent(
|
private open class TestableNetworkAgent(
|
||||||
|
context: Context,
|
||||||
looper: Looper,
|
looper: Looper,
|
||||||
val nc: NetworkCapabilities,
|
val nc: NetworkCapabilities,
|
||||||
val lp: LinkProperties,
|
val lp: LinkProperties,
|
||||||
@@ -300,7 +309,10 @@ class NetworkAgentTest {
|
|||||||
callbacksToCleanUp.add(callback)
|
callbacksToCleanUp.add(callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createNetworkAgent(name: String? = null): TestableNetworkAgent {
|
private fun createNetworkAgent(
|
||||||
|
context: Context = realContext,
|
||||||
|
name: String? = null
|
||||||
|
): TestableNetworkAgent {
|
||||||
val nc = NetworkCapabilities().apply {
|
val nc = NetworkCapabilities().apply {
|
||||||
addTransportType(NetworkCapabilities.TRANSPORT_TEST)
|
addTransportType(NetworkCapabilities.TRANSPORT_TEST)
|
||||||
removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
|
removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
|
||||||
@@ -316,12 +328,12 @@ class NetworkAgentTest {
|
|||||||
addLinkAddress(LinkAddress(LOCAL_IPV4_ADDRESS, 0))
|
addLinkAddress(LinkAddress(LOCAL_IPV4_ADDRESS, 0))
|
||||||
}
|
}
|
||||||
val config = NetworkAgentConfig.Builder().build()
|
val config = NetworkAgentConfig.Builder().build()
|
||||||
return TestableNetworkAgent(mHandlerThread.looper, nc, lp, config).also {
|
return TestableNetworkAgent(context, mHandlerThread.looper, nc, lp, config).also {
|
||||||
agentsToCleanUp.add(it)
|
agentsToCleanUp.add(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createConnectedNetworkAgent(name: String? = null):
|
private fun createConnectedNetworkAgent(context: Context = realContext, name: String? = null):
|
||||||
Pair<TestableNetworkAgent, TestableNetworkCallback> {
|
Pair<TestableNetworkAgent, TestableNetworkCallback> {
|
||||||
val request: NetworkRequest = NetworkRequest.Builder()
|
val request: NetworkRequest = NetworkRequest.Builder()
|
||||||
.clearCapabilities()
|
.clearCapabilities()
|
||||||
@@ -329,7 +341,7 @@ class NetworkAgentTest {
|
|||||||
.build()
|
.build()
|
||||||
val callback = TestableNetworkCallback(timeoutMs = DEFAULT_TIMEOUT_MS)
|
val callback = TestableNetworkCallback(timeoutMs = DEFAULT_TIMEOUT_MS)
|
||||||
requestNetwork(request, callback)
|
requestNetwork(request, callback)
|
||||||
val agent = createNetworkAgent(name)
|
val agent = createNetworkAgent(context, name)
|
||||||
agent.register()
|
agent.register()
|
||||||
agent.markConnected()
|
agent.markConnected()
|
||||||
return agent to callback
|
return agent to callback
|
||||||
@@ -509,13 +521,13 @@ class NetworkAgentTest {
|
|||||||
requestNetwork(request, callback)
|
requestNetwork(request, callback)
|
||||||
|
|
||||||
// Connect the first Network
|
// Connect the first Network
|
||||||
createConnectedNetworkAgent(name1).let { (agent1, _) ->
|
createConnectedNetworkAgent(name = name1).let { (agent1, _) ->
|
||||||
callback.expectAvailableThenValidatedCallbacks(agent1.network)
|
callback.expectAvailableThenValidatedCallbacks(agent1.network)
|
||||||
// Upgrade agent1 to a better score so that there is no ambiguity when
|
// Upgrade agent1 to a better score so that there is no ambiguity when
|
||||||
// agent2 connects that agent1 is still better
|
// agent2 connects that agent1 is still better
|
||||||
agent1.sendNetworkScore(BETTER_NETWORK_SCORE - 1)
|
agent1.sendNetworkScore(BETTER_NETWORK_SCORE - 1)
|
||||||
// Connect the second agent
|
// Connect the second agent
|
||||||
createConnectedNetworkAgent(name2).let { (agent2, _) ->
|
createConnectedNetworkAgent(name = name2).let { (agent2, _) ->
|
||||||
agent2.markConnected()
|
agent2.markConnected()
|
||||||
// The callback should not see anything yet
|
// The callback should not see anything yet
|
||||||
callback.assertNoCallback(NO_CALLBACK_TIMEOUT)
|
callback.assertNoCallback(NO_CALLBACK_TIMEOUT)
|
||||||
@@ -528,6 +540,21 @@ class NetworkAgentTest {
|
|||||||
// tearDown() will unregister the requests and agents
|
// tearDown() will unregister the requests and agents
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testAgentStartsInConnecting() {
|
||||||
|
val mockContext = mock(Context::class.java)
|
||||||
|
val mockCm = mock(ConnectivityManager::class.java)
|
||||||
|
doReturn(mockCm).`when`(mockContext).getSystemService(Context.CONNECTIVITY_SERVICE)
|
||||||
|
createConnectedNetworkAgent(mockContext)
|
||||||
|
verify(mockCm).registerNetworkAgent(any(Messenger::class.java),
|
||||||
|
argThat<NetworkInfo> { it.detailedState == NetworkInfo.DetailedState.CONNECTING },
|
||||||
|
any(LinkProperties::class.java),
|
||||||
|
any(NetworkCapabilities::class.java),
|
||||||
|
anyInt() /* score */,
|
||||||
|
any(NetworkAgentConfig::class.java),
|
||||||
|
eq(NetworkProvider.ID_NONE))
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testSetAcceptUnvalidated() {
|
fun testSetAcceptUnvalidated() {
|
||||||
createNetworkAgentWithFakeCS().let { agent ->
|
createNetworkAgentWithFakeCS().let { agent ->
|
||||||
|
|||||||
Reference in New Issue
Block a user