Update the way we change meteredness of cellular networks in tests.

SubscriptionManager.setSubscriptionOverrideUnmetered() has been updated
to add NET_CAPABILITY_TEMPORARILY_NOT_METERED instead of
NET_CAPABILITY_NOT_METERED. So, we can't rely on that for changing the
meteredness.

Bug: 179664982
Test: atest tests/cts/hostside/src/com/android/cts/net/HostsideRestrictBackgroundNetworkTests.java
Test: atest tests/cts/hostside/src/com/android/cts/net/HostsideNetworkCallbackTests.java
Ignore-AOSP-First: Handling merge-conflict
Change-Id: I4163b2f9c6f80b4e639d9977ef7e2b444ab12e81
This commit is contained in:
Sudheer Shanka
2021-02-10 04:44:58 +00:00
parent 6281d65f61
commit 2ca64d3c31

View File

@@ -25,7 +25,6 @@ import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static com.android.compatibility.common.util.SystemUtil.runShellCommand; import static com.android.compatibility.common.util.SystemUtil.runShellCommand;
import static com.android.cts.net.hostside.AbstractRestrictBackgroundNetworkTestCase.TAG; import static com.android.cts.net.hostside.AbstractRestrictBackgroundNetworkTestCase.TAG;
import static com.android.cts.net.hostside.AbstractRestrictBackgroundNetworkTestCase.TEST_PKG;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
@@ -43,10 +42,12 @@ import android.net.ConnectivityManager.NetworkCallback;
import android.net.Network; import android.net.Network;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.PersistableBundle;
import android.os.Process; import android.os.Process;
import android.os.UserHandle; import android.os.UserHandle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionPlan; import android.telephony.data.ApnSetting;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
@@ -54,21 +55,24 @@ import androidx.test.platform.app.InstrumentationRegistry;
import com.android.compatibility.common.util.AppStandbyUtils; import com.android.compatibility.common.util.AppStandbyUtils;
import com.android.compatibility.common.util.BatteryUtils; import com.android.compatibility.common.util.BatteryUtils;
import com.android.compatibility.common.util.ShellIdentityUtils;
import com.android.compatibility.common.util.ThrowingRunnable; import com.android.compatibility.common.util.ThrowingRunnable;
import java.time.Period;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class NetworkPolicyTestUtils { public class NetworkPolicyTestUtils {
// android.telephony.CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS
// TODO: Expose it as a @TestApi instead of copying the constant
private static final String KEY_CARRIER_METERED_APN_TYPES_STRINGS =
"carrier_metered_apn_types_strings";
private static final int TIMEOUT_CHANGE_METEREDNESS_MS = 10_000; private static final int TIMEOUT_CHANGE_METEREDNESS_MS = 10_000;
private static ConnectivityManager mCm; private static ConnectivityManager mCm;
private static WifiManager mWm; private static WifiManager mWm;
private static SubscriptionManager mSm; private static CarrierConfigManager mCarrierConfigManager;
private static Boolean mBatterySaverSupported; private static Boolean mBatterySaverSupported;
private static Boolean mDataSaverSupported; private static Boolean mDataSaverSupported;
@@ -223,17 +227,12 @@ public class NetworkPolicyTestUtils {
} }
private static void setCellularMeteredStatus(int subId, boolean metered) throws Exception { private static void setCellularMeteredStatus(int subId, boolean metered) throws Exception {
setSubPlanOwner(subId, TEST_PKG); final PersistableBundle bundle = new PersistableBundle();
try { bundle.putStringArray(KEY_CARRIER_METERED_APN_TYPES_STRINGS,
getSubscriptionManager().setSubscriptionPlans(subId, new String[] {ApnSetting.TYPE_MMS_STRING});
Arrays.asList(buildValidSubscriptionPlan(System.currentTimeMillis()))); ShellIdentityUtils.invokeMethodWithShellPermissionsNoReturn(getCarrierConfigManager(),
final boolean unmeteredOverride = !metered; (cm) -> cm.overrideConfig(subId, metered ? null : bundle));
getSubscriptionManager().setSubscriptionOverrideUnmetered(subId, unmeteredOverride, assertActiveNetworkMetered(metered);
/*timeoutMillis=*/ 0);
assertActiveNetworkMetered(metered);
} finally {
setSubPlanOwner(subId, null);
}
} }
// Copied from cts/tests/tests/net/src/android/net/cts/ConnectivityManagerTest.java // Copied from cts/tests/tests/net/src/android/net/cts/ConnectivityManagerTest.java
@@ -263,20 +262,6 @@ public class NetworkPolicyTestUtils {
} }
} }
private static void setSubPlanOwner(int subId, String packageName) {
executeShellCommand("cmd netpolicy set sub-plan-owner " + subId + " " + packageName);
}
private static SubscriptionPlan buildValidSubscriptionPlan(long dataUsageTime) {
return SubscriptionPlan.Builder
.createRecurring(ZonedDateTime.parse("2007-03-14T00:00:00.000Z"),
Period.ofMonths(1))
.setTitle("CTS")
.setDataLimit(1_000_000_000, SubscriptionPlan.LIMIT_BEHAVIOR_DISABLED)
.setDataUsage(500_000_000, dataUsageTime)
.build();
}
public static void setRestrictBackground(boolean enabled) { public static void setRestrictBackground(boolean enabled) {
if (!isDataSaverSupported()) { if (!isDataSaverSupported()) {
return; return;
@@ -353,12 +338,12 @@ public class NetworkPolicyTestUtils {
return mWm; return mWm;
} }
public static SubscriptionManager getSubscriptionManager() { public static CarrierConfigManager getCarrierConfigManager() {
if (mSm == null) { if (mCarrierConfigManager == null) {
mSm = (SubscriptionManager) getContext().getSystemService( mCarrierConfigManager = (CarrierConfigManager) getContext().getSystemService(
Context.TELEPHONY_SUBSCRIPTION_SERVICE); Context.CARRIER_CONFIG_SERVICE);
} }
return mSm; return mCarrierConfigManager;
} }
public static Context getContext() { public static Context getContext() {