Merge "Move TestableNetworkAgent to Common Util Location" am: eef1e2033d
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1908520 Change-Id: I7f95f6a3d4750e4dfef2ec4e61db1837661f119d
This commit is contained in:
@@ -61,20 +61,6 @@ import android.net.SocketKeepalive
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.net.VpnManager
|
import android.net.VpnManager
|
||||||
import android.net.VpnTransportInfo
|
import android.net.VpnTransportInfo
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnAddKeepalivePacketFilter
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnAutomaticReconnectDisabled
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnBandwidthUpdateRequested
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnNetworkCreated
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnNetworkDestroyed
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnNetworkUnwanted
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnRegisterQosCallback
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnRemoveKeepalivePacketFilter
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnSaveAcceptUnvalidated
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnSignalStrengthThresholdsUpdated
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnStartSocketKeepalive
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnStopSocketKeepalive
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnUnregisterQosCallback
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnValidationStatus
|
|
||||||
import android.net.cts.NetworkAgentTest.TestableQosCallback.CallbackEntry.OnError
|
import android.net.cts.NetworkAgentTest.TestableQosCallback.CallbackEntry.OnError
|
||||||
import android.net.cts.NetworkAgentTest.TestableQosCallback.CallbackEntry.OnQosSessionAvailable
|
import android.net.cts.NetworkAgentTest.TestableQosCallback.CallbackEntry.OnQosSessionAvailable
|
||||||
import android.net.cts.NetworkAgentTest.TestableQosCallback.CallbackEntry.OnQosSessionLost
|
import android.net.cts.NetworkAgentTest.TestableQosCallback.CallbackEntry.OnQosSessionLost
|
||||||
@@ -98,6 +84,20 @@ import com.android.testutils.DevSdkIgnoreRunner
|
|||||||
import com.android.testutils.RecorderCallback.CallbackEntry.Available
|
import com.android.testutils.RecorderCallback.CallbackEntry.Available
|
||||||
import com.android.testutils.RecorderCallback.CallbackEntry.Losing
|
import com.android.testutils.RecorderCallback.CallbackEntry.Losing
|
||||||
import com.android.testutils.RecorderCallback.CallbackEntry.Lost
|
import com.android.testutils.RecorderCallback.CallbackEntry.Lost
|
||||||
|
import com.android.testutils.TestableNetworkAgent
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnAddKeepalivePacketFilter
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnAutomaticReconnectDisabled
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnBandwidthUpdateRequested
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnNetworkCreated
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnNetworkDestroyed
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnNetworkUnwanted
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnRegisterQosCallback
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnRemoveKeepalivePacketFilter
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnSaveAcceptUnvalidated
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnStartSocketKeepalive
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnStopSocketKeepalive
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnUnregisterQosCallback
|
||||||
|
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnValidationStatus
|
||||||
import com.android.testutils.TestableNetworkCallback
|
import com.android.testutils.TestableNetworkCallback
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Assert.assertArrayEquals
|
import org.junit.Assert.assertArrayEquals
|
||||||
@@ -136,10 +136,6 @@ private const val DEFAULT_TIMEOUT_MS = 5000L
|
|||||||
// and then there is the Binder call), so have a short timeout for this as it will be
|
// and then there is the Binder call), so have a short timeout for this as it will be
|
||||||
// exhausted every time.
|
// exhausted every time.
|
||||||
private const val NO_CALLBACK_TIMEOUT = 200L
|
private const val NO_CALLBACK_TIMEOUT = 200L
|
||||||
// Any legal score (0~99) for the test network would do, as it is going to be kept up by the
|
|
||||||
// requests filed by the test and should never match normal internet requests. 70 is the default
|
|
||||||
// score of Ethernet networks, it's as good a value as any other.
|
|
||||||
private const val TEST_NETWORK_SCORE = 70
|
|
||||||
private const val WORSE_NETWORK_SCORE = 65
|
private const val WORSE_NETWORK_SCORE = 65
|
||||||
private const val BETTER_NETWORK_SCORE = 75
|
private const val BETTER_NETWORK_SCORE = 75
|
||||||
private const val FAKE_NET_ID = 1098
|
private const val FAKE_NET_ID = 1098
|
||||||
@@ -165,10 +161,6 @@ class NetworkAgentTest {
|
|||||||
private val mCM = realContext.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 = FakeConnectivityService()
|
private val mFakeConnectivityService = FakeConnectivityService()
|
||||||
|
|
||||||
private class Provider(context: Context, looper: Looper) :
|
|
||||||
NetworkProvider(context, looper, "NetworkAgentTest NetworkProvider")
|
|
||||||
|
|
||||||
private val agentsToCleanUp = mutableListOf<NetworkAgent>()
|
private val agentsToCleanUp = mutableListOf<NetworkAgent>()
|
||||||
private val callbacksToCleanUp = mutableListOf<TestableNetworkCallback>()
|
private val callbacksToCleanUp = mutableListOf<TestableNetworkCallback>()
|
||||||
private var qosTestSocket: Socket? = null
|
private var qosTestSocket: Socket? = null
|
||||||
@@ -219,146 +211,6 @@ class NetworkAgentTest {
|
|||||||
fun disconnect() = agent.onDisconnected()
|
fun disconnect() = agent.onDisconnected()
|
||||||
}
|
}
|
||||||
|
|
||||||
private open class TestableNetworkAgent(
|
|
||||||
context: Context,
|
|
||||||
looper: Looper,
|
|
||||||
val nc: NetworkCapabilities,
|
|
||||||
val lp: LinkProperties,
|
|
||||||
conf: NetworkAgentConfig
|
|
||||||
) : NetworkAgent(context, looper, TestableNetworkAgent::class.java.simpleName /* tag */,
|
|
||||||
nc, lp, TEST_NETWORK_SCORE, conf, Provider(context, looper)) {
|
|
||||||
private val history = ArrayTrackRecord<CallbackEntry>().newReadHead()
|
|
||||||
|
|
||||||
sealed class CallbackEntry {
|
|
||||||
object OnBandwidthUpdateRequested : CallbackEntry()
|
|
||||||
object OnNetworkUnwanted : CallbackEntry()
|
|
||||||
data class OnAddKeepalivePacketFilter(
|
|
||||||
val slot: Int,
|
|
||||||
val packet: KeepalivePacketData
|
|
||||||
) : CallbackEntry()
|
|
||||||
data class OnRemoveKeepalivePacketFilter(val slot: Int) : CallbackEntry()
|
|
||||||
data class OnStartSocketKeepalive(
|
|
||||||
val slot: Int,
|
|
||||||
val interval: Int,
|
|
||||||
val packet: KeepalivePacketData
|
|
||||||
) : CallbackEntry()
|
|
||||||
data class OnStopSocketKeepalive(val slot: Int) : CallbackEntry()
|
|
||||||
data class OnSaveAcceptUnvalidated(val accept: Boolean) : CallbackEntry()
|
|
||||||
object OnAutomaticReconnectDisabled : CallbackEntry()
|
|
||||||
data class OnValidationStatus(val status: Int, val uri: Uri?) : CallbackEntry()
|
|
||||||
data class OnSignalStrengthThresholdsUpdated(val thresholds: IntArray) : CallbackEntry()
|
|
||||||
object OnNetworkCreated : CallbackEntry()
|
|
||||||
object OnNetworkDestroyed : CallbackEntry()
|
|
||||||
data class OnRegisterQosCallback(
|
|
||||||
val callbackId: Int,
|
|
||||||
val filter: QosFilter
|
|
||||||
) : CallbackEntry()
|
|
||||||
data class OnUnregisterQosCallback(val callbackId: Int) : CallbackEntry()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBandwidthUpdateRequested() {
|
|
||||||
history.add(OnBandwidthUpdateRequested)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onNetworkUnwanted() {
|
|
||||||
history.add(OnNetworkUnwanted)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onAddKeepalivePacketFilter(slot: Int, packet: KeepalivePacketData) {
|
|
||||||
history.add(OnAddKeepalivePacketFilter(slot, packet))
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onRemoveKeepalivePacketFilter(slot: Int) {
|
|
||||||
history.add(OnRemoveKeepalivePacketFilter(slot))
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStartSocketKeepalive(
|
|
||||||
slot: Int,
|
|
||||||
interval: Duration,
|
|
||||||
packet: KeepalivePacketData
|
|
||||||
) {
|
|
||||||
history.add(OnStartSocketKeepalive(slot, interval.seconds.toInt(), packet))
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStopSocketKeepalive(slot: Int) {
|
|
||||||
history.add(OnStopSocketKeepalive(slot))
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSaveAcceptUnvalidated(accept: Boolean) {
|
|
||||||
history.add(OnSaveAcceptUnvalidated(accept))
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onAutomaticReconnectDisabled() {
|
|
||||||
history.add(OnAutomaticReconnectDisabled)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSignalStrengthThresholdsUpdated(thresholds: IntArray) {
|
|
||||||
history.add(OnSignalStrengthThresholdsUpdated(thresholds))
|
|
||||||
}
|
|
||||||
|
|
||||||
fun expectSignalStrengths(thresholds: IntArray? = intArrayOf()) {
|
|
||||||
expectCallback<OnSignalStrengthThresholdsUpdated>().let {
|
|
||||||
assertArrayEquals(thresholds, it.thresholds)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onQosCallbackRegistered(qosCallbackId: Int, filter: QosFilter) {
|
|
||||||
history.add(OnRegisterQosCallback(qosCallbackId, filter))
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onQosCallbackUnregistered(qosCallbackId: Int) {
|
|
||||||
history.add(OnUnregisterQosCallback(qosCallbackId))
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onValidationStatus(status: Int, uri: Uri?) {
|
|
||||||
history.add(OnValidationStatus(status, uri))
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onNetworkCreated() {
|
|
||||||
history.add(OnNetworkCreated)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onNetworkDestroyed() {
|
|
||||||
history.add(OnNetworkDestroyed)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Expects the initial validation event that always occurs immediately after registering
|
|
||||||
// a NetworkAgent whose network does not require validation (which test networks do
|
|
||||||
// not, since they lack the INTERNET capability). It always contains the default argument
|
|
||||||
// for the URI.
|
|
||||||
fun expectValidationBypassedStatus() = expectCallback<OnValidationStatus>().let {
|
|
||||||
assertEquals(it.status, VALID_NETWORK)
|
|
||||||
// The returned Uri is parsed from the empty string, which means it's an
|
|
||||||
// instance of the (private) Uri.StringUri. There are no real good ways
|
|
||||||
// to check this, the least bad is to just convert it to a string and
|
|
||||||
// make sure it's empty.
|
|
||||||
assertEquals("", it.uri.toString())
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fun <reified T : CallbackEntry> expectCallback(): T {
|
|
||||||
val foundCallback = history.poll(DEFAULT_TIMEOUT_MS)
|
|
||||||
assertTrue(foundCallback is T, "Expected ${T::class} but found $foundCallback")
|
|
||||||
return foundCallback
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fun <reified T : CallbackEntry> expectCallback(valid: (T) -> Boolean) {
|
|
||||||
val foundCallback = history.poll(DEFAULT_TIMEOUT_MS)
|
|
||||||
assertTrue(foundCallback is T, "Expected ${T::class} but found $foundCallback")
|
|
||||||
assertTrue(valid(foundCallback), "Unexpected callback : $foundCallback")
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fun <reified T : CallbackEntry> eventuallyExpect() =
|
|
||||||
history.poll(DEFAULT_TIMEOUT_MS) { it is T }.also {
|
|
||||||
assertNotNull(it, "Callback ${T::class} not received")
|
|
||||||
} as T
|
|
||||||
|
|
||||||
fun assertNoCallback() {
|
|
||||||
assertTrue(waitForIdle(DEFAULT_TIMEOUT_MS),
|
|
||||||
"Handler didn't became idle after ${DEFAULT_TIMEOUT_MS}ms")
|
|
||||||
assertNull(history.peek())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun requestNetwork(request: NetworkRequest, callback: TestableNetworkCallback) {
|
private fun requestNetwork(request: NetworkRequest, callback: TestableNetworkCallback) {
|
||||||
mCM.requestNetwork(request, callback)
|
mCM.requestNetwork(request, callback)
|
||||||
callbacksToCleanUp.add(callback)
|
callbacksToCleanUp.add(callback)
|
||||||
|
|||||||
Reference in New Issue
Block a user