From 5324475f6ef1bc2c8043a5bfc879e22a83db7f97 Mon Sep 17 00:00:00 2001 From: Motomu Utsumi Date: Tue, 22 Aug 2023 18:28:14 +0900 Subject: [PATCH] Add some tests back which were removed for fixing kotlin nullable errors Followup CL for aosp/2700076 Bug: 296972712 Test: build with aosp/2688146 Change-Id: I617b330c42a99e4c839adac2ea614756b5955ce9 --- .../android/net/KeepalivePacketDataTest.kt | 28 ++++++++++++---- .../src/android/net/cts/NetworkInfoTest.kt | 32 ++++++++++++++++--- .../java/android/net/NetworkTemplateTest.kt | 14 ++++++++ 3 files changed, 62 insertions(+), 12 deletions(-) diff --git a/tests/common/java/android/net/KeepalivePacketDataTest.kt b/tests/common/java/android/net/KeepalivePacketDataTest.kt index 92ffc5c6ec..403d6b5759 100644 --- a/tests/common/java/android/net/KeepalivePacketDataTest.kt +++ b/tests/common/java/android/net/KeepalivePacketDataTest.kt @@ -22,6 +22,7 @@ import androidx.test.filters.SmallTest import androidx.test.runner.AndroidJUnit4 import com.android.testutils.DevSdkIgnoreRule import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo +import com.android.testutils.NonNullTestUtils import java.net.InetAddress import java.util.Arrays import org.junit.Assert.assertEquals @@ -50,34 +51,47 @@ class KeepalivePacketDataTest { // Add for test because constructor of KeepalivePacketData is protected. private inner class TestKeepalivePacketData( - srcAddress: InetAddress = TEST_SRC_ADDRV4, + srcAddress: InetAddress? = TEST_SRC_ADDRV4, srcPort: Int = TEST_SRC_PORT, - dstAddress: InetAddress = TEST_DST_ADDRV4, + dstAddress: InetAddress? = TEST_DST_ADDRV4, dstPort: Int = TEST_DST_PORT, data: ByteArray = TESTBYTES - ) : KeepalivePacketData(srcAddress, srcPort, dstAddress, dstPort, data) + ) : KeepalivePacketData(NonNullTestUtils.nullUnsafe(srcAddress), srcPort, + NonNullTestUtils.nullUnsafe(dstAddress), dstPort, data) @Test @IgnoreUpTo(Build.VERSION_CODES.Q) fun testConstructor() { - var data: TestKeepalivePacketData + try { + TestKeepalivePacketData(srcAddress = null) + fail("Null src address should cause exception") + } catch (e: InvalidPacketException) { + assertEquals(e.error, ERROR_INVALID_IP_ADDRESS) + } try { - data = TestKeepalivePacketData(dstAddress = TEST_ADDRV6) + TestKeepalivePacketData(dstAddress = null) + fail("Null dst address should cause exception") + } catch (e: InvalidPacketException) { + assertEquals(e.error, ERROR_INVALID_IP_ADDRESS) + } + + try { + TestKeepalivePacketData(dstAddress = TEST_ADDRV6) fail("Ip family mismatched should cause exception") } catch (e: InvalidPacketException) { assertEquals(e.error, ERROR_INVALID_IP_ADDRESS) } try { - data = TestKeepalivePacketData(srcPort = INVALID_PORT) + TestKeepalivePacketData(srcPort = INVALID_PORT) fail("Invalid srcPort should cause exception") } catch (e: InvalidPacketException) { assertEquals(e.error, ERROR_INVALID_PORT) } try { - data = TestKeepalivePacketData(dstPort = INVALID_PORT) + TestKeepalivePacketData(dstPort = INVALID_PORT) fail("Invalid dstPort should cause exception") } catch (e: InvalidPacketException) { assertEquals(e.error, ERROR_INVALID_PORT) diff --git a/tests/cts/net/src/android/net/cts/NetworkInfoTest.kt b/tests/cts/net/src/android/net/cts/NetworkInfoTest.kt index d8ec761d91..499d97f07e 100644 --- a/tests/cts/net/src/android/net/cts/NetworkInfoTest.kt +++ b/tests/cts/net/src/android/net/cts/NetworkInfoTest.kt @@ -16,12 +16,12 @@ package android.net.cts -import android.os.Build import android.content.Context import android.net.ConnectivityManager import android.net.NetworkInfo import android.net.NetworkInfo.DetailedState import android.net.NetworkInfo.State +import android.os.Build import android.telephony.TelephonyManager import androidx.test.filters.SmallTest import androidx.test.platform.app.InstrumentationRegistry @@ -29,16 +29,17 @@ import androidx.test.runner.AndroidJUnit4 import com.android.modules.utils.build.SdkLevel import com.android.testutils.DevSdkIgnoreRule import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo +import com.android.testutils.NonNullTestUtils +import kotlin.reflect.jvm.isAccessible +import kotlin.test.assertFails +import kotlin.test.assertFailsWith import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Assert.assertTrue import org.junit.Rule -import org.junit.runner.RunWith import org.junit.Test -import kotlin.reflect.jvm.isAccessible -import kotlin.test.assertFails -import kotlin.test.assertFailsWith +import org.junit.runner.RunWith const val TYPE_MOBILE = ConnectivityManager.TYPE_MOBILE const val TYPE_WIFI = ConnectivityManager.TYPE_WIFI @@ -104,6 +105,15 @@ class NetworkInfoTest { NetworkInfo(ConnectivityManager.MAX_NETWORK_TYPE + 1, TelephonyManager.NETWORK_TYPE_LTE, MOBILE_TYPE_NAME, LTE_SUBTYPE_NAME) } + + if (SdkLevel.isAtLeastT()) { + assertFailsWith { + NetworkInfo(NonNullTestUtils.nullUnsafe(null)) + } + } else { + // Doesn't immediately crash on S- + NetworkInfo(NonNullTestUtils.nullUnsafe(null)) + } } @Test @@ -126,11 +136,23 @@ class NetworkInfoTest { constructor.isAccessible = true val incorrectDetailedState = constructor.newInstance("any", 200) as DetailedState if (SdkLevel.isAtLeastT()) { + assertFailsWith { + NetworkInfo(NonNullTestUtils.nullUnsafe(null)) + } + assertFailsWith { + networkInfo.setDetailedState(NonNullTestUtils.nullUnsafe(null), + "reason", "extraInfo") + } // This actually throws ArrayOutOfBoundsException because of the implementation of // EnumMap, but that's an implementation detail so accept any crash. assertFails { networkInfo.setDetailedState(incorrectDetailedState, "reason", "extraInfo") } + } else { + // Doesn't immediately crash on S- + NetworkInfo(NonNullTestUtils.nullUnsafe(null)) + networkInfo.setDetailedState(NonNullTestUtils.nullUnsafe(null), + "reason", "extraInfo") } } } diff --git a/tests/unit/java/android/net/NetworkTemplateTest.kt b/tests/unit/java/android/net/NetworkTemplateTest.kt index f0da89f07e..a8414ca8a9 100644 --- a/tests/unit/java/android/net/NetworkTemplateTest.kt +++ b/tests/unit/java/android/net/NetworkTemplateTest.kt @@ -49,6 +49,7 @@ import android.os.Build import android.telephony.TelephonyManager import com.android.testutils.DevSdkIgnoreRule import com.android.testutils.DevSdkIgnoreRunner +import com.android.testutils.NonNullTestUtils import com.android.testutils.assertParcelSane import kotlin.test.assertEquals import kotlin.test.assertFalse @@ -218,6 +219,19 @@ class NetworkTemplateTest { templateNullWifiKey.assertDoesNotMatch(identWifiNullKey) } + @DevSdkIgnoreRule.IgnoreAfter(Build.VERSION_CODES.TIRAMISU) + @Test + fun testBuildTemplateMobileAll_nullSubscriberId() { + val templateMobileAllWithNullImsi = + buildTemplateMobileAll(NonNullTestUtils.nullUnsafe(null)) + val setWithNull = HashSet().apply { + add(null) + } + val templateFromBuilder = NetworkTemplate.Builder(MATCH_MOBILE).setMeteredness(METERED_YES) + .setSubscriberIds(setWithNull).build() + assertEquals(templateFromBuilder, templateMobileAllWithNullImsi) + } + @Test fun testMobileMatches() { val templateMobileImsi1 = buildTemplateMobileAll(TEST_IMSI1)