Allow for mocking an SDK in the tests
Test: in followup patches Change-Id: I540ce2a455c92be52eb94fbd4b54a2081d04d25e
This commit is contained in:
@@ -97,12 +97,14 @@ import static android.os.Process.VPN_UID;
|
|||||||
import static android.system.OsConstants.ETH_P_ALL;
|
import static android.system.OsConstants.ETH_P_ALL;
|
||||||
import static android.system.OsConstants.IPPROTO_TCP;
|
import static android.system.OsConstants.IPPROTO_TCP;
|
||||||
import static android.system.OsConstants.IPPROTO_UDP;
|
import static android.system.OsConstants.IPPROTO_UDP;
|
||||||
|
|
||||||
import static com.android.net.module.util.NetworkMonitorUtils.isPrivateDnsValidationRequired;
|
import static com.android.net.module.util.NetworkMonitorUtils.isPrivateDnsValidationRequired;
|
||||||
import static com.android.net.module.util.PermissionUtils.checkAnyPermissionOf;
|
import static com.android.net.module.util.PermissionUtils.checkAnyPermissionOf;
|
||||||
import static com.android.net.module.util.PermissionUtils.enforceAnyPermissionOf;
|
import static com.android.net.module.util.PermissionUtils.enforceAnyPermissionOf;
|
||||||
import static com.android.net.module.util.PermissionUtils.enforceNetworkStackPermission;
|
import static com.android.net.module.util.PermissionUtils.enforceNetworkStackPermission;
|
||||||
import static com.android.net.module.util.PermissionUtils.enforceNetworkStackPermissionOr;
|
import static com.android.net.module.util.PermissionUtils.enforceNetworkStackPermissionOr;
|
||||||
import static com.android.server.ConnectivityStatsLog.CONNECTIVITY_STATE_SAMPLE;
|
import static com.android.server.ConnectivityStatsLog.CONNECTIVITY_STATE_SAMPLE;
|
||||||
|
|
||||||
import static java.util.Map.Entry;
|
import static java.util.Map.Entry;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
@@ -1315,6 +1317,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
return SdkLevel.isAtLeastU();
|
return SdkLevel.isAtLeastU();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAtLeastV() {
|
||||||
|
return SdkLevel.isAtLeastV();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get system properties to use in ConnectivityService.
|
* Get system properties to use in ConnectivityService.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -26,19 +26,14 @@ import android.content.res.Resources
|
|||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
import android.net.INetd
|
import android.net.INetd
|
||||||
import android.net.InetAddresses
|
import android.net.InetAddresses
|
||||||
import android.net.IpPrefix
|
|
||||||
import android.net.LinkAddress
|
|
||||||
import android.net.LinkProperties
|
import android.net.LinkProperties
|
||||||
import android.net.NetworkAgentConfig
|
import android.net.NetworkAgentConfig
|
||||||
import android.net.NetworkCapabilities
|
import android.net.NetworkCapabilities
|
||||||
import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING
|
|
||||||
import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED
|
import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED
|
||||||
import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED
|
|
||||||
import android.net.NetworkPolicyManager
|
import android.net.NetworkPolicyManager
|
||||||
import android.net.NetworkProvider
|
import android.net.NetworkProvider
|
||||||
import android.net.NetworkScore
|
import android.net.NetworkScore
|
||||||
import android.net.PacProxyManager
|
import android.net.PacProxyManager
|
||||||
import android.net.RouteInfo
|
|
||||||
import android.net.networkstack.NetworkStackClientBase
|
import android.net.networkstack.NetworkStackClientBase
|
||||||
import android.os.BatteryStatsManager
|
import android.os.BatteryStatsManager
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
@@ -76,6 +71,14 @@ internal val LOCAL_IPV4_ADDRESS = InetAddresses.parseNumericAddress("192.0.2.1")
|
|||||||
|
|
||||||
open class FromS<Type>(val value: Type)
|
open class FromS<Type>(val value: Type)
|
||||||
|
|
||||||
|
internal const val VERSION_UNMOCKED = -1
|
||||||
|
internal const val VERSION_R = 1
|
||||||
|
internal const val VERSION_S = 2
|
||||||
|
internal const val VERSION_T = 3
|
||||||
|
internal const val VERSION_U = 4
|
||||||
|
internal const val VERSION_V = 5
|
||||||
|
internal const val VERSION_MAX = VERSION_V
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class for tests testing ConnectivityService and its satellites.
|
* Base class for tests testing ConnectivityService and its satellites.
|
||||||
*
|
*
|
||||||
@@ -193,6 +196,24 @@ open class CSTest {
|
|||||||
changeId in enabledChangeIds
|
changeId in enabledChangeIds
|
||||||
override fun isChangeEnabled(changeId: Long, uid: Int) =
|
override fun isChangeEnabled(changeId: Long, uid: Int) =
|
||||||
changeId in enabledChangeIds
|
changeId in enabledChangeIds
|
||||||
|
|
||||||
|
// In AOSP, build version codes are all over the place (e.g. at the time of this writing
|
||||||
|
// U == V). Define custom ones.
|
||||||
|
private var sdkLevel = VERSION_UNMOCKED
|
||||||
|
private val isSdkUnmocked get() = sdkLevel == VERSION_UNMOCKED
|
||||||
|
|
||||||
|
fun setBuildSdk(sdkLevel: Int) {
|
||||||
|
require(sdkLevel <= VERSION_MAX) {
|
||||||
|
"setBuildSdk must not be called with Build.VERSION constants but " +
|
||||||
|
"CsTest.VERSION_* constants"
|
||||||
|
}
|
||||||
|
visibleOnHandlerThread(csHandler) { this.sdkLevel = sdkLevel }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun isAtLeastS() = if (isSdkUnmocked) super.isAtLeastS() else sdkLevel >= VERSION_S
|
||||||
|
override fun isAtLeastT() = if (isSdkUnmocked) super.isAtLeastT() else sdkLevel >= VERSION_T
|
||||||
|
override fun isAtLeastU() = if (isSdkUnmocked) super.isAtLeastU() else sdkLevel >= VERSION_U
|
||||||
|
override fun isAtLeastV() = if (isSdkUnmocked) super.isAtLeastV() else sdkLevel >= VERSION_V
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class CSContext(base: Context) : BroadcastInterceptingContext(base) {
|
inner class CSContext(base: Context) : BroadcastInterceptingContext(base) {
|
||||||
@@ -248,19 +269,6 @@ open class CSTest {
|
|||||||
// Utility methods for subclasses to use
|
// Utility methods for subclasses to use
|
||||||
fun waitForIdle() = csHandlerThread.waitForIdle(HANDLER_TIMEOUT_MS)
|
fun waitForIdle() = csHandlerThread.waitForIdle(HANDLER_TIMEOUT_MS)
|
||||||
|
|
||||||
private fun emptyAgentConfig() = NetworkAgentConfig.Builder().build()
|
|
||||||
private fun defaultNc() = NetworkCapabilities.Builder()
|
|
||||||
// Add sensible defaults for agents that don't want to care
|
|
||||||
.addCapability(NET_CAPABILITY_NOT_SUSPENDED)
|
|
||||||
.addCapability(NET_CAPABILITY_NOT_ROAMING)
|
|
||||||
.addCapability(NET_CAPABILITY_NOT_VCN_MANAGED)
|
|
||||||
.build()
|
|
||||||
private fun defaultScore() = FromS<NetworkScore>(NetworkScore.Builder().build())
|
|
||||||
private fun defaultLp() = LinkProperties().apply {
|
|
||||||
addLinkAddress(LinkAddress(LOCAL_IPV4_ADDRESS, 32))
|
|
||||||
addRoute(RouteInfo(IpPrefix("0.0.0.0/0"), null, null))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Network agents. See CSAgentWrapper. This class contains utility methods to simplify
|
// Network agents. See CSAgentWrapper. This class contains utility methods to simplify
|
||||||
// creation.
|
// creation.
|
||||||
fun Agent(
|
fun Agent(
|
||||||
|
|||||||
@@ -30,6 +30,13 @@ import android.content.pm.UserInfo
|
|||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.net.IDnsResolver
|
import android.net.IDnsResolver
|
||||||
import android.net.INetd
|
import android.net.INetd
|
||||||
|
import android.net.IpPrefix
|
||||||
|
import android.net.LinkAddress
|
||||||
|
import android.net.LinkProperties
|
||||||
|
import android.net.NetworkAgentConfig
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.net.NetworkScore
|
||||||
|
import android.net.RouteInfo
|
||||||
import android.net.metrics.IpConnectivityLog
|
import android.net.metrics.IpConnectivityLog
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.HandlerThread
|
import android.os.HandlerThread
|
||||||
@@ -60,6 +67,22 @@ import kotlin.test.fail
|
|||||||
internal inline fun <reified T> mock() = Mockito.mock(T::class.java)
|
internal inline fun <reified T> mock() = Mockito.mock(T::class.java)
|
||||||
internal inline fun <reified T> any() = any(T::class.java)
|
internal inline fun <reified T> any() = any(T::class.java)
|
||||||
|
|
||||||
|
internal fun emptyAgentConfig() = NetworkAgentConfig.Builder().build()
|
||||||
|
|
||||||
|
internal fun defaultNc() = NetworkCapabilities.Builder()
|
||||||
|
// Add sensible defaults for agents that don't want to care
|
||||||
|
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED)
|
||||||
|
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING)
|
||||||
|
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
internal fun defaultScore() = FromS(NetworkScore.Builder().build())
|
||||||
|
|
||||||
|
internal fun defaultLp() = LinkProperties().apply {
|
||||||
|
addLinkAddress(LinkAddress(LOCAL_IPV4_ADDRESS, 32))
|
||||||
|
addRoute(RouteInfo(IpPrefix("0.0.0.0/0"), null, null))
|
||||||
|
}
|
||||||
|
|
||||||
internal fun makeMockContentResolver(context: Context) = MockContentResolver(context).apply {
|
internal fun makeMockContentResolver(context: Context) = MockContentResolver(context).apply {
|
||||||
addProvider(Settings.AUTHORITY, FakeSettingsProvider())
|
addProvider(Settings.AUTHORITY, FakeSettingsProvider())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user