From 6c7570ae907f91752aae1a5416153e23fa0b001e Mon Sep 17 00:00:00 2001 From: Remi NGUYEN VAN Date: Wed, 4 Aug 2021 19:19:49 +0900 Subject: [PATCH] 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 Merged-In: Ic33d897690a8ea84a78c01dc5f2b2e2c473d57df Change-Id: Ic33d897690a8ea84a78c01dc5f2b2e2c473d57df --- tests/integration/Android.bp | 1 + .../ConnectivityServiceIntegrationTest.kt | 43 ++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/tests/integration/Android.bp b/tests/integration/Android.bp index 7c42811c14..2bc985a144 100644 --- a/tests/integration/Android.bp +++ b/tests/integration/Android.bp @@ -29,6 +29,7 @@ android_test { ], libs: [ "android.test.mock", + "ServiceConnectivityResources", ], static_libs: [ "NetworkStackApiStableLib", diff --git a/tests/integration/src/com/android/server/net/integrationtests/ConnectivityServiceIntegrationTest.kt b/tests/integration/src/com/android/server/net/integrationtests/ConnectivityServiceIntegrationTest.kt index e039ef0725..80338aa2c0 100644 --- a/tests/integration/src/com/android/server/net/integrationtests/ConnectivityServiceIntegrationTest.kt +++ b/tests/integration/src/com/android/server/net/integrationtests/ConnectivityServiceIntegrationTest.kt @@ -23,7 +23,9 @@ import android.content.Context.BIND_AUTO_CREATE import android.content.Context.BIND_IMPORTANT import android.content.Intent import android.content.ServiceConnection +import android.content.res.Resources import android.net.ConnectivityManager +import android.net.ConnectivityResources import android.net.IDnsResolver import android.net.INetd import android.net.LinkProperties @@ -35,6 +37,7 @@ import android.net.NetworkRequest import android.net.TestNetworkStackClient import android.net.Uri import android.net.metrics.IpConnectivityLog +import android.net.util.MultinetworkPolicyTracker import android.os.ConditionVariable import android.os.IBinder import android.os.SystemConfigManager @@ -43,6 +46,7 @@ import android.testing.TestableContext import android.util.Log import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry +import com.android.connectivity.resources.R import com.android.server.ConnectivityService import com.android.server.NetworkAgentWrapper import com.android.server.TestNetIdManager @@ -59,6 +63,7 @@ import org.mockito.ArgumentMatchers.anyString import org.mockito.Mock import org.mockito.Mockito.any import org.mockito.Mockito.anyInt +import org.mockito.Mockito.doAnswer import org.mockito.Mockito.doNothing import org.mockito.Mockito.doReturn import org.mockito.Mockito.eq @@ -93,6 +98,10 @@ class ConnectivityServiceIntegrationTest { private lateinit var dnsResolver: IDnsResolver @Mock private lateinit var systemConfigManager: SystemConfigManager + @Mock + private lateinit var resources: Resources + @Mock + private lateinit var resourcesContext: Context @Spy private var context = TestableContext(realContext) @@ -110,9 +119,11 @@ class ConnectivityServiceIntegrationTest { private val realContext get() = InstrumentationRegistry.getInstrumentation().context 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() = - 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 { override fun onServiceConnected(name: ComponentName?, service: IBinder?) { @@ -156,6 +167,27 @@ class ConnectivityServiceIntegrationTest { .getSystemService(Context.SYSTEM_CONFIG_SERVICE) 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("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()).`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()).`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.start() @@ -176,12 +208,19 @@ class ConnectivityServiceIntegrationTest { doReturn(mock(ProxyTracker::class.java)).`when`(deps).makeProxyTracker(any(), any()) doReturn(mock(MockableSystemProperties::class.java)).`when`(deps).systemProperties 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 } @After fun tearDown() { nsInstrumentation.clearAllState() + ConnectivityResources.setResourcesContextForTest(null) } @Test