Merge "Cleanup and improve logging for DefaultNetworkRestoreMonitor" into main

This commit is contained in:
Treehugger Robot 2025-05-09 02:24:31 -07:00 • committed by Android (Google) Code Review
commit bb2c4e66ef
2 changed files with 14 additions and 13 deletions

View file

@ -16,6 +16,7 @@
package com.android.testutils
import android.annotation.SuppressLint
import android.content.Context
import android.content.pm.PackageManager
import android.net.ConnectivityManager
@ -23,6 +24,7 @@ import android.net.Network
import android.net.NetworkCapabilities
import com.android.internal.annotations.VisibleForTesting
import com.android.net.module.util.BitUtils
import com.android.testutils.RecorderCallback.CallbackEntry.CapabilitiesChanged
import java.util.concurrent.CompletableFuture
import java.util.concurrent.TimeUnit
import org.junit.runner.Description
@ -41,7 +43,10 @@ class DefaultNetworkRestoreMonitor(
val cm = ctx.getSystemService(ConnectivityManager::class.java)!!
val pm = ctx.packageManager
val listener = object : RunListener() {
@SuppressLint("WrongConstant") // transportNamesOf wants @Transport annotation
override fun testFinished(desc: Description) {
fun ConnectivityManager.activeNetworkCaps() =
activeNetwork?.let { getNetworkCapabilities(it) }
// Only the first method that does not restore the default network should be blamed.
if (firstFailure != null) {
return
@ -49,15 +54,16 @@ class DefaultNetworkRestoreMonitor(
val cb = TestableNetworkCallback()
cm.registerDefaultNetworkCallback(cb)
try {
cb.eventuallyExpect<RecorderCallback.CallbackEntry.CapabilitiesChanged>(
timeoutMs = timeoutMs
) {
cb.eventuallyExpect<CapabilitiesChanged>(timeoutMs = timeoutMs) {
BitUtils.packBits(it.caps.transportTypes) == initialTransports &&
it.caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
}
} catch (e: AssertionError) {
firstFailure = IllegalStateException(desc.methodName + " does not restore the" +
"default network, initialTransports = $initialTransports", e)
val expectedTransports = BitUtils.unpackBits(initialTransports)
firstFailure = IllegalStateException(desc.methodName + " does not restore the " +
"default network. Default network has caps ${cm.activeNetworkCaps()} ; " +
"expected a network with transports = " +
NetworkCapabilities.transportNamesOf(expectedTransports))
} finally {
cm.unregisterNetworkCallback(cb)
}
@ -79,10 +85,7 @@ class DefaultNetworkRestoreMonitor(
val capFuture = CompletableFuture<NetworkCapabilities>()
val cb = object : ConnectivityManager.NetworkCallback() {
override fun onCapabilitiesChanged(
network: Network,
cap: NetworkCapabilities
) {
override fun onCapabilitiesChanged(network: Network, cap: NetworkCapabilities) {
capFuture.complete(cap)
}
}
@ -103,9 +106,7 @@ class DefaultNetworkRestoreMonitor(
fun reportResultAndCleanUp(desc: Description) {
notifier.fireTestStarted(desc)
if (firstFailure != null) {
notifier.fireTestFailure(
Failure(desc, firstFailure)
)
notifier.fireTestFailure(Failure(desc, firstFailure))
}
notifier.fireTestFinished(desc)
notifier.removeListener(listener)

View file

@ -139,7 +139,7 @@ class DevSdkIgnoreRunner(private val klass: Class<*>) : Runner(), Filterable, So
}
val networkRestoreMonitor = if (restoreDefaultNetwork) {
DefaultNetworkRestoreMonitor(ctx, notifier).apply{
DefaultNetworkRestoreMonitor(ctx, notifier).apply {
init(ConnectUtil(ctx))
}
} else {