Merge "Fix flaky test: testOnNetworkConnectivityReportedFalse" into main

This commit is contained in:
Paul Hu
2023-09-13 02:56:17 +00:00
committed by Gerrit Code Review

View File

@@ -38,9 +38,7 @@ import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_TEST; import static android.net.NetworkCapabilities.TRANSPORT_TEST;
import static android.net.cts.util.CtsNetUtils.TestNetworkCallback; import static android.net.cts.util.CtsNetUtils.TestNetworkCallback;
import static com.android.compatibility.common.util.SystemUtil.callWithShellPermissionIdentity;
import static com.android.compatibility.common.util.SystemUtil.runShellCommand; import static com.android.compatibility.common.util.SystemUtil.runShellCommand;
import static com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity;
import static com.android.testutils.Cleanup.testAndCleanup; import static com.android.testutils.Cleanup.testAndCleanup;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
@@ -82,6 +80,8 @@ import android.util.Pair;
import androidx.test.InstrumentationRegistry; import androidx.test.InstrumentationRegistry;
import com.android.compatibility.common.util.SystemUtil;
import com.android.compatibility.common.util.ThrowingRunnable;
import com.android.internal.telephony.uicc.IccUtils; import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils;
import com.android.modules.utils.build.SdkLevel; import com.android.modules.utils.build.SdkLevel;
@@ -99,6 +99,7 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -143,7 +144,7 @@ public class ConnectivityDiagnosticsManagerTest {
// runWithShellPermissionIdentity, and callWithShellPermissionIdentity ensures Shell Permission // runWithShellPermissionIdentity, and callWithShellPermissionIdentity ensures Shell Permission
// is not interrupted by another operation (which would drop all previously adopted // is not interrupted by another operation (which would drop all previously adopted
// permissions). // permissions).
private Object mShellPermissionsIdentityLock = new Object(); private final Object mShellPermissionsIdentityLock = new Object();
private Context mContext; private Context mContext;
private ConnectivityManager mConnectivityManager; private ConnectivityManager mConnectivityManager;
@@ -177,6 +178,20 @@ public class ConnectivityDiagnosticsManagerTest {
Log.i(TAG, "Waited for broadcast idle for " + (SystemClock.elapsedRealtime() - st) + "ms"); Log.i(TAG, "Waited for broadcast idle for " + (SystemClock.elapsedRealtime() - st) + "ms");
} }
private void runWithShellPermissionIdentity(ThrowingRunnable runnable,
String... permissions) {
synchronized (mShellPermissionsIdentityLock) {
SystemUtil.runWithShellPermissionIdentity(runnable, permissions);
}
}
private <T> T callWithShellPermissionIdentity(Callable<T> callable, String... permissions)
throws Exception {
synchronized (mShellPermissionsIdentityLock) {
return SystemUtil.callWithShellPermissionIdentity(callable, permissions);
}
}
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
mContext = InstrumentationRegistry.getContext(); mContext = InstrumentationRegistry.getContext();
@@ -199,7 +214,7 @@ public class ConnectivityDiagnosticsManagerTest {
runWithShellPermissionIdentity(() -> { runWithShellPermissionIdentity(() -> {
final TestNetworkManager tnm = mContext.getSystemService(TestNetworkManager.class); final TestNetworkManager tnm = mContext.getSystemService(TestNetworkManager.class);
tnm.teardownTestNetwork(mTestNetwork); tnm.teardownTestNetwork(mTestNetwork);
}); }, android.Manifest.permission.MANAGE_TEST_NETWORKS);
mTestNetwork = null; mTestNetwork = null;
} }
@@ -249,7 +264,7 @@ public class ConnectivityDiagnosticsManagerTest {
doBroadcastCarrierConfigsAndVerifyOnConnectivityReportAvailable( doBroadcastCarrierConfigsAndVerifyOnConnectivityReportAvailable(
subId, carrierConfigReceiver, testNetworkCallback); subId, carrierConfigReceiver, testNetworkCallback);
}, () -> { }, () -> {
runWithShellPermissionIdentity( runWithShellPermissionIdentity(
() -> mCarrierConfigManager.overrideConfig(subId, null), () -> mCarrierConfigManager.overrideConfig(subId, null),
android.Manifest.permission.MODIFY_PHONE_STATE); android.Manifest.permission.MODIFY_PHONE_STATE);
mConnectivityManager.unregisterNetworkCallback(testNetworkCallback); mConnectivityManager.unregisterNetworkCallback(testNetworkCallback);
@@ -276,24 +291,20 @@ public class ConnectivityDiagnosticsManagerTest {
CarrierConfigManager.KEY_CARRIER_CERTIFICATE_STRING_ARRAY, CarrierConfigManager.KEY_CARRIER_CERTIFICATE_STRING_ARRAY,
new String[] {getCertHashForThisPackage()}); new String[] {getCertHashForThisPackage()});
synchronized (mShellPermissionsIdentityLock) { runWithShellPermissionIdentity(
runWithShellPermissionIdentity( () -> {
() -> { mCarrierConfigManager.overrideConfig(subId, carrierConfigs);
mCarrierConfigManager.overrideConfig(subId, carrierConfigs); mCarrierConfigManager.notifyConfigChangedForSubId(subId);
mCarrierConfigManager.notifyConfigChangedForSubId(subId); },
}, android.Manifest.permission.MODIFY_PHONE_STATE);
android.Manifest.permission.MODIFY_PHONE_STATE);
}
// TODO(b/157779832): This should use android.permission.CHANGE_NETWORK_STATE. However, the // TODO(b/157779832): This should use android.permission.CHANGE_NETWORK_STATE. However, the
// shell does not have CHANGE_NETWORK_STATE, so use CONNECTIVITY_INTERNAL until the shell // shell does not have CHANGE_NETWORK_STATE, so use CONNECTIVITY_INTERNAL until the shell
// permissions are updated. // permissions are updated.
synchronized (mShellPermissionsIdentityLock) { runWithShellPermissionIdentity(
runWithShellPermissionIdentity( () -> mConnectivityManager.requestNetwork(
() -> mConnectivityManager.requestNetwork( CELLULAR_NETWORK_REQUEST, testNetworkCallback),
CELLULAR_NETWORK_REQUEST, testNetworkCallback), android.Manifest.permission.CONNECTIVITY_INTERNAL);
android.Manifest.permission.CONNECTIVITY_INTERNAL);
}
final Network network = testNetworkCallback.waitForAvailable(); final Network network = testNetworkCallback.waitForAvailable();
assertNotNull(network); assertNotNull(network);
@@ -494,7 +505,7 @@ public class ConnectivityDiagnosticsManagerTest {
final TestNetworkInterface tni = tnm.createTunInterface(new LinkAddress[0]); final TestNetworkInterface tni = tnm.createTunInterface(new LinkAddress[0]);
tnm.setupTestNetwork(tni.getInterfaceName(), administratorUids, BINDER); tnm.setupTestNetwork(tni.getInterfaceName(), administratorUids, BINDER);
return tni; return tni;
}); }, android.Manifest.permission.MANAGE_TEST_NETWORKS);
} }
private static class TestConnectivityDiagnosticsCallback private static class TestConnectivityDiagnosticsCallback
@@ -648,11 +659,9 @@ public class ConnectivityDiagnosticsManagerTest {
final PersistableBundle carrierConfigs; final PersistableBundle carrierConfigs;
try { try {
synchronized (mShellPermissionsIdentityLock) { carrierConfigs = callWithShellPermissionIdentity(
carrierConfigs = callWithShellPermissionIdentity( () -> mCarrierConfigManager.getConfigForSubId(subId),
() -> mCarrierConfigManager.getConfigForSubId(subId), android.Manifest.permission.READ_PHONE_STATE);
android.Manifest.permission.READ_PHONE_STATE);
}
} catch (Exception exception) { } catch (Exception exception) {
// callWithShellPermissionIdentity() threw an Exception - cache it and allow // callWithShellPermissionIdentity() threw an Exception - cache it and allow
// waitForCarrierConfigChanged() to throw it // waitForCarrierConfigChanged() to throw it