Merge "Test Signal thresholds" am: 99bfaf7280
Change-Id: I2972bf1dcd2db5e6624815b2cc9e31983e82800f
This commit is contained in:
@@ -52,6 +52,7 @@ import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnBan
|
|||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnNetworkUnwanted
|
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnNetworkUnwanted
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnRemoveKeepalivePacketFilter
|
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnRemoveKeepalivePacketFilter
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnSaveAcceptUnvalidated
|
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.OnStartSocketKeepalive
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnStopSocketKeepalive
|
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnStopSocketKeepalive
|
||||||
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnValidationStatus
|
import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnValidationStatus
|
||||||
@@ -65,6 +66,7 @@ import com.android.testutils.RecorderCallback.CallbackEntry.Lost
|
|||||||
import com.android.testutils.TestableNetworkCallback
|
import com.android.testutils.TestableNetworkCallback
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
|
import org.junit.Assert.assertArrayEquals
|
||||||
import org.junit.Assert.fail
|
import org.junit.Assert.fail
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
@@ -83,6 +85,11 @@ import kotlin.test.assertTrue
|
|||||||
// going to fail, it will simply wait forever, so setting a high timeout lowers the flake ratio
|
// going to fail, it will simply wait forever, so setting a high timeout lowers the flake ratio
|
||||||
// without affecting the run time of successful runs. Thus, set a very high timeout.
|
// without affecting the run time of successful runs. Thus, set a very high timeout.
|
||||||
private const val DEFAULT_TIMEOUT_MS = 5000L
|
private const val DEFAULT_TIMEOUT_MS = 5000L
|
||||||
|
// When waiting for a NetworkCallback to determine there was no timeout, waiting is the
|
||||||
|
// only possible thing (the relevant handler is the one in the real ConnectivityService,
|
||||||
|
// and then there is the Binder call), so have a short timeout for this as it will be
|
||||||
|
// exhausted every time.
|
||||||
|
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
|
// 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
|
// 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.
|
// score of Ethernet networks, it's as good a value as any other.
|
||||||
@@ -198,6 +205,7 @@ class NetworkAgentTest {
|
|||||||
data class OnSaveAcceptUnvalidated(val accept: Boolean) : CallbackEntry()
|
data class OnSaveAcceptUnvalidated(val accept: Boolean) : CallbackEntry()
|
||||||
object OnAutomaticReconnectDisabled : CallbackEntry()
|
object OnAutomaticReconnectDisabled : CallbackEntry()
|
||||||
data class OnValidationStatus(val status: Int, val uri: Uri?) : CallbackEntry()
|
data class OnValidationStatus(val status: Int, val uri: Uri?) : CallbackEntry()
|
||||||
|
data class OnSignalStrengthThresholdsUpdated(val thresholds: IntArray) : CallbackEntry()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getName(): String? = (nc.getNetworkSpecifier() as? StringNetworkSpecifier)?.specifier
|
fun getName(): String? = (nc.getNetworkSpecifier() as? StringNetworkSpecifier)?.specifier
|
||||||
@@ -238,6 +246,17 @@ class NetworkAgentTest {
|
|||||||
history.add(OnAutomaticReconnectDisabled)
|
history.add(OnAutomaticReconnectDisabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onSignalStrengthThresholdsUpdated(thresholds: IntArray) {
|
||||||
|
history.add(OnSignalStrengthThresholdsUpdated(thresholds))
|
||||||
|
}
|
||||||
|
|
||||||
|
fun expectEmptySignalStrengths() {
|
||||||
|
expectCallback<OnSignalStrengthThresholdsUpdated>().let {
|
||||||
|
// intArrayOf() without arguments makes an empty array
|
||||||
|
assertArrayEquals(intArrayOf(), it.thresholds)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onValidationStatus(status: Int, uri: Uri?) {
|
override fun onValidationStatus(status: Int, uri: Uri?) {
|
||||||
history.add(OnValidationStatus(status, uri))
|
history.add(OnValidationStatus(status, uri))
|
||||||
}
|
}
|
||||||
@@ -272,6 +291,14 @@ class NetworkAgentTest {
|
|||||||
callbacksToCleanUp.add(callback)
|
callbacksToCleanUp.add(callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun registerNetworkCallback(
|
||||||
|
request: NetworkRequest,
|
||||||
|
callback: TestableNetworkCallback
|
||||||
|
) {
|
||||||
|
mCM.registerNetworkCallback(request, callback)
|
||||||
|
callbacksToCleanUp.add(callback)
|
||||||
|
}
|
||||||
|
|
||||||
private fun createNetworkAgent(name: String? = null): TestableNetworkAgent {
|
private fun createNetworkAgent(name: String? = null): TestableNetworkAgent {
|
||||||
val nc = NetworkCapabilities().apply {
|
val nc = NetworkCapabilities().apply {
|
||||||
addTransportType(NetworkCapabilities.TRANSPORT_TEST)
|
addTransportType(NetworkCapabilities.TRANSPORT_TEST)
|
||||||
@@ -315,6 +342,7 @@ class NetworkAgentTest {
|
|||||||
fun testConnectAndUnregister() {
|
fun testConnectAndUnregister() {
|
||||||
val (agent, callback) = createConnectedNetworkAgent()
|
val (agent, callback) = createConnectedNetworkAgent()
|
||||||
callback.expectAvailableThenValidatedCallbacks(agent.network)
|
callback.expectAvailableThenValidatedCallbacks(agent.network)
|
||||||
|
agent.expectEmptySignalStrengths()
|
||||||
agent.expectNoInternetValidationStatus()
|
agent.expectNoInternetValidationStatus()
|
||||||
agent.unregister()
|
agent.unregister()
|
||||||
callback.expectCallback<Lost>(agent.network)
|
callback.expectCallback<Lost>(agent.network)
|
||||||
@@ -328,12 +356,62 @@ class NetworkAgentTest {
|
|||||||
fun testOnBandwidthUpdateRequested() {
|
fun testOnBandwidthUpdateRequested() {
|
||||||
val (agent, callback) = createConnectedNetworkAgent()
|
val (agent, callback) = createConnectedNetworkAgent()
|
||||||
callback.expectAvailableThenValidatedCallbacks(agent.network)
|
callback.expectAvailableThenValidatedCallbacks(agent.network)
|
||||||
|
agent.expectEmptySignalStrengths()
|
||||||
agent.expectNoInternetValidationStatus()
|
agent.expectNoInternetValidationStatus()
|
||||||
mCM.requestBandwidthUpdate(agent.network)
|
mCM.requestBandwidthUpdate(agent.network)
|
||||||
agent.expectCallback<OnBandwidthUpdateRequested>()
|
agent.expectCallback<OnBandwidthUpdateRequested>()
|
||||||
agent.unregister()
|
agent.unregister()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testSignalStrengthThresholds() {
|
||||||
|
val thresholds = intArrayOf(30, 50, 65)
|
||||||
|
val callbacks = thresholds.map { strength ->
|
||||||
|
val request = NetworkRequest.Builder()
|
||||||
|
.clearCapabilities()
|
||||||
|
.addTransportType(NetworkCapabilities.TRANSPORT_TEST)
|
||||||
|
.setSignalStrength(strength)
|
||||||
|
.build()
|
||||||
|
TestableNetworkCallback(DEFAULT_TIMEOUT_MS).also {
|
||||||
|
registerNetworkCallback(request, it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
createConnectedNetworkAgent().let { (agent, callback) ->
|
||||||
|
callback.expectAvailableThenValidatedCallbacks(agent.network)
|
||||||
|
agent.expectCallback<OnSignalStrengthThresholdsUpdated>().let {
|
||||||
|
assertArrayEquals(it.thresholds, thresholds)
|
||||||
|
}
|
||||||
|
agent.expectNoInternetValidationStatus()
|
||||||
|
|
||||||
|
// Send signal strength and check that the callbacks are called appropriately.
|
||||||
|
val nc = NetworkCapabilities(agent.nc)
|
||||||
|
nc.setSignalStrength(20)
|
||||||
|
agent.sendNetworkCapabilities(nc)
|
||||||
|
callbacks.forEach { it.assertNoCallback(NO_CALLBACK_TIMEOUT) }
|
||||||
|
|
||||||
|
nc.setSignalStrength(40)
|
||||||
|
agent.sendNetworkCapabilities(nc)
|
||||||
|
callbacks[0].expectAvailableCallbacks(agent.network)
|
||||||
|
callbacks[1].assertNoCallback(NO_CALLBACK_TIMEOUT)
|
||||||
|
callbacks[2].assertNoCallback(NO_CALLBACK_TIMEOUT)
|
||||||
|
|
||||||
|
nc.setSignalStrength(80)
|
||||||
|
agent.sendNetworkCapabilities(nc)
|
||||||
|
callbacks[0].expectCapabilitiesThat(agent.network) { it.signalStrength == 80 }
|
||||||
|
callbacks[1].expectAvailableCallbacks(agent.network)
|
||||||
|
callbacks[2].expectAvailableCallbacks(agent.network)
|
||||||
|
|
||||||
|
nc.setSignalStrength(55)
|
||||||
|
agent.sendNetworkCapabilities(nc)
|
||||||
|
callbacks[0].expectCapabilitiesThat(agent.network) { it.signalStrength == 55 }
|
||||||
|
callbacks[1].expectCapabilitiesThat(agent.network) { it.signalStrength == 55 }
|
||||||
|
callbacks[2].expectCallback<Lost>(agent.network)
|
||||||
|
}
|
||||||
|
callbacks.forEach {
|
||||||
|
mCM.unregisterNetworkCallback(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testSocketKeepalive(): Unit = createNetworkAgentWithFakeCS().let { agent ->
|
fun testSocketKeepalive(): Unit = createNetworkAgentWithFakeCS().let { agent ->
|
||||||
val packet = object : KeepalivePacketData(
|
val packet = object : KeepalivePacketData(
|
||||||
@@ -381,6 +459,7 @@ class NetworkAgentTest {
|
|||||||
@Test
|
@Test
|
||||||
fun testSendUpdates(): Unit = createConnectedNetworkAgent().let { (agent, callback) ->
|
fun testSendUpdates(): Unit = createConnectedNetworkAgent().let { (agent, callback) ->
|
||||||
callback.expectAvailableThenValidatedCallbacks(agent.network)
|
callback.expectAvailableThenValidatedCallbacks(agent.network)
|
||||||
|
agent.expectEmptySignalStrengths()
|
||||||
agent.expectNoInternetValidationStatus()
|
agent.expectNoInternetValidationStatus()
|
||||||
val ifaceName = "adhocIface"
|
val ifaceName = "adhocIface"
|
||||||
val lp = LinkProperties(agent.lp)
|
val lp = LinkProperties(agent.lp)
|
||||||
@@ -438,7 +517,7 @@ class NetworkAgentTest {
|
|||||||
createConnectedNetworkAgent(name2).let { (agent2, _) ->
|
createConnectedNetworkAgent(name2).let { (agent2, _) ->
|
||||||
agent2.markConnected()
|
agent2.markConnected()
|
||||||
// The callback should not see anything yet
|
// The callback should not see anything yet
|
||||||
callback.assertNoCallback(200)
|
callback.assertNoCallback(NO_CALLBACK_TIMEOUT)
|
||||||
// Now update the score and expect the callback now prefers agent2
|
// Now update the score and expect the callback now prefers agent2
|
||||||
agent2.sendNetworkScore(BETTER_NETWORK_SCORE)
|
agent2.sendNetworkScore(BETTER_NETWORK_SCORE)
|
||||||
callback.expectCallback<Available>(agent2.network)
|
callback.expectCallback<Available>(agent2.network)
|
||||||
|
|||||||
Reference in New Issue
Block a user