Merge "Add more necessary infra to CSTest" into main

This commit is contained in:
Jean Chalard
2023-09-29 03:50:45 +00:00
committed by Gerrit Code Review
2 changed files with 30 additions and 1 deletions

View File

@@ -131,4 +131,8 @@ class CSAgentWrapper(
} }
mgr.unregisterNetworkCallback(cb) mgr.unregisterNetworkCallback(cb)
} }
fun disconnect() {
agent.unregister()
}
} }

View File

@@ -24,13 +24,16 @@ import android.net.NetworkScore
import android.net.PacProxyManager import android.net.PacProxyManager
import android.net.RouteInfo import android.net.RouteInfo
import android.net.networkstack.NetworkStackClientBase import android.net.networkstack.NetworkStackClientBase
import android.os.BatteryStatsManager
import android.os.Handler import android.os.Handler
import android.os.HandlerThread import android.os.HandlerThread
import android.os.UserHandle import android.os.UserHandle
import android.os.UserManager import android.os.UserManager
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
import android.testing.TestableContext import android.testing.TestableContext
import android.util.ArraySet
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import com.android.internal.app.IBatteryStats
import com.android.internal.util.test.BroadcastInterceptingContext import com.android.internal.util.test.BroadcastInterceptingContext
import com.android.modules.utils.build.SdkLevel import com.android.modules.utils.build.SdkLevel
import com.android.networkstack.apishim.common.UnsupportedApiLevelException import com.android.networkstack.apishim.common.UnsupportedApiLevelException
@@ -41,6 +44,7 @@ import com.android.server.connectivity.ConnectivityFlags
import com.android.server.connectivity.MultinetworkPolicyTracker import com.android.server.connectivity.MultinetworkPolicyTracker
import com.android.server.connectivity.MultinetworkPolicyTrackerTestDependencies import com.android.server.connectivity.MultinetworkPolicyTrackerTestDependencies
import com.android.server.connectivity.ProxyTracker import com.android.server.connectivity.ProxyTracker
import com.android.testutils.visibleOnHandlerThread
import com.android.testutils.waitForIdle import com.android.testutils.waitForIdle
import org.mockito.AdditionalAnswers.delegatesTo import org.mockito.AdditionalAnswers.delegatesTo
import org.mockito.Mockito.doAnswer import org.mockito.Mockito.doAnswer
@@ -71,7 +75,7 @@ open class CSTest {
init { init {
if (!SdkLevel.isAtLeastS()) { if (!SdkLevel.isAtLeastS()) {
throw UnsupportedApiLevelException("CSTest subclasses must be annotated to only " + throw UnsupportedApiLevelException("CSTest subclasses must be annotated to only " +
"run on S+, e.g. @DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.R)"); "run on S+, e.g. @DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.R)")
} }
} }
@@ -112,6 +116,7 @@ open class CSTest {
val proxyTracker = ProxyTracker(context, mock<Handler>(), 16 /* EVENT_PROXY_HAS_CHANGED */) val proxyTracker = ProxyTracker(context, mock<Handler>(), 16 /* EVENT_PROXY_HAS_CHANGED */)
val alarmManager = makeMockAlarmManager() val alarmManager = makeMockAlarmManager()
val systemConfigManager = makeMockSystemConfigManager() val systemConfigManager = makeMockSystemConfigManager()
val batteryManager = BatteryStatsManager(mock<IBatteryStats>())
val telephonyManager = mock<TelephonyManager>().also { val telephonyManager = mock<TelephonyManager>().also {
doReturn(true).`when`(it).isDataCapable() doReturn(true).`when`(it).isDataCapable()
} }
@@ -150,6 +155,25 @@ open class CSTest {
// checking permissions. // checking permissions.
override fun isFeatureEnabled(context: Context?, name: String?) = override fun isFeatureEnabled(context: Context?, name: String?) =
enabledFeatures[name] ?: fail("Unmocked feature $name, see CSTest.enabledFeatures") enabledFeatures[name] ?: fail("Unmocked feature $name, see CSTest.enabledFeatures")
// Mocked change IDs
private val enabledChangeIds = ArraySet<Long>()
fun setChangeIdEnabled(enabled: Boolean, changeId: Long) {
// enabledChangeIds is read on the handler thread and maybe the test thread, so
// make sure both threads see it before continuing.
visibleOnHandlerThread(csHandler) {
if (enabled) {
enabledChangeIds.add(changeId)
} else {
enabledChangeIds.remove(changeId)
}
}
}
override fun isChangeEnabled(changeId: Long, pkg: String, user: UserHandle) =
changeId in enabledChangeIds
override fun isChangeEnabled(changeId: Long, uid: Int) =
changeId in enabledChangeIds
} }
inner class CSContext(base: Context) : BroadcastInterceptingContext(base) { inner class CSContext(base: Context) : BroadcastInterceptingContext(base) {
@@ -196,6 +220,7 @@ open class CSTest {
Context.ACTIVITY_SERVICE -> activityManager Context.ACTIVITY_SERVICE -> activityManager
Context.SYSTEM_CONFIG_SERVICE -> systemConfigManager Context.SYSTEM_CONFIG_SERVICE -> systemConfigManager
Context.TELEPHONY_SERVICE -> telephonyManager Context.TELEPHONY_SERVICE -> telephonyManager
Context.BATTERY_STATS_SERVICE -> batteryManager
Context.STATS_MANAGER -> null // Stats manager is final and can't be mocked Context.STATS_MANAGER -> null // Stats manager is final and can't be mocked
else -> super.getSystemService(serviceName) else -> super.getSystemService(serviceName)
} }