Merge "Add more necessary infra to CSTest" into main
This commit is contained in:
@@ -131,4 +131,8 @@ class CSAgentWrapper(
|
|||||||
}
|
}
|
||||||
mgr.unregisterNetworkCallback(cb)
|
mgr.unregisterNetworkCallback(cb)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun disconnect() {
|
||||||
|
agent.unregister()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user