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
This commit is contained in:
Chalard Jean 2025-06-14 16:29:18 +09:00
commit 3a6edd4e01

View file

@ -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();
}