From 8ba46d804fd7b743fa7fc71c532f02441371ea42 Mon Sep 17 00:00:00 2001 From: lifr Date: Thu, 18 Nov 2021 02:37:28 +0800 Subject: [PATCH] [SUBID01-1]Grow NetworkIdentity to include a new mSubId field In the previous design of NSS and NPMS, those only had IMSI to identify the cell network. Now the telephony has created the "subId" handle, which is the preferred mechanism for identifying subscribers. This commit adds NetworkStats support for subscriberId as a part of the network identity key Bug: 80526261 Test: atest NetworkTemplateTest NetworkStatsCollectionTest NetworkStatsServiceTest NetworkIdentityTest Ignore-AOSP-First: merge conflict resolutions (cherry-picked from ag/16826535) Change-Id: I8549b11d0fcfc5a9426724d6b90de27b707cb77c Merged-In: I8549b11d0fcfc5a9426724d6b90de27b707cb77c --- framework-t/api/module-lib-current.txt | 5 +- .../java/android/net/NetworkIdentityTest.kt | 49 ++++++++++++++++--- .../net/NetworkStatsCollectionTest.java | 5 +- .../NetworkStatsDataMigrationUtilsTest.kt | 2 +- .../server/net/NetworkStatsObserversTest.java | 3 +- 5 files changed, 51 insertions(+), 13 deletions(-) diff --git a/framework-t/api/module-lib-current.txt b/framework-t/api/module-lib-current.txt index 4304f6ae86..f308bfd365 100644 --- a/framework-t/api/module-lib-current.txt +++ b/framework-t/api/module-lib-current.txt @@ -42,6 +42,7 @@ package android.net { public class NetworkIdentity { method public int getOemManaged(); method public int getRatType(); + method public int getSubId(); method @Nullable public String getSubscriberId(); method public int getType(); method @Nullable public String getWifiNetworkKey(); @@ -60,6 +61,7 @@ package android.net { method @NonNull public android.net.NetworkIdentity.Builder setOemManaged(int); method @NonNull public android.net.NetworkIdentity.Builder setRatType(int); method @NonNull public android.net.NetworkIdentity.Builder setRoaming(boolean); + method @NonNull public android.net.NetworkIdentity.Builder setSubId(int); method @NonNull public android.net.NetworkIdentity.Builder setSubscriberId(@Nullable String); method @NonNull public android.net.NetworkIdentity.Builder setType(int); method @NonNull public android.net.NetworkIdentity.Builder setWifiNetworkKey(@Nullable String); @@ -72,7 +74,8 @@ package android.net { method @NonNull public android.net.LinkProperties getLinkProperties(); method @NonNull public android.net.Network getNetwork(); method @NonNull public android.net.NetworkCapabilities getNetworkCapabilities(); - method @Nullable public String getSubscriberId(); + method public int getSubId(); + method @Deprecated @Nullable public String getSubscriberId(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator CREATOR; } diff --git a/tests/unit/java/android/net/NetworkIdentityTest.kt b/tests/unit/java/android/net/NetworkIdentityTest.kt index 4b2d8749be..bf5568d4e1 100644 --- a/tests/unit/java/android/net/NetworkIdentityTest.kt +++ b/tests/unit/java/android/net/NetworkIdentityTest.kt @@ -22,6 +22,7 @@ import android.net.ConnectivityManager.TYPE_ETHERNET import android.net.ConnectivityManager.TYPE_MOBILE import android.net.ConnectivityManager.TYPE_NONE import android.net.ConnectivityManager.TYPE_WIFI +import android.net.NetworkCapabilities.TRANSPORT_CELLULAR import android.net.NetworkIdentity.OEM_NONE import android.net.NetworkIdentity.OEM_PAID import android.net.NetworkIdentity.OEM_PRIVATE @@ -39,8 +40,11 @@ import kotlin.test.assertFailsWith import kotlin.test.assertFalse import kotlin.test.assertTrue -private const val TEST_IMSI = "testimsi" private const val TEST_WIFI_KEY = "testwifikey" +private const val TEST_IMSI1 = "testimsi1" +private const val TEST_IMSI2 = "testimsi2" +private const val TEST_SUBID1 = 1 +private const val TEST_SUBID2 = 2 @RunWith(DevSdkIgnoreRunner::class) @DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.R) @@ -84,7 +88,7 @@ class NetworkIdentityTest { fun testIsMetered() { // Verify network is metered. val netIdent1 = NetworkIdentity.buildNetworkIdentity(mockContext, - buildMobileNetworkStateSnapshot(NetworkCapabilities(), TEST_IMSI), + buildMobileNetworkStateSnapshot(NetworkCapabilities(), TEST_IMSI1), false /* defaultNetwork */, TelephonyManager.NETWORK_TYPE_UMTS) assertTrue(netIdent1.isMetered()) @@ -93,7 +97,7 @@ class NetworkIdentityTest { addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) }.build() val netIdent2 = NetworkIdentity.buildNetworkIdentity(mockContext, - buildMobileNetworkStateSnapshot(capsNotMetered, TEST_IMSI), + buildMobileNetworkStateSnapshot(capsNotMetered, TEST_IMSI1), false /* defaultNetwork */, TelephonyManager.NETWORK_TYPE_UMTS) assertFalse(netIdent2.isMetered()) @@ -103,33 +107,38 @@ class NetworkIdentityTest { setCapability(NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED, true) } val netIdent3 = NetworkIdentity.buildNetworkIdentity(mockContext, - buildMobileNetworkStateSnapshot(capsTempNotMetered, TEST_IMSI), + buildMobileNetworkStateSnapshot(capsTempNotMetered, TEST_IMSI1), false /* defaultNetwork */, TelephonyManager.NETWORK_TYPE_UMTS) assertFalse(netIdent3.isMetered()) } @Test fun testBuilder() { + val specifier1 = TelephonyNetworkSpecifier(TEST_SUBID1) val oemPrivateRoamingNotMeteredCap = NetworkCapabilities().apply { addCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE) addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) + addTransportType(TRANSPORT_CELLULAR) + setNetworkSpecifier(specifier1) } val identFromSnapshot = NetworkIdentity.Builder().setNetworkStateSnapshot( - buildMobileNetworkStateSnapshot(oemPrivateRoamingNotMeteredCap, TEST_IMSI)) + buildMobileNetworkStateSnapshot(oemPrivateRoamingNotMeteredCap, TEST_IMSI1)) .setDefaultNetwork(true) .setRatType(TelephonyManager.NETWORK_TYPE_UMTS) + .setSubId(TEST_SUBID1) .build() val identFromLegacyBuild = NetworkIdentity.buildNetworkIdentity(mockContext, - buildMobileNetworkStateSnapshot(oemPrivateRoamingNotMeteredCap, TEST_IMSI), + buildMobileNetworkStateSnapshot(oemPrivateRoamingNotMeteredCap, TEST_IMSI1), true /* defaultNetwork */, TelephonyManager.NETWORK_TYPE_UMTS) val identFromConstructor = NetworkIdentity(TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UMTS, - TEST_IMSI, + TEST_IMSI1, null /* wifiNetworkKey */, true /* roaming */, false /* metered */, true /* defaultNetwork */, - NetworkTemplate.OEM_MANAGED_PRIVATE) + NetworkTemplate.OEM_MANAGED_PRIVATE, + TEST_SUBID1) assertEquals(identFromLegacyBuild, identFromSnapshot) assertEquals(identFromConstructor, identFromSnapshot) @@ -222,4 +231,28 @@ class NetworkIdentityTest { } } } + + @Test + fun testGetSubId() { + val specifier1 = TelephonyNetworkSpecifier(TEST_SUBID1) + val specifier2 = TelephonyNetworkSpecifier(TEST_SUBID2) + val capSUBID1 = NetworkCapabilities().apply { + addTransportType(TRANSPORT_CELLULAR) + setNetworkSpecifier(specifier1) + } + val capSUBID2 = NetworkCapabilities().apply { + addTransportType(TRANSPORT_CELLULAR) + setNetworkSpecifier(specifier2) + } + + val netIdent1 = NetworkIdentity.buildNetworkIdentity(mockContext, + buildMobileNetworkStateSnapshot(capSUBID1, TEST_IMSI1), + false /* defaultNetwork */, TelephonyManager.NETWORK_TYPE_UMTS) + assertEquals(TEST_SUBID1, netIdent1.getSubId()) + + val netIdent2 = NetworkIdentity.buildNetworkIdentity(mockContext, + buildMobileNetworkStateSnapshot(capSUBID2, TEST_IMSI2), + false /* defaultNetwork */, TelephonyManager.NETWORK_TYPE_UMTS) + assertEquals(TEST_SUBID2, netIdent2.getSubId()) + } } diff --git a/tests/unit/java/android/net/NetworkStatsCollectionTest.java b/tests/unit/java/android/net/NetworkStatsCollectionTest.java index c27ee931eb..32c106dbbd 100644 --- a/tests/unit/java/android/net/NetworkStatsCollectionTest.java +++ b/tests/unit/java/android/net/NetworkStatsCollectionTest.java @@ -87,6 +87,7 @@ public class NetworkStatsCollectionTest { private static final String TEST_FILE = "test.bin"; private static final String TEST_IMSI = "310260000000000"; + private static final int TEST_SUBID = 1; private static final long TIME_A = 1326088800000L; // UTC: Monday 9th January 2012 06:00:00 AM private static final long TIME_B = 1326110400000L; // UTC: Monday 9th January 2012 12:00:00 PM @@ -213,7 +214,7 @@ public class NetworkStatsCollectionTest { final NetworkStats.Entry entry = new NetworkStats.Entry(); final NetworkIdentitySet identSet = new NetworkIdentitySet(); identSet.add(new NetworkIdentity(TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN, - TEST_IMSI, null, false, true, true, OEM_NONE)); + TEST_IMSI, null, false, true, true, OEM_NONE, TEST_SUBID)); int myUid = Process.myUid(); int otherUidInSameUser = Process.myUid() + 1; @@ -475,7 +476,7 @@ public class NetworkStatsCollectionTest { final NetworkStatsCollection large = new NetworkStatsCollection(HOUR_IN_MILLIS); final NetworkIdentitySet ident = new NetworkIdentitySet(); ident.add(new NetworkIdentity(ConnectivityManager.TYPE_MOBILE, -1, TEST_IMSI, null, - false, true, true, OEM_NONE)); + false, true, true, OEM_NONE, TEST_SUBID)); large.recordData(ident, UID_ALL, SET_ALL, TAG_NONE, TIME_A, TIME_B, new NetworkStats.Entry(12_730_893_164L, 1, 0, 0, 0)); diff --git a/tests/unit/java/android/net/netstats/NetworkStatsDataMigrationUtilsTest.kt b/tests/unit/java/android/net/netstats/NetworkStatsDataMigrationUtilsTest.kt index e4943ea9b5..743d39e6cd 100644 --- a/tests/unit/java/android/net/netstats/NetworkStatsDataMigrationUtilsTest.kt +++ b/tests/unit/java/android/net/netstats/NetworkStatsDataMigrationUtilsTest.kt @@ -46,7 +46,7 @@ class NetworkStatsDataMigrationUtilsTest { @Test fun testReadPlatformCollection() { - // Verify the method throws for wrong file version. + // Verify the method throws for wrong file format. assertFailsWith { NetworkStatsDataMigrationUtils.readPlatformCollection( NetworkStatsCollection.Builder(BUCKET_DURATION_MS), diff --git a/tests/unit/java/com/android/server/net/NetworkStatsObserversTest.java b/tests/unit/java/com/android/server/net/NetworkStatsObserversTest.java index 66dcf6d2c7..f447709033 100644 --- a/tests/unit/java/com/android/server/net/NetworkStatsObserversTest.java +++ b/tests/unit/java/com/android/server/net/NetworkStatsObserversTest.java @@ -78,6 +78,7 @@ public class NetworkStatsObserversTest { private static final String IMSI_1 = "310004"; private static final String IMSI_2 = "310260"; + private static final int SUBID_1 = 1; private static final String TEST_SSID = "AndroidAP"; private static NetworkTemplate sTemplateWifi = buildTemplateWifiWildcard(); @@ -224,7 +225,7 @@ public class NetworkStatsObserversTest { identSet.add(new NetworkIdentity( TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_UNKNOWN, IMSI_1, null /* networkId */, false /* roaming */, true /* metered */, - true /* defaultNetwork */, OEM_NONE)); + true /* defaultNetwork */, OEM_NONE, SUBID_1)); return identSet; }