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