Allow for mocking an SDK in the tests

Test: in followup patches
Change-Id: I540ce2a455c92be52eb94fbd4b54a2081d04d25e
This commit is contained in:
Chalard Jean
2023-10-07 15:17:07 +09:00
parent af11354ba5
commit eb66389d6a
3 changed files with 55 additions and 18 deletions

View File

@@ -97,12 +97,14 @@ import static android.os.Process.VPN_UID;
import static android.system.OsConstants.ETH_P_ALL;
import static android.system.OsConstants.IPPROTO_TCP;
import static android.system.OsConstants.IPPROTO_UDP;
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.enforceAnyPermissionOf;
import static com.android.net.module.util.PermissionUtils.enforceNetworkStackPermission;
import static com.android.net.module.util.PermissionUtils.enforceNetworkStackPermissionOr;
import static com.android.server.ConnectivityStatsLog.CONNECTIVITY_STATE_SAMPLE;
import static java.util.Map.Entry;
import android.Manifest;
@@ -1315,6 +1317,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
return SdkLevel.isAtLeastU();
}
public boolean isAtLeastV() {
return SdkLevel.isAtLeastV();
}
/**
* Get system properties to use in ConnectivityService.
*/

View File

@@ -26,19 +26,14 @@ import android.content.res.Resources
import android.net.ConnectivityManager
import android.net.INetd
import android.net.InetAddresses
import android.net.IpPrefix
import android.net.LinkAddress
import android.net.LinkProperties
import android.net.NetworkAgentConfig
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_VCN_MANAGED
import android.net.NetworkPolicyManager
import android.net.NetworkProvider
import android.net.NetworkScore
import android.net.PacProxyManager
import android.net.RouteInfo
import android.net.networkstack.NetworkStackClientBase
import android.os.BatteryStatsManager
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)
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.
*
@@ -193,6 +196,24 @@ open class CSTest {
changeId in enabledChangeIds
override fun isChangeEnabled(changeId: Long, uid: Int) =
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) {
@@ -248,19 +269,6 @@ open class CSTest {
// Utility methods for subclasses to use
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
// creation.
fun Agent(

View File

@@ -30,6 +30,13 @@ import android.content.pm.UserInfo
import android.content.res.Resources
import android.net.IDnsResolver
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.os.Handler
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> 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 {
addProvider(Settings.AUTHORITY, FakeSettingsProvider())
}