diff --git a/tests/unit/java/com/android/server/connectivityservice/CSBasicMethodsTest.kt b/tests/unit/java/com/android/server/connectivityservice/CSBasicMethodsTest.kt index 58f20a9d33..a5d5297fa0 100644 --- a/tests/unit/java/com/android/server/connectivityservice/CSBasicMethodsTest.kt +++ b/tests/unit/java/com/android/server/connectivityservice/CSBasicMethodsTest.kt @@ -23,11 +23,12 @@ import android.os.Build import androidx.test.filters.SmallTest import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo import com.android.testutils.DevSdkIgnoreRunner -import org.junit.Test -import org.junit.runner.RunWith import kotlin.test.assertFalse import kotlin.test.assertTrue +import org.junit.Test +import org.junit.runner.RunWith +@DevSdkIgnoreRunner.MonitorThreadLeak @RunWith(DevSdkIgnoreRunner::class) @SmallTest @IgnoreUpTo(Build.VERSION_CODES.R) diff --git a/tests/unit/java/com/android/server/connectivityservice/CSBpfNetMapsTest.kt b/tests/unit/java/com/android/server/connectivityservice/CSBpfNetMapsTest.kt index c26ec530ae..8155fd02f0 100644 --- a/tests/unit/java/com/android/server/connectivityservice/CSBpfNetMapsTest.kt +++ b/tests/unit/java/com/android/server/connectivityservice/CSBpfNetMapsTest.kt @@ -38,6 +38,7 @@ import org.mockito.Mockito.inOrder import org.mockito.Mockito.never import org.mockito.Mockito.verify +@DevSdkIgnoreRunner.MonitorThreadLeak @RunWith(DevSdkIgnoreRunner::class) @SmallTest @IgnoreUpTo(Build.VERSION_CODES.S_V2) // Bpf only supports in T+. diff --git a/tests/unit/java/com/android/server/connectivityservice/CSDestroyedNetworkTests.kt b/tests/unit/java/com/android/server/connectivityservice/CSDestroyedNetworkTests.kt index 572c7bbdef..5c29e3a0bc 100644 --- a/tests/unit/java/com/android/server/connectivityservice/CSDestroyedNetworkTests.kt +++ b/tests/unit/java/com/android/server/connectivityservice/CSDestroyedNetworkTests.kt @@ -30,6 +30,7 @@ import org.junit.runner.RunWith private const val LONG_TIMEOUT_MS = 5_000 +@DevSdkIgnoreRunner.MonitorThreadLeak @RunWith(DevSdkIgnoreRunner::class) @SmallTest @DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.R) diff --git a/tests/unit/java/com/android/server/connectivityservice/CSKeepConnectedTest.kt b/tests/unit/java/com/android/server/connectivityservice/CSKeepConnectedTest.kt index a753922379..94c68c028e 100644 --- a/tests/unit/java/com/android/server/connectivityservice/CSKeepConnectedTest.kt +++ b/tests/unit/java/com/android/server/connectivityservice/CSKeepConnectedTest.kt @@ -22,8 +22,8 @@ import android.net.NetworkCapabilities.NET_CAPABILITY_LOCAL_NETWORK import android.net.NetworkCapabilities.TRANSPORT_WIFI import android.net.NetworkRequest import android.net.NetworkScore -import android.net.NetworkScore.KEEP_CONNECTED_LOCAL_NETWORK import android.net.NetworkScore.KEEP_CONNECTED_FOR_TEST +import android.net.NetworkScore.KEEP_CONNECTED_LOCAL_NETWORK import android.os.Build import androidx.test.filters.SmallTest import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo @@ -33,6 +33,7 @@ import com.android.testutils.TestableNetworkCallback import org.junit.Test import org.junit.runner.RunWith +@DevSdkIgnoreRunner.MonitorThreadLeak @RunWith(DevSdkIgnoreRunner::class) @SmallTest @IgnoreUpTo(Build.VERSION_CODES.TIRAMISU) diff --git a/tests/unit/java/com/android/server/connectivityservice/CSLocalAgentCreationTests.kt b/tests/unit/java/com/android/server/connectivityservice/CSLocalAgentCreationTests.kt index 6add6b9e55..cb98454fda 100644 --- a/tests/unit/java/com/android/server/connectivityservice/CSLocalAgentCreationTests.kt +++ b/tests/unit/java/com/android/server/connectivityservice/CSLocalAgentCreationTests.kt @@ -33,6 +33,7 @@ import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo import com.android.testutils.DevSdkIgnoreRunner import com.android.testutils.RecorderCallback.CallbackEntry.Available import com.android.testutils.TestableNetworkCallback +import kotlin.test.assertFailsWith import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith @@ -41,7 +42,6 @@ import org.mockito.Mockito.doReturn import org.mockito.Mockito.inOrder import org.mockito.Mockito.never import org.mockito.Mockito.timeout -import kotlin.test.assertFailsWith private const val TIMEOUT_MS = 2_000L private const val NO_CALLBACK_TIMEOUT_MS = 200L @@ -51,6 +51,7 @@ private fun keepConnectedScore() = private fun defaultLnc() = FromS(LocalNetworkConfig.Builder().build()) +@DevSdkIgnoreRunner.MonitorThreadLeak @RunWith(DevSdkIgnoreRunner::class) @SmallTest @IgnoreUpTo(Build.VERSION_CODES.R) diff --git a/tests/unit/java/com/android/server/connectivityservice/CSLocalAgentTests.kt b/tests/unit/java/com/android/server/connectivityservice/CSLocalAgentTests.kt index dd0706b6ae..ba1477567e 100644 --- a/tests/unit/java/com/android/server/connectivityservice/CSLocalAgentTests.kt +++ b/tests/unit/java/com/android/server/connectivityservice/CSLocalAgentTests.kt @@ -42,6 +42,7 @@ import com.android.testutils.DevSdkIgnoreRunner import com.android.testutils.RecorderCallback.CallbackEntry.LocalInfoChanged import com.android.testutils.RecorderCallback.CallbackEntry.Lost import com.android.testutils.TestableNetworkCallback +import kotlin.test.assertFailsWith import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito.clearInvocations @@ -49,7 +50,6 @@ import org.mockito.Mockito.inOrder import org.mockito.Mockito.never import org.mockito.Mockito.timeout import org.mockito.Mockito.verify -import kotlin.test.assertFailsWith private const val TIMEOUT_MS = 200L private const val MEDIUM_TIMEOUT_MS = 1_000L @@ -79,6 +79,7 @@ private fun keepScore() = FromS( NetworkScore.Builder().setKeepConnectedReason(KEEP_CONNECTED_FOR_TEST).build() ) +@DevSdkIgnoreRunner.MonitorThreadLeak @RunWith(DevSdkIgnoreRunner::class) @DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.TIRAMISU) class CSLocalAgentTests : CSTest() { diff --git a/tests/unit/java/com/android/server/connectivityservice/CSNetworkActivityTest.kt b/tests/unit/java/com/android/server/connectivityservice/CSNetworkActivityTest.kt index 526ec9d982..df0a2cc97b 100644 --- a/tests/unit/java/com/android/server/connectivityservice/CSNetworkActivityTest.kt +++ b/tests/unit/java/com/android/server/connectivityservice/CSNetworkActivityTest.kt @@ -63,6 +63,7 @@ private const val NETWORK_ACTIVITY_NO_UID = -1 private const val PACKAGE_UID = 123 private const val TIMEOUT_MS = 250L +@DevSdkIgnoreRunner.MonitorThreadLeak @RunWith(DevSdkIgnoreRunner::class) @SmallTest @IgnoreUpTo(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) diff --git a/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt b/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt index 958c4f2961..7abeee46fe 100644 --- a/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt +++ b/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt @@ -69,6 +69,7 @@ import com.android.testutils.waitForIdle import java.util.concurrent.Executors import kotlin.test.assertNull import kotlin.test.fail +import org.junit.After import org.mockito.AdditionalAnswers.delegatesTo import org.mockito.Mockito.doAnswer import org.mockito.Mockito.doReturn @@ -158,7 +159,8 @@ open class CSTest { val bpfNetMaps = mock() val clatCoordinator = mock() val proxyTracker = ProxyTracker(context, mock(), 16 /* EVENT_PROXY_HAS_CHANGED */) - val alarmManager = makeMockAlarmManager() + val alrmHandlerThread = HandlerThread("TestAlarmManager").also { it.start() } + val alarmManager = makeMockAlarmManager(alrmHandlerThread) val systemConfigManager = makeMockSystemConfigManager() val batteryStats = mock() val batteryManager = BatteryStatsManager(batteryStats) @@ -171,6 +173,14 @@ open class CSTest { val cm = ConnectivityManager(context, service) val csHandler = Handler(csHandlerThread.looper) + @After + fun tearDown() { + csHandlerThread.quitSafely() + csHandlerThread.join() + alrmHandlerThread.quitSafely() + alrmHandlerThread.join() + } + inner class CSDeps : ConnectivityService.Dependencies() { override fun getResources(ctx: Context) = connResources override fun getBpfNetMaps(context: Context, netd: INetd) = this@CSTest.bpfNetMaps diff --git a/tests/unit/java/com/android/server/connectivityservice/base/CSTestHelpers.kt b/tests/unit/java/com/android/server/connectivityservice/base/CSTestHelpers.kt index c1828b2300..8ff790c48e 100644 --- a/tests/unit/java/com/android/server/connectivityservice/base/CSTestHelpers.kt +++ b/tests/unit/java/com/android/server/connectivityservice/base/CSTestHelpers.kt @@ -53,6 +53,7 @@ import com.android.internal.util.test.FakeSettingsProvider import com.android.modules.utils.build.SdkLevel import com.android.server.ConnectivityService.Dependencies import com.android.server.connectivity.ConnectivityResources +import kotlin.test.fail import org.mockito.ArgumentMatchers import org.mockito.ArgumentMatchers.any import org.mockito.ArgumentMatchers.anyInt @@ -64,7 +65,6 @@ import org.mockito.Mockito import org.mockito.Mockito.doAnswer import org.mockito.Mockito.doNothing import org.mockito.Mockito.doReturn -import kotlin.test.fail internal inline fun mock() = Mockito.mock(T::class.java) internal inline fun any() = any(T::class.java) @@ -128,8 +128,8 @@ internal fun makeMockConnResources(resources: Resources, pm: PackageManager) = m } private val UNREASONABLY_LONG_ALARM_WAIT_MS = 1000 -internal fun makeMockAlarmManager() = mock().also { am -> - val alrmHdlr = HandlerThread("TestAlarmManager").also { it.start() }.threadHandler +internal fun makeMockAlarmManager(handlerThread: HandlerThread) = mock().also { am -> + val alrmHdlr = handlerThread.threadHandler doAnswer { val (_, date, _, wakeupMsg, handler) = it.arguments wakeupMsg as WakeupMessage