Add CTS for getAllNetworkStateSnapshots
Test: atest CtsNetTestCases:android.net.cts.ConnectivityManagerTest#testGetAllNetworkStateSnapshots --rerun-until-failure 100 Test: atest CtsNetTestCasesLatestSdk:android.net.cts.ConnectivityManagerTest on R device Bug: 188140631 Merged-In: I573b009bd05bbc0c855aaa6e20cb8ebde6729936 Change-Id: I573b009bd05bbc0c855aaa6e20cb8ebde6729936 (cherry-picked from ag/14598438)
This commit is contained in:
@@ -74,9 +74,11 @@ import static com.android.testutils.TestPermissionUtil.runAsShell;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertNotEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertNotSame;
|
import static org.junit.Assert.assertNotSame;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
|
import static org.junit.Assert.assertThrows;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
import static org.junit.Assume.assumeTrue;
|
import static org.junit.Assume.assumeTrue;
|
||||||
@@ -107,9 +109,12 @@ import android.net.NetworkInfo;
|
|||||||
import android.net.NetworkInfo.DetailedState;
|
import android.net.NetworkInfo.DetailedState;
|
||||||
import android.net.NetworkInfo.State;
|
import android.net.NetworkInfo.State;
|
||||||
import android.net.NetworkRequest;
|
import android.net.NetworkRequest;
|
||||||
|
import android.net.NetworkSpecifier;
|
||||||
|
import android.net.NetworkStateSnapshot;
|
||||||
import android.net.NetworkUtils;
|
import android.net.NetworkUtils;
|
||||||
import android.net.ProxyInfo;
|
import android.net.ProxyInfo;
|
||||||
import android.net.SocketKeepalive;
|
import android.net.SocketKeepalive;
|
||||||
|
import android.net.TelephonyNetworkSpecifier;
|
||||||
import android.net.TestNetworkInterface;
|
import android.net.TestNetworkInterface;
|
||||||
import android.net.TestNetworkManager;
|
import android.net.TestNetworkManager;
|
||||||
import android.net.TetheringManager;
|
import android.net.TetheringManager;
|
||||||
@@ -128,6 +133,7 @@ import android.os.UserHandle;
|
|||||||
import android.os.VintfRuntimeInfo;
|
import android.os.VintfRuntimeInfo;
|
||||||
import android.platform.test.annotations.AppModeFull;
|
import android.platform.test.annotations.AppModeFull;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
@@ -178,6 +184,7 @@ import java.nio.charset.StandardCharsets;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
@@ -439,6 +446,68 @@ public class ConnectivityManagerTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getSubscriberIdForCellNetwork(Network cellNetwork) {
|
||||||
|
final NetworkCapabilities cellCaps = mCm.getNetworkCapabilities(cellNetwork);
|
||||||
|
final NetworkSpecifier specifier = cellCaps.getNetworkSpecifier();
|
||||||
|
assertTrue(specifier instanceof TelephonyNetworkSpecifier);
|
||||||
|
// Get subscription from Telephony network specifier.
|
||||||
|
final int subId = ((TelephonyNetworkSpecifier) specifier).getSubscriptionId();
|
||||||
|
assertNotEquals(SubscriptionManager.INVALID_SUBSCRIPTION_ID, subId);
|
||||||
|
|
||||||
|
// Get subscriber Id from telephony manager.
|
||||||
|
final TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
|
||||||
|
return runWithShellPermissionIdentity(() -> tm.getSubscriberId(subId),
|
||||||
|
android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.R)
|
||||||
|
@Test
|
||||||
|
public void testGetAllNetworkStateSnapshots()
|
||||||
|
throws InterruptedException {
|
||||||
|
// Make sure cell is active to retrieve IMSI for verification in later step.
|
||||||
|
final Network cellNetwork = mCtsNetUtils.connectToCell();
|
||||||
|
final String subscriberId = getSubscriberIdForCellNetwork(cellNetwork);
|
||||||
|
assertFalse(TextUtils.isEmpty(subscriberId));
|
||||||
|
|
||||||
|
// Verify the API cannot be called without proper permission.
|
||||||
|
assertThrows(SecurityException.class, () -> mCm.getAllNetworkStateSnapshots());
|
||||||
|
|
||||||
|
// Get all networks, verify the result of getAllNetworkStateSnapshots matches the result
|
||||||
|
// got from other APIs.
|
||||||
|
final Network[] networks = mCm.getAllNetworks();
|
||||||
|
assertGreaterOrEqual(networks.length, 1);
|
||||||
|
final List<NetworkStateSnapshot> snapshots = runWithShellPermissionIdentity(
|
||||||
|
() -> mCm.getAllNetworkStateSnapshots(), NETWORK_SETTINGS);
|
||||||
|
assertEquals(networks.length, snapshots.size());
|
||||||
|
for (final Network network : networks) {
|
||||||
|
// Can't use a lambda because it will cause the test to crash on R with
|
||||||
|
// NoClassDefFoundError.
|
||||||
|
NetworkStateSnapshot snapshot = null;
|
||||||
|
for (NetworkStateSnapshot item : snapshots) {
|
||||||
|
if (item.getNetwork().equals(network)) {
|
||||||
|
snapshot = item;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertNotNull(snapshot);
|
||||||
|
final NetworkCapabilities caps =
|
||||||
|
Objects.requireNonNull(mCm.getNetworkCapabilities(network));
|
||||||
|
// Redact specifier of the capabilities of the snapshot before comparing since
|
||||||
|
// the result returned from getNetworkCapabilities always get redacted.
|
||||||
|
final NetworkSpecifier redactedSnapshotCapSpecifier =
|
||||||
|
snapshot.getNetworkCapabilities().getNetworkSpecifier().redact();
|
||||||
|
assertEquals("", caps.describeImmutableDifferences(
|
||||||
|
snapshot.getNetworkCapabilities()
|
||||||
|
.setNetworkSpecifier(redactedSnapshotCapSpecifier)));
|
||||||
|
assertEquals(mCm.getLinkProperties(network), snapshot.getLinkProperties());
|
||||||
|
assertEquals(mCm.getNetworkInfo(network).getType(), snapshot.getLegacyType());
|
||||||
|
|
||||||
|
if (network.equals(cellNetwork)) {
|
||||||
|
assertEquals(subscriberId, snapshot.getSubscriberId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests that connections can be opened on WiFi and cellphone networks,
|
* Tests that connections can be opened on WiFi and cellphone networks,
|
||||||
* and that they are made from different IP addresses.
|
* and that they are made from different IP addresses.
|
||||||
|
|||||||
Reference in New Issue
Block a user