Merge "Pass in proper NetworkCapabilities in testSetUnderlyingNetworks."

This commit is contained in:
Lorenzo Colitti
2020-12-09 00:11:23 +00:00
committed by Gerrit Code Review

View File

@@ -57,6 +57,7 @@ import android.os.HandlerThread
import android.os.Looper import android.os.Looper
import android.os.Message import android.os.Message
import android.os.Messenger import android.os.Messenger
import android.util.DebugUtils.valueToString
import androidx.test.InstrumentationRegistry import androidx.test.InstrumentationRegistry
import androidx.test.runner.AndroidJUnit4 import androidx.test.runner.AndroidJUnit4
import com.android.internal.util.AsyncChannel import com.android.internal.util.AsyncChannel
@@ -314,10 +315,10 @@ class NetworkAgentTest {
private fun createNetworkAgent( private fun createNetworkAgent(
context: Context = realContext, context: Context = realContext,
name: String? = null, name: String? = null,
nc: NetworkCapabilities = NetworkCapabilities(), initialNc: NetworkCapabilities? = null,
lp: LinkProperties = LinkProperties() initialLp: LinkProperties? = null
): TestableNetworkAgent { ): TestableNetworkAgent {
nc.apply { val nc = initialNc ?: NetworkCapabilities().apply {
addTransportType(NetworkCapabilities.TRANSPORT_TEST) addTransportType(NetworkCapabilities.TRANSPORT_TEST)
removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED) removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
@@ -328,7 +329,7 @@ class NetworkAgentTest {
setNetworkSpecifier(StringNetworkSpecifier(name)) setNetworkSpecifier(StringNetworkSpecifier(name))
} }
} }
lp.apply { val lp = initialLp ?: LinkProperties().apply {
addLinkAddress(LinkAddress(LOCAL_IPV4_ADDRESS, 0)) addLinkAddress(LinkAddress(LOCAL_IPV4_ADDRESS, 0))
} }
val config = NetworkAgentConfig.Builder().build() val config = NetworkAgentConfig.Builder().build()
@@ -557,7 +558,7 @@ class NetworkAgentTest {
.removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED) // TODO: add to VPN! .removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED) // TODO: add to VPN!
.build() .build()
val callback = TestableNetworkCallback() val callback = TestableNetworkCallback()
mCM.registerNetworkCallback(request, callback) registerNetworkCallback(request, callback)
val nc = NetworkCapabilities().apply { val nc = NetworkCapabilities().apply {
addTransportType(NetworkCapabilities.TRANSPORT_TEST) addTransportType(NetworkCapabilities.TRANSPORT_TEST)
@@ -566,25 +567,30 @@ class NetworkAgentTest {
} }
val defaultNetwork = mCM.activeNetwork val defaultNetwork = mCM.activeNetwork
assertNotNull(defaultNetwork) assertNotNull(defaultNetwork)
val defaultNetworkTransports = mCM.getNetworkCapabilities(defaultNetwork).transportTypes val defaultNetworkCapabilities = mCM.getNetworkCapabilities(defaultNetwork)
val defaultNetworkTransports = defaultNetworkCapabilities.transportTypes
val agent = createNetworkAgent(nc = nc) val agent = createNetworkAgent(initialNc = nc)
agent.register() agent.register()
agent.markConnected() agent.markConnected()
callback.expectAvailableThenValidatedCallbacks(agent.network!!) callback.expectAvailableThenValidatedCallbacks(agent.network!!)
// Check that the default network's transport is propagated to the VPN.
var vpnNc = mCM.getNetworkCapabilities(agent.network) var vpnNc = mCM.getNetworkCapabilities(agent.network)
assertNotNull(vpnNc) assertNotNull(vpnNc)
assertTrue(NetworkCapabilities.TRANSPORT_VPN in vpnNc.transportTypes) assertTrue(NetworkCapabilities.TRANSPORT_VPN in vpnNc.transportTypes)
assertFalse(vpnNc.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN))
assertTrue(hasAllTransports(vpnNc, defaultNetworkTransports), assertTrue(hasAllTransports(vpnNc, defaultNetworkTransports),
"VPN transports ${Arrays.toString(vpnNc.transportTypes)}" + "VPN transports ${Arrays.toString(vpnNc.transportTypes)}" +
" lacking transports from ${Arrays.toString(defaultNetworkTransports)}") " lacking transports from ${Arrays.toString(defaultNetworkTransports)}")
// Check that when no underlying networks are announced the underlying transport disappears.
agent.setUnderlyingNetworks(listOf<Network>()) agent.setUnderlyingNetworks(listOf<Network>())
callback.expectCapabilitiesThat(agent.network!!) { callback.expectCapabilitiesThat(agent.network!!) {
it.transportTypes.size == 1 && it.hasTransport(NetworkCapabilities.TRANSPORT_VPN) it.transportTypes.size == 1 && it.hasTransport(NetworkCapabilities.TRANSPORT_VPN)
} }
// Put the underlying network back and check that the underlying transport reappears.
val expectedTransports = (defaultNetworkTransports.toSet() + val expectedTransports = (defaultNetworkTransports.toSet() +
NetworkCapabilities.TRANSPORT_VPN).toIntArray() NetworkCapabilities.TRANSPORT_VPN).toIntArray()
agent.setUnderlyingNetworks(null) agent.setUnderlyingNetworks(null)
@@ -593,10 +599,22 @@ class NetworkAgentTest {
hasAllTransports(it, expectedTransports) hasAllTransports(it, expectedTransports)
} }
// Check that some underlying capabilities are propagated.
// This is not very accurate because the test does not control the capabilities of the
// underlying networks, and because not congested, not roaming, and not suspended are the
// default anyway. It's still useful as an extra check though.
vpnNc = mCM.getNetworkCapabilities(agent.network)
for (cap in listOf(NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED,
NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING,
NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED)) {
val capStr = valueToString(NetworkCapabilities::class.java, "NET_CAPABILITY_", cap)
if (defaultNetworkCapabilities.hasCapability(cap) && !vpnNc.hasCapability(cap)) {
fail("$capStr not propagated from underlying: $defaultNetworkCapabilities")
}
}
agent.unregister() agent.unregister()
callback.expectCallback<Lost>(agent.network) callback.expectCallback<Lost>(agent.network)
mCM.unregisterNetworkCallback(callback)
} }
@Test @Test