From 3a6edd4e01b5f42c6c27116c732cbbdaedfa57f9 Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Sat, 14 Jun 2025 16:29:18 +0900 Subject: [PATCH] Fix flake in ConnectivityDiagnosticsManager ...or at least make it considerably less common. Sometimes the network is not validated. Instead of checking that the diagnostics message says it is validated, check that it agrees with the network capabilities. Fixes: b/371856020 Test: ConnectivityDiagnosticsManagerTest and TH Flag: EXEMPT test-only change Change-Id: I83ff7572a300adf250f82869eff7c55664296f95 --- .../cts/ConnectivityDiagnosticsManagerTest.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/cts/net/src/android/net/cts/ConnectivityDiagnosticsManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityDiagnosticsManagerTest.java index b5a31ad8c3..990952ab8d 100644 --- a/tests/cts/net/src/android/net/cts/ConnectivityDiagnosticsManagerTest.java +++ b/tests/cts/net/src/android/net/cts/ConnectivityDiagnosticsManagerTest.java @@ -22,6 +22,8 @@ import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport; import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport.KEY_NETWORK_PROBES_ATTEMPTED_BITMASK; import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport.KEY_NETWORK_PROBES_SUCCEEDED_BITMASK; import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport.KEY_NETWORK_VALIDATION_RESULT; +import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport.NETWORK_VALIDATION_RESULT_INVALID; +import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport.NETWORK_VALIDATION_RESULT_PARTIALLY_VALID; import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport.NETWORK_VALIDATION_RESULT_SKIPPED; import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport.NETWORK_VALIDATION_RESULT_VALID; import static android.net.ConnectivityDiagnosticsManager.DataStallReport; @@ -34,6 +36,7 @@ import static android.net.ConnectivityDiagnosticsManager.persistableBundleEquals import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN; import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED; +import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkCapabilities.TRANSPORT_TEST; import static android.net.cts.util.CtsNetUtils.TestNetworkCallback; @@ -325,6 +328,18 @@ public class ConnectivityDiagnosticsManagerTest { final Network network = testNetworkCallback.waitForAvailable(); assertNotNull(network); + // TODO : get rid of the underpowered CtsNetUtils.TestNetworkCallback and use the more + // capable TestableNetworkCallback instead. Then no need to use the synchronous getter + // which may cause further flakes. + final NetworkCapabilities caps = mConnectivityManager.getNetworkCapabilities(network); + final int expectedResult; + if (caps.hasCapability(24)) { // NET_CAPABILITY_PARTIAL_CONNECTIVITY is @SystemApi + expectedResult = NETWORK_VALIDATION_RESULT_PARTIALLY_VALID; + } else if (caps.hasCapability(NET_CAPABILITY_VALIDATED)) { + expectedResult = NETWORK_VALIDATION_RESULT_VALID; + } else { + expectedResult = NETWORK_VALIDATION_RESULT_INVALID; + } // TODO(b/217559768): Receiving carrier config change and immediately checking carrier // privileges is racy, as the CP status is updated after receiving the same signal. Move @@ -339,7 +354,7 @@ public class ConnectivityDiagnosticsManagerTest { final String interfaceName = mConnectivityManager.getLinkProperties(network).getInterfaceName(); connDiagsCallback.maybeVerifyConnectivityReportAvailable( - network, interfaceName, TRANSPORT_CELLULAR, NETWORK_VALIDATION_RESULT_VALID); + network, interfaceName, TRANSPORT_CELLULAR, expectedResult); connDiagsCallback.assertNoCallback(); }