From d97e5a42d436f35e2d07b1d7cafad4e3cefc1efe Mon Sep 17 00:00:00 2001 From: Aaron Huang Date: Tue, 8 Feb 2022 17:08:28 +0800 Subject: [PATCH 1/2] Add NetworkTemplateTest to common test for cts coverage Test for NetworkTemplate.Builder Ignore-AOSP-First: Required API is not in downstream yet Bug: 215435701 Test: CtsNetTestCases Change-Id: I3a55bc74388fa34a142abec308b67b185641c460 --- .../net/netstats/NetworkTemplateTest.kt | 191 ++++++++++++++++++ .../java/android/net/NetworkTemplateTest.kt | 143 ------------- 2 files changed, 191 insertions(+), 143 deletions(-) create mode 100644 tests/common/java/android/net/netstats/NetworkTemplateTest.kt diff --git a/tests/common/java/android/net/netstats/NetworkTemplateTest.kt b/tests/common/java/android/net/netstats/NetworkTemplateTest.kt new file mode 100644 index 0000000000..eb2df0d457 --- /dev/null +++ b/tests/common/java/android/net/netstats/NetworkTemplateTest.kt @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2022 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 android.net.netstats + +import android.net.NetworkStats.DEFAULT_NETWORK_ALL +import android.net.NetworkStats.METERED_ALL +import android.net.NetworkStats.METERED_YES +import android.net.NetworkStats.ROAMING_ALL +import android.net.NetworkTemplate +import android.net.NetworkTemplate.MATCH_BLUETOOTH +import android.net.NetworkTemplate.MATCH_CARRIER +import android.net.NetworkTemplate.MATCH_ETHERNET +import android.net.NetworkTemplate.MATCH_MOBILE +import android.net.NetworkTemplate.MATCH_MOBILE_WILDCARD +import android.net.NetworkTemplate.MATCH_PROXY +import android.net.NetworkTemplate.MATCH_WIFI +import android.net.NetworkTemplate.MATCH_WIFI_WILDCARD +import android.net.NetworkTemplate.NETWORK_TYPE_ALL +import android.net.NetworkTemplate.OEM_MANAGED_ALL +import android.telephony.TelephonyManager +import com.android.net.module.util.NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL +import com.android.net.module.util.NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT +import com.android.testutils.ConnectivityModuleTest +import com.android.testutils.DevSdkIgnoreRule +import com.android.testutils.SC_V2 +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith + +private const val TEST_IMSI1 = "imsi" +private const val TEST_WIFI_KEY1 = "wifiKey1" +private const val TEST_WIFI_KEY2 = "wifiKey2" + +@RunWith(JUnit4::class) +@ConnectivityModuleTest +class NetworkTemplateTest { + @Rule + @JvmField + val ignoreRule = DevSdkIgnoreRule(ignoreClassUpTo = SC_V2) + + @Test + fun testBuilderMatchRules() { + // Verify unknown match rules cannot construct templates. + listOf(Integer.MIN_VALUE, -1, Integer.MAX_VALUE).forEach { + assertFailsWith { + NetworkTemplate.Builder(it).build() + } + } + + // Verify hidden match rules cannot construct templates. + listOf(MATCH_WIFI_WILDCARD, MATCH_MOBILE_WILDCARD, MATCH_PROXY).forEach { + assertFailsWith { + NetworkTemplate.Builder(it).build() + } + } + + // Verify template which matches metered cellular and carrier networks with + // the given IMSI. See buildTemplateMobileAll and buildTemplateCarrierMetered. + listOf(MATCH_MOBILE, MATCH_CARRIER).forEach { matchRule -> + NetworkTemplate.Builder(matchRule).setSubscriberIds(setOf(TEST_IMSI1)) + .setMeteredness(METERED_YES).build().let { + val expectedTemplate = NetworkTemplate(matchRule, TEST_IMSI1, + arrayOf(TEST_IMSI1), arrayOf(), METERED_YES, + ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, + OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) + assertEquals(expectedTemplate, it) + } + } + + // Verify carrier template cannot be created without IMSI. + assertFailsWith { + NetworkTemplate.Builder(MATCH_CARRIER).build() + } + + // Verify template which matches metered cellular networks, + // regardless of IMSI. See buildTemplateMobileWildcard. + NetworkTemplate.Builder(MATCH_MOBILE).setMeteredness(METERED_YES).build().let { + val expectedTemplate = NetworkTemplate(MATCH_MOBILE_WILDCARD, null /*subscriberId*/, + null /*subscriberIds*/, arrayOf(), + METERED_YES, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, + OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL) + assertEquals(expectedTemplate, it) + } + + // Verify template which matches metered cellular networks and ratType. + // See NetworkTemplate#buildTemplateMobileWithRatType. + NetworkTemplate.Builder(MATCH_MOBILE).setSubscriberIds(setOf(TEST_IMSI1)) + .setMeteredness(METERED_YES).setRatType(TelephonyManager.NETWORK_TYPE_UMTS) + .build().let { + val expectedTemplate = NetworkTemplate(MATCH_MOBILE, TEST_IMSI1, + arrayOf(TEST_IMSI1), arrayOf(), METERED_YES, + ROAMING_ALL, DEFAULT_NETWORK_ALL, TelephonyManager.NETWORK_TYPE_UMTS, + OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) + assertEquals(expectedTemplate, it) + } + + // Verify template which matches all wifi networks, + // regardless of Wifi Network Key. See buildTemplateWifiWildcard and buildTemplateWifi. + NetworkTemplate.Builder(MATCH_WIFI).build().let { + val expectedTemplate = NetworkTemplate(MATCH_WIFI_WILDCARD, null /*subscriberId*/, + null /*subscriberIds*/, arrayOf(), + METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, + OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL) + assertEquals(expectedTemplate, it) + } + + // Verify template which matches wifi networks with the given Wifi Network Key. + // See buildTemplateWifi(wifiNetworkKey). + NetworkTemplate.Builder(MATCH_WIFI).setWifiNetworkKeys(setOf(TEST_WIFI_KEY1)).build().let { + val expectedTemplate = NetworkTemplate(MATCH_WIFI, null /*subscriberId*/, + null /*subscriberIds*/, arrayOf(TEST_WIFI_KEY1), + METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, + OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL) + assertEquals(expectedTemplate, it) + } + + // Verify template which matches all wifi networks with the + // given Wifi Network Key, and IMSI. See buildTemplateWifi(wifiNetworkKey, subscriberId). + NetworkTemplate.Builder(MATCH_WIFI).setSubscriberIds(setOf(TEST_IMSI1)) + .setWifiNetworkKeys(setOf(TEST_WIFI_KEY1)).build().let { + val expectedTemplate = NetworkTemplate(MATCH_WIFI, TEST_IMSI1, + arrayOf(TEST_IMSI1), arrayOf(TEST_WIFI_KEY1), + METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, + OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) + assertEquals(expectedTemplate, it) + } + + // Verify template which matches ethernet and bluetooth networks. + // See buildTemplateEthernet and buildTemplateBluetooth. + listOf(MATCH_ETHERNET, MATCH_BLUETOOTH).forEach { matchRule -> + NetworkTemplate.Builder(matchRule).build().let { + val expectedTemplate = NetworkTemplate(matchRule, null /*subscriberId*/, + null /*subscriberIds*/, arrayOf(), + METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, + OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL) + assertEquals(expectedTemplate, it) + } + } + } + + @Test + fun testBuilderWifiNetworkKeys() { + // Verify template builder which generates same template with the given different + // sequence keys. + NetworkTemplate.Builder(MATCH_WIFI).setWifiNetworkKeys( + setOf(TEST_WIFI_KEY1, TEST_WIFI_KEY2)).build().let { + val expectedTemplate = NetworkTemplate.Builder(MATCH_WIFI).setWifiNetworkKeys( + setOf(TEST_WIFI_KEY2, TEST_WIFI_KEY1)).build() + assertEquals(expectedTemplate, it) + } + + // Verify template which matches non-wifi networks with the given key is invalid. + listOf(MATCH_MOBILE, MATCH_CARRIER, MATCH_ETHERNET, MATCH_BLUETOOTH, -1, + Integer.MAX_VALUE).forEach { matchRule -> + assertFailsWith { + NetworkTemplate.Builder(matchRule).setWifiNetworkKeys(setOf(TEST_WIFI_KEY1)).build() + } + } + + // Verify template which matches wifi networks with the given null key is invalid. + assertFailsWith { + NetworkTemplate.Builder(MATCH_WIFI).setWifiNetworkKeys(setOf(null)).build() + } + + // Verify template which matches wifi wildcard with the given empty key set. + NetworkTemplate.Builder(MATCH_WIFI).setWifiNetworkKeys(setOf()).build().let { + val expectedTemplate = NetworkTemplate(MATCH_WIFI_WILDCARD, null /*subscriberId*/, + arrayOf() /*subscriberIds*/, arrayOf(), + METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, + OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL) + assertEquals(expectedTemplate, it) + } + } +} diff --git a/tests/unit/java/android/net/NetworkTemplateTest.kt b/tests/unit/java/android/net/NetworkTemplateTest.kt index 453612f96f..abd1825184 100644 --- a/tests/unit/java/android/net/NetworkTemplateTest.kt +++ b/tests/unit/java/android/net/NetworkTemplateTest.kt @@ -29,12 +29,8 @@ import android.net.NetworkStats.METERED_ALL import android.net.NetworkStats.METERED_NO import android.net.NetworkStats.METERED_YES import android.net.NetworkStats.ROAMING_ALL -import android.net.NetworkTemplate.MATCH_BLUETOOTH -import android.net.NetworkTemplate.MATCH_CARRIER -import android.net.NetworkTemplate.MATCH_ETHERNET import android.net.NetworkTemplate.MATCH_MOBILE import android.net.NetworkTemplate.MATCH_MOBILE_WILDCARD -import android.net.NetworkTemplate.MATCH_PROXY import android.net.NetworkTemplate.MATCH_WIFI import android.net.NetworkTemplate.MATCH_WIFI_WILDCARD import android.net.NetworkTemplate.NETWORK_TYPE_ALL @@ -52,11 +48,9 @@ import android.net.NetworkTemplate.normalize import android.net.wifi.WifiInfo import android.os.Build import android.telephony.TelephonyManager -import com.android.net.module.util.NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL import com.android.net.module.util.NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT import com.android.testutils.DevSdkIgnoreRule import com.android.testutils.DevSdkIgnoreRunner -import com.android.testutils.SC_V2 import com.android.testutils.assertParcelSane import org.junit.Before import org.junit.Test @@ -65,7 +59,6 @@ import org.mockito.Mockito.mock import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import kotlin.test.assertEquals -import kotlin.test.assertFailsWith import kotlin.test.assertFalse import kotlin.test.assertNotEquals import kotlin.test.assertTrue @@ -555,140 +548,4 @@ class NetworkTemplateTest { it.assertMatches(identMobileImsi3) } } - - @DevSdkIgnoreRule.IgnoreUpTo(SC_V2) // TODO: Use to Build.VERSION_CODES.SC_V2 when available - @Test - fun testBuilderMatchRules() { - // Verify unknown match rules cannot construct templates. - listOf(Integer.MIN_VALUE, -1, Integer.MAX_VALUE).forEach { - assertFailsWith { - NetworkTemplate.Builder(it).build() - } - } - - // Verify hidden match rules cannot construct templates. - listOf(MATCH_WIFI_WILDCARD, MATCH_MOBILE_WILDCARD, MATCH_PROXY).forEach { - assertFailsWith { - NetworkTemplate.Builder(it).build() - } - } - - // Verify template which matches metered cellular and carrier networks with - // the given IMSI. See buildTemplateMobileAll and buildTemplateCarrierMetered. - listOf(MATCH_MOBILE, MATCH_CARRIER).forEach { matchRule -> - NetworkTemplate.Builder(matchRule).setSubscriberIds(setOf(TEST_IMSI1)) - .setMeteredness(METERED_YES).build().let { - val expectedTemplate = NetworkTemplate(matchRule, TEST_IMSI1, - arrayOf(TEST_IMSI1), arrayOf(), METERED_YES, - ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, - OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) - assertEquals(expectedTemplate, it) - } - } - - // Verify carrier template cannot be created without IMSI. - assertFailsWith { - NetworkTemplate.Builder(MATCH_CARRIER).build() - } - - // Verify template which matches metered cellular networks, - // regardless of IMSI. See buildTemplateMobileWildcard. - NetworkTemplate.Builder(MATCH_MOBILE).setMeteredness(METERED_YES).build().let { - val expectedTemplate = NetworkTemplate(MATCH_MOBILE_WILDCARD, null /*subscriberId*/, - null /*subscriberIds*/, arrayOf(), - METERED_YES, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, - OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL) - assertEquals(expectedTemplate, it) - } - - // Verify template which matches metered cellular networks and ratType. - // See NetworkTemplate#buildTemplateMobileWithRatType. - NetworkTemplate.Builder(MATCH_MOBILE).setSubscriberIds(setOf(TEST_IMSI1)) - .setMeteredness(METERED_YES).setRatType(TelephonyManager.NETWORK_TYPE_UMTS) - .build().let { - val expectedTemplate = NetworkTemplate(MATCH_MOBILE, TEST_IMSI1, - arrayOf(TEST_IMSI1), arrayOf(), METERED_YES, - ROAMING_ALL, DEFAULT_NETWORK_ALL, TelephonyManager.NETWORK_TYPE_UMTS, - OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) - assertEquals(expectedTemplate, it) - } - - // Verify template which matches all wifi networks, - // regardless of Wifi Network Key. See buildTemplateWifiWildcard and buildTemplateWifi. - NetworkTemplate.Builder(MATCH_WIFI).build().let { - val expectedTemplate = NetworkTemplate(MATCH_WIFI_WILDCARD, null /*subscriberId*/, - null /*subscriberIds*/, arrayOf(), - METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, - OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL) - assertEquals(expectedTemplate, it) - } - - // Verify template which matches wifi networks with the given Wifi Network Key. - // See buildTemplateWifi(wifiNetworkKey). - NetworkTemplate.Builder(MATCH_WIFI).setWifiNetworkKeys(setOf(TEST_WIFI_KEY1)).build().let { - val expectedTemplate = NetworkTemplate(MATCH_WIFI, null /*subscriberId*/, - null /*subscriberIds*/, arrayOf(TEST_WIFI_KEY1), - METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, - OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL) - assertEquals(expectedTemplate, it) - } - - // Verify template which matches all wifi networks with the - // given Wifi Network Key, and IMSI. See buildTemplateWifi(wifiNetworkKey, subscriberId). - NetworkTemplate.Builder(MATCH_WIFI).setSubscriberIds(setOf(TEST_IMSI1)) - .setWifiNetworkKeys(setOf(TEST_WIFI_KEY1)).build().let { - val expectedTemplate = NetworkTemplate(MATCH_WIFI, TEST_IMSI1, - arrayOf(TEST_IMSI1), arrayOf(TEST_WIFI_KEY1), - METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, - OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) - assertEquals(expectedTemplate, it) - } - - // Verify template which matches ethernet and bluetooth networks. - // See buildTemplateEthernet and buildTemplateBluetooth. - listOf(MATCH_ETHERNET, MATCH_BLUETOOTH).forEach { matchRule -> - NetworkTemplate.Builder(matchRule).build().let { - val expectedTemplate = NetworkTemplate(matchRule, null /*subscriberId*/, - null /*subscriberIds*/, arrayOf(), - METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, - OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL) - assertEquals(expectedTemplate, it) - } - } - } - - @DevSdkIgnoreRule.IgnoreUpTo(SC_V2) // TODO: Use to Build.VERSION_CODES.SC_V2 when available - @Test - fun testBuilderWifiNetworkKeys() { - // Verify template builder which generates same template with the given different - // sequence keys. - NetworkTemplate.Builder(MATCH_WIFI).setWifiNetworkKeys( - setOf(TEST_WIFI_KEY1, TEST_WIFI_KEY2)).build().let { - val expectedTemplate = NetworkTemplate.Builder(MATCH_WIFI).setWifiNetworkKeys( - setOf(TEST_WIFI_KEY2, TEST_WIFI_KEY1)).build() - assertEquals(expectedTemplate, it) - } - - // Verify template which matches non-wifi networks with the given key is invalid. - listOf(MATCH_MOBILE, MATCH_CARRIER, MATCH_ETHERNET, MATCH_BLUETOOTH, -1, - Integer.MAX_VALUE).forEach { matchRule -> - assertFailsWith { - NetworkTemplate.Builder(matchRule).setWifiNetworkKeys(setOf(TEST_WIFI_KEY1)).build() - } - } - - // Verify template which matches wifi networks with the given null key is invalid. - assertFailsWith { - NetworkTemplate.Builder(MATCH_WIFI).setWifiNetworkKeys(setOf(null)).build() - } - - // Verify template which matches wifi wildcard with the given empty key set. - NetworkTemplate.Builder(MATCH_WIFI).setWifiNetworkKeys(setOf()).build().let { - val expectedTemplate = NetworkTemplate(MATCH_WIFI_WILDCARD, null /*subscriberId*/, - arrayOf() /*subscriberIds*/, arrayOf(), - METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, - OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL) - assertEquals(expectedTemplate, it) - } - } } From 7f0d18537d76d03b49e4ddf661bb1bcbb0cbbd80 Mon Sep 17 00:00:00 2001 From: Aaron Huang Date: Tue, 8 Feb 2022 23:17:39 +0800 Subject: [PATCH 2/2] Add test for NetworkTemplate.Builder#setRoaming(int) Ignore-AOSP-First: Required API is not in downstream yet Bug: 215435701 Test: CtsNetTestCases Change-Id: Ie000244a954585241304adef95b4156e64d33f41 --- .../android/net/netstats/NetworkTemplateTest.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/common/java/android/net/netstats/NetworkTemplateTest.kt b/tests/common/java/android/net/netstats/NetworkTemplateTest.kt index eb2df0d457..192694bb07 100644 --- a/tests/common/java/android/net/netstats/NetworkTemplateTest.kt +++ b/tests/common/java/android/net/netstats/NetworkTemplateTest.kt @@ -19,6 +19,7 @@ package android.net.netstats import android.net.NetworkStats.DEFAULT_NETWORK_ALL import android.net.NetworkStats.METERED_ALL import android.net.NetworkStats.METERED_YES +import android.net.NetworkStats.ROAMING_YES import android.net.NetworkStats.ROAMING_ALL import android.net.NetworkTemplate import android.net.NetworkTemplate.MATCH_BLUETOOTH @@ -84,6 +85,19 @@ class NetworkTemplateTest { } } + // Verify template which matches roaming cellular and carrier networks with + // the given IMSI. + listOf(MATCH_MOBILE, MATCH_CARRIER).forEach { matchRule -> + NetworkTemplate.Builder(matchRule).setSubscriberIds(setOf(TEST_IMSI1)) + .setRoaming(ROAMING_YES).setMeteredness(METERED_YES).build().let { + val expectedTemplate = NetworkTemplate(matchRule, TEST_IMSI1, + arrayOf(TEST_IMSI1), arrayOf(), METERED_YES, + ROAMING_YES, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, + OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) + assertEquals(expectedTemplate, it) + } + } + // Verify carrier template cannot be created without IMSI. assertFailsWith { NetworkTemplate.Builder(MATCH_CARRIER).build()