Revert "Fix flakes due to tests resetting CarrierConfig"
This reverts commit c7ed1a195a209d15378033030c29d58cf79dab90.
Reason for revert: possibly fails on S
Bug: 391766151
Change-Id: I24c72b48e037c2e2b7852bcc8300de777a391557
diff --git a/staticlibs/testutils/devicetests/com/android/testutils/CarrierConfigRule.kt b/staticlibs/testutils/devicetests/com/android/testutils/CarrierConfigRule.kt
deleted file mode 100644
index a93ae3e..0000000
--- a/staticlibs/testutils/devicetests/com/android/testutils/CarrierConfigRule.kt
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.testutils.com.android.testutils
-
-import android.Manifest.permission.MODIFY_PHONE_STATE
-import android.Manifest.permission.READ_PHONE_STATE
-import android.os.PersistableBundle
-import android.telephony.CarrierConfigManager
-import android.util.Log
-import androidx.test.platform.app.InstrumentationRegistry
-import com.android.modules.utils.build.SdkLevel.isAtLeastU
-import com.android.testutils.runAsShell
-import com.android.testutils.tryTest
-import kotlin.test.assertNotNull
-import org.junit.rules.TestRule
-import org.junit.runner.Description
-import org.junit.runners.model.Statement
-
-private val TAG = CarrierConfigRule::class.simpleName
-
-/**
- * A [TestRule] that helps set [CarrierConfigManager] overrides for tests and clean up the test
- * configuration automatically on teardown.
- */
-class CarrierConfigRule : TestRule {
- private val ccm by lazy { InstrumentationRegistry.getInstrumentation().context.getSystemService(
- CarrierConfigManager::class.java
- ) }
-
- // Map of (subId) -> (original values of overridden settings)
- private val originalConfigs = mutableMapOf<Int, PersistableBundle>()
-
- override fun apply(base: Statement, description: Description): Statement {
- return CarrierConfigStatement(base, description)
- }
-
- private inner class CarrierConfigStatement(
- private val base: Statement,
- private val description: Description
- ) : Statement() {
- override fun evaluate() {
- tryTest {
- base.evaluate()
- } cleanup {
- cleanUpNow()
- }
- }
- }
-
- /**
- * Add carrier config overrides with the specified configuration.
- *
- * The overrides will automatically be cleaned up when the test case finishes.
- */
- fun addConfigOverrides(subId: Int, config: PersistableBundle) {
- val originalConfig = originalConfigs.computeIfAbsent(subId) { PersistableBundle() }
- val overrideKeys = config.keySet()
- val previousValues = runAsShell(READ_PHONE_STATE) {
- ccm.getConfigForSubIdCompat(subId, overrideKeys)
- }
- // If a key is already in the originalConfig, keep the oldest original overrides
- originalConfig.keySet().forEach {
- previousValues.remove(it)
- }
- originalConfig.putAll(previousValues)
-
- runAsShell(MODIFY_PHONE_STATE) {
- ccm.overrideConfig(subId, config)
- }
- }
-
- /**
- * Cleanup overrides that were added by the test case.
- *
- * This will be called automatically on test teardown, so it does not need to be called by the
- * test case unless cleaning up earlier is required.
- */
- fun cleanUpNow() {
- runAsShell(MODIFY_PHONE_STATE) {
- originalConfigs.forEach { (subId, config) ->
- try {
- // Do not use overrideConfig with null, as it would reset configs that may
- // have been set by target preparers such as
- // ConnectivityTestTargetPreparer / CarrierConfigSetupTest.
- ccm.overrideConfig(subId, config)
- } catch (e: Throwable) {
- Log.e(TAG, "Error resetting carrier config for subId $subId")
- }
- }
- originalConfigs.clear()
- }
- }
-}
-
-private fun CarrierConfigManager.getConfigForSubIdCompat(
- subId: Int,
- keys: Set<String>
-): PersistableBundle {
- return if (isAtLeastU()) {
- // This method is U+
- getConfigForSubId(subId, *keys.toTypedArray())
- } else {
- @Suppress("DEPRECATION")
- val config = assertNotNull(getConfigForSubId(subId))
- val allKeys = config.keySet().toList()
- allKeys.forEach {
- if (!keys.contains(it)) {
- config.remove(it)
- }
- }
- config
- }
-}
diff --git a/tests/cts/net/src/android/net/cts/ConnectivityDiagnosticsManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityDiagnosticsManagerTest.java
index faaadee..ceb48d4 100644
--- a/tests/cts/net/src/android/net/cts/ConnectivityDiagnosticsManagerTest.java
+++ b/tests/cts/net/src/android/net/cts/ConnectivityDiagnosticsManagerTest.java
@@ -88,11 +88,9 @@
import com.android.net.module.util.ArrayTrackRecord;
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo;
import com.android.testutils.DevSdkIgnoreRunner;
-import com.android.testutils.com.android.testutils.CarrierConfigRule;
import org.junit.After;
import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -112,9 +110,6 @@
public class ConnectivityDiagnosticsManagerTest {
private static final String TAG = ConnectivityDiagnosticsManagerTest.class.getSimpleName();
- @Rule
- public final CarrierConfigRule mCarrierConfigRule = new CarrierConfigRule();
-
private static final int CALLBACK_TIMEOUT_MILLIS = 5000;
private static final int NO_CALLBACK_INVOKED_TIMEOUT = 500;
private static final long TIMESTAMP = 123456789L;
@@ -269,6 +264,9 @@
doBroadcastCarrierConfigsAndVerifyOnConnectivityReportAvailable(
subId, carrierConfigReceiver, testNetworkCallback);
}, () -> {
+ runWithShellPermissionIdentity(
+ () -> mCarrierConfigManager.overrideConfig(subId, null),
+ android.Manifest.permission.MODIFY_PHONE_STATE);
mConnectivityManager.unregisterNetworkCallback(testNetworkCallback);
mContext.unregisterReceiver(carrierConfigReceiver);
});
@@ -293,9 +291,9 @@
CarrierConfigManager.KEY_CARRIER_CERTIFICATE_STRING_ARRAY,
new String[] {getCertHashForThisPackage()});
- mCarrierConfigRule.addConfigOverrides(subId, carrierConfigs);
runWithShellPermissionIdentity(
() -> {
+ mCarrierConfigManager.overrideConfig(subId, carrierConfigs);
mCarrierConfigManager.notifyConfigChangedForSubId(subId);
},
android.Manifest.permission.MODIFY_PHONE_STATE);
diff --git a/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt b/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt
index 286e08c..ae848d5 100644
--- a/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt
+++ b/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt
@@ -140,7 +140,6 @@
import com.android.testutils.TestableNetworkAgent.CallbackEntry.OnValidationStatus
import com.android.testutils.TestableNetworkCallback
import com.android.testutils.assertThrows
-import com.android.testutils.com.android.testutils.CarrierConfigRule
import com.android.testutils.runAsShell
import com.android.testutils.tryTest
import com.android.testutils.waitForIdle
@@ -168,7 +167,6 @@
import org.junit.After
import org.junit.Assume.assumeTrue
import org.junit.Before
-import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.any
@@ -227,9 +225,6 @@
@IgnoreUpTo(Build.VERSION_CODES.R)
@RunWith(DevSdkIgnoreRunner::class)
class NetworkAgentTest {
- @get:Rule
- val carrierConfigRule = CarrierConfigRule()
-
private val LOCAL_IPV4_ADDRESS = InetAddresses.parseNumericAddress("192.0.2.1")
private val REMOTE_IPV4_ADDRESS = InetAddresses.parseNumericAddress("192.0.2.2")
@@ -719,6 +714,7 @@
}
val tm = realContext.getSystemService(TelephonyManager::class.java)!!
+ val ccm = realContext.getSystemService(CarrierConfigManager::class.java)!!
val cv = ConditionVariable()
val cpb = PrivilegeWaiterCallback(cv)
@@ -738,13 +734,16 @@
return@tryTest
}
cv.close()
- if (hold) {
- carrierConfigRule.addConfigOverrides(subId, PersistableBundle().also {
- it.putStringArray(CarrierConfigManager.KEY_CARRIER_CERTIFICATE_STRING_ARRAY,
- arrayOf(getCertHash()))
- })
- } else {
- carrierConfigRule.cleanUpNow()
+ runAsShell(MODIFY_PHONE_STATE) {
+ val carrierConfigs = if (hold) {
+ PersistableBundle().also {
+ it.putStringArray(CarrierConfigManager.KEY_CARRIER_CERTIFICATE_STRING_ARRAY,
+ arrayOf(getCertHash()))
+ }
+ } else {
+ null
+ }
+ ccm.overrideConfig(subId, carrierConfigs)
}
assertTrue(cv.block(DEFAULT_TIMEOUT_MS), "Can't change carrier privilege")
} cleanup {
diff --git a/tests/cts/tethering/src/android/tethering/cts/TetheringManagerTest.java b/tests/cts/tethering/src/android/tethering/cts/TetheringManagerTest.java
index 6d53ddf..e0e22e5 100644
--- a/tests/cts/tethering/src/android/tethering/cts/TetheringManagerTest.java
+++ b/tests/cts/tethering/src/android/tethering/cts/TetheringManagerTest.java
@@ -84,11 +84,9 @@
import com.android.modules.utils.build.SdkLevel;
import com.android.testutils.ParcelUtils;
-import com.android.testutils.com.android.testutils.CarrierConfigRule;
import org.junit.After;
import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -104,8 +102,6 @@
@RunWith(AndroidJUnit4.class)
public class TetheringManagerTest {
- @Rule
- public final CarrierConfigRule mCarrierConfigRule = new CarrierConfigRule();
private Context mContext;
@@ -531,13 +527,22 @@
// Override carrier config to ignore entitlement check.
final PersistableBundle bundle = new PersistableBundle();
bundle.putBoolean(CarrierConfigManager.KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL, false);
- mCarrierConfigRule.addConfigOverrides(
- SubscriptionManager.getDefaultSubscriptionId(), bundle);
+ overrideCarrierConfig(bundle);
// Verify that requestLatestTetheringEntitlementResult() can get entitlement
// result TETHER_ERROR_NO_ERROR due to provisioning bypassed.
assertEntitlementResult(listener -> mTM.requestLatestTetheringEntitlementResult(
TETHERING_WIFI, false, c -> c.run(), listener), TETHER_ERROR_NO_ERROR);
+
+ // Reset carrier config.
+ overrideCarrierConfig(null);
+ }
+
+ private void overrideCarrierConfig(PersistableBundle bundle) {
+ final CarrierConfigManager configManager = (CarrierConfigManager) mContext
+ .getSystemService(Context.CARRIER_CONFIG_SERVICE);
+ final int subId = SubscriptionManager.getDefaultSubscriptionId();
+ runAsShell(MODIFY_PHONE_STATE, () -> configManager.overrideConfig(subId, bundle));
}
private boolean isTetheringApnRequired() {