Mock connectivity resources in integration tests
The resources may have different values depending on devices, and resources IDs may mismatch if the test was not built at the same time as the installed module, so mock the resources to allow running the integration tests on more builds. Bug: 193847396 Test: atest FrameworksNetIntegrationTests Ignore-AOSP-First: cherry-pick created Change-Id: Ic33d897690a8ea84a78c01dc5f2b2e2c473d57df
This commit is contained in:
@@ -30,6 +30,7 @@ android_test {
|
|||||||
],
|
],
|
||||||
libs: [
|
libs: [
|
||||||
"android.test.mock",
|
"android.test.mock",
|
||||||
|
"ServiceConnectivityResources",
|
||||||
],
|
],
|
||||||
static_libs: [
|
static_libs: [
|
||||||
"NetworkStackApiStableLib",
|
"NetworkStackApiStableLib",
|
||||||
|
|||||||
@@ -23,7 +23,9 @@ import android.content.Context.BIND_AUTO_CREATE
|
|||||||
import android.content.Context.BIND_IMPORTANT
|
import android.content.Context.BIND_IMPORTANT
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.ServiceConnection
|
import android.content.ServiceConnection
|
||||||
|
import android.content.res.Resources
|
||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.ConnectivityResources
|
||||||
import android.net.IDnsResolver
|
import android.net.IDnsResolver
|
||||||
import android.net.INetd
|
import android.net.INetd
|
||||||
import android.net.LinkProperties
|
import android.net.LinkProperties
|
||||||
@@ -35,6 +37,7 @@ import android.net.NetworkRequest
|
|||||||
import android.net.TestNetworkStackClient
|
import android.net.TestNetworkStackClient
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.net.metrics.IpConnectivityLog
|
import android.net.metrics.IpConnectivityLog
|
||||||
|
import android.net.util.MultinetworkPolicyTracker
|
||||||
import android.os.ConditionVariable
|
import android.os.ConditionVariable
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.os.SystemConfigManager
|
import android.os.SystemConfigManager
|
||||||
@@ -43,6 +46,7 @@ import android.testing.TestableContext
|
|||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
import androidx.test.platform.app.InstrumentationRegistry
|
import androidx.test.platform.app.InstrumentationRegistry
|
||||||
|
import com.android.connectivity.resources.R
|
||||||
import com.android.server.ConnectivityService
|
import com.android.server.ConnectivityService
|
||||||
import com.android.server.NetworkAgentWrapper
|
import com.android.server.NetworkAgentWrapper
|
||||||
import com.android.server.TestNetIdManager
|
import com.android.server.TestNetIdManager
|
||||||
@@ -59,6 +63,7 @@ import org.mockito.ArgumentMatchers.anyString
|
|||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
import org.mockito.Mockito.any
|
import org.mockito.Mockito.any
|
||||||
import org.mockito.Mockito.anyInt
|
import org.mockito.Mockito.anyInt
|
||||||
|
import org.mockito.Mockito.doAnswer
|
||||||
import org.mockito.Mockito.doNothing
|
import org.mockito.Mockito.doNothing
|
||||||
import org.mockito.Mockito.doReturn
|
import org.mockito.Mockito.doReturn
|
||||||
import org.mockito.Mockito.eq
|
import org.mockito.Mockito.eq
|
||||||
@@ -93,6 +98,10 @@ class ConnectivityServiceIntegrationTest {
|
|||||||
private lateinit var dnsResolver: IDnsResolver
|
private lateinit var dnsResolver: IDnsResolver
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var systemConfigManager: SystemConfigManager
|
private lateinit var systemConfigManager: SystemConfigManager
|
||||||
|
@Mock
|
||||||
|
private lateinit var resources: Resources
|
||||||
|
@Mock
|
||||||
|
private lateinit var resourcesContext: Context
|
||||||
@Spy
|
@Spy
|
||||||
private var context = TestableContext(realContext)
|
private var context = TestableContext(realContext)
|
||||||
|
|
||||||
@@ -110,9 +119,11 @@ class ConnectivityServiceIntegrationTest {
|
|||||||
|
|
||||||
private val realContext get() = InstrumentationRegistry.getInstrumentation().context
|
private val realContext get() = InstrumentationRegistry.getInstrumentation().context
|
||||||
private val httpProbeUrl get() =
|
private val httpProbeUrl get() =
|
||||||
realContext.getResources().getString(R.string.config_captive_portal_http_url)
|
realContext.getResources().getString(com.android.server.net.integrationtests.R.string
|
||||||
|
.config_captive_portal_http_url)
|
||||||
private val httpsProbeUrl get() =
|
private val httpsProbeUrl get() =
|
||||||
realContext.getResources().getString(R.string.config_captive_portal_https_url)
|
realContext.getResources().getString(com.android.server.net.integrationtests.R.string
|
||||||
|
.config_captive_portal_https_url)
|
||||||
|
|
||||||
private class InstrumentationServiceConnection : ServiceConnection {
|
private class InstrumentationServiceConnection : ServiceConnection {
|
||||||
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
|
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
|
||||||
@@ -156,6 +167,27 @@ class ConnectivityServiceIntegrationTest {
|
|||||||
.getSystemService(Context.SYSTEM_CONFIG_SERVICE)
|
.getSystemService(Context.SYSTEM_CONFIG_SERVICE)
|
||||||
doReturn(IntArray(0)).`when`(systemConfigManager).getSystemPermissionUids(anyString())
|
doReturn(IntArray(0)).`when`(systemConfigManager).getSystemPermissionUids(anyString())
|
||||||
|
|
||||||
|
doReturn(60000).`when`(resources).getInteger(R.integer.config_networkTransitionTimeout)
|
||||||
|
doReturn("").`when`(resources).getString(R.string.config_networkCaptivePortalServerUrl)
|
||||||
|
doReturn(arrayOf<String>("test_wlan_wol")).`when`(resources)
|
||||||
|
.getStringArray(R.array.config_wakeonlan_supported_interfaces)
|
||||||
|
doReturn(arrayOf("0,1", "1,3")).`when`(resources)
|
||||||
|
.getStringArray(R.array.config_networkSupportedKeepaliveCount)
|
||||||
|
doReturn(emptyArray<String>()).`when`(resources)
|
||||||
|
.getStringArray(R.array.config_networkNotifySwitches)
|
||||||
|
doReturn(intArrayOf(10, 11, 12, 14, 15)).`when`(resources)
|
||||||
|
.getIntArray(R.array.config_protectedNetworks)
|
||||||
|
// We don't test the actual notification value strings, so just return an empty array.
|
||||||
|
// It doesn't matter what the values are as long as it's not null.
|
||||||
|
doReturn(emptyArray<String>()).`when`(resources).getStringArray(
|
||||||
|
R.array.network_switch_type_name)
|
||||||
|
doReturn(1).`when`(resources).getInteger(R.integer.config_networkAvoidBadWifi)
|
||||||
|
doReturn(R.array.config_networkSupportedKeepaliveCount).`when`(resources)
|
||||||
|
.getIdentifier(eq("config_networkSupportedKeepaliveCount"), eq("array"), any())
|
||||||
|
|
||||||
|
doReturn(resources).`when`(resourcesContext).getResources()
|
||||||
|
ConnectivityResources.setResourcesContextForTest(resourcesContext)
|
||||||
|
|
||||||
networkStackClient = TestNetworkStackClient(realContext)
|
networkStackClient = TestNetworkStackClient(realContext)
|
||||||
networkStackClient.start()
|
networkStackClient.start()
|
||||||
|
|
||||||
@@ -176,12 +208,19 @@ class ConnectivityServiceIntegrationTest {
|
|||||||
doReturn(mock(ProxyTracker::class.java)).`when`(deps).makeProxyTracker(any(), any())
|
doReturn(mock(ProxyTracker::class.java)).`when`(deps).makeProxyTracker(any(), any())
|
||||||
doReturn(mock(MockableSystemProperties::class.java)).`when`(deps).systemProperties
|
doReturn(mock(MockableSystemProperties::class.java)).`when`(deps).systemProperties
|
||||||
doReturn(TestNetIdManager()).`when`(deps).makeNetIdManager()
|
doReturn(TestNetIdManager()).`when`(deps).makeNetIdManager()
|
||||||
|
doAnswer { inv ->
|
||||||
|
object : MultinetworkPolicyTracker(inv.getArgument(0), inv.getArgument(1),
|
||||||
|
inv.getArgument(2)) {
|
||||||
|
override fun getResourcesForActiveSubId() = resources
|
||||||
|
}
|
||||||
|
}.`when`(deps).makeMultinetworkPolicyTracker(any(), any(), any())
|
||||||
return deps
|
return deps
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
fun tearDown() {
|
fun tearDown() {
|
||||||
nsInstrumentation.clearAllState()
|
nsInstrumentation.clearAllState()
|
||||||
|
ConnectivityResources.setResourcesContextForTest(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user