Merge changes Iddc8975b,I2cedd584 into main
* changes: Add diagnostics on failure for PrivateDns test Wait for default route for wifi check
This commit is contained in:
commit
ba7089227f
3 changed files with 56 additions and 13 deletions
|
|
@ -19,7 +19,7 @@ package com.android.testutils.connectivitypreparer
|
|||
import android.Manifest.permission.NETWORK_SETTINGS
|
||||
import android.content.pm.PackageManager.FEATURE_TELEPHONY
|
||||
import android.content.pm.PackageManager.FEATURE_WIFI
|
||||
import android.net.LinkAddress
|
||||
import android.net.InetAddresses.parseNumericAddress
|
||||
import android.net.Network
|
||||
import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
|
||||
import android.net.NetworkCapabilities.TRANSPORT_WIFI
|
||||
|
|
@ -66,7 +66,8 @@ class ConnectivityCheckTest {
|
|||
// Skip IPv6 checks on virtual devices which do not support it. Tests that require IPv6 will
|
||||
// still fail even if the preparer does not.
|
||||
private fun ipv6Unsupported(wifiSsid: String?) = ConnectUtil.VIRTUAL_SSIDS.contains(
|
||||
WifiInfo.sanitizeSsid(wifiSsid))
|
||||
WifiInfo.sanitizeSsid(wifiSsid)
|
||||
)
|
||||
|
||||
@Test
|
||||
fun testCheckWifiSetup() {
|
||||
|
|
@ -89,13 +90,25 @@ class ConnectivityCheckTest {
|
|||
pos = 0,
|
||||
timeoutMs = 30_000L
|
||||
) {
|
||||
it is LinkPropertiesChanged &&
|
||||
it.network == network &&
|
||||
it.lp.allLinkAddresses.any(LinkAddress::isIpv4) &&
|
||||
(ipv6Unsupported(ssid) || it.lp.hasGlobalIpv6Address())
|
||||
if (it !is LinkPropertiesChanged || it.network != network) {
|
||||
false
|
||||
} else {
|
||||
// Same check as used by DnsResolver for AI_ADDRCONFIG (have_ipv4)
|
||||
val ipv4Reachable = it.lp.isReachable(parseNumericAddress("8.8.8.8"))
|
||||
// Same check as used by DnsResolver for AI_ADDRCONFIG (have_ipv6)
|
||||
val ipv6Reachable = it.lp.isReachable(parseNumericAddress("2000::"))
|
||||
ipv4Reachable && (ipv6Unsupported(ssid) || ipv6Reachable)
|
||||
}
|
||||
}
|
||||
assertNotNull(lpChange, "Wifi network $network needs an IPv4 address" +
|
||||
if (ipv6Unsupported(ssid)) "" else " and a global IPv6 address")
|
||||
assertNotNull(
|
||||
lpChange,
|
||||
"Wifi network $network needs an IPv4 address and default route" +
|
||||
if (ipv6Unsupported(ssid)) {
|
||||
""
|
||||
} else {
|
||||
" and a global IPv6 address and default route"
|
||||
}
|
||||
)
|
||||
|
||||
Pair(network, ssid)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -419,15 +419,29 @@ class ConnectivityDiagnosticsCollector : BaseMetricListener() {
|
|||
* @param exceptionContext An exception to write a stacktrace to the dump for context.
|
||||
*/
|
||||
fun collectDumpsysConnectivity(exceptionContext: Throwable? = null) {
|
||||
Log.i(TAG, "Collecting dumpsys connectivity for test artifacts")
|
||||
collectDumpsys("connectivity --dump-priority HIGH", exceptionContext)
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a dumpsys to the test data dump.
|
||||
*
|
||||
* <p>The dump will be collected immediately, and exported to a test artifact file when the
|
||||
* test ends.
|
||||
* @param dumpsysCmd The dumpsys command to run (for example "connectivity").
|
||||
* @param exceptionContext An exception to write a stacktrace to the dump for context.
|
||||
*/
|
||||
fun collectDumpsys(dumpsysCmd: String, exceptionContext: Throwable? = null) {
|
||||
Log.i(TAG, "Collecting dumpsys $dumpsysCmd for test artifacts")
|
||||
PrintWriter(buffer).let {
|
||||
it.println("--- Dumpsys connectivity at ${ZonedDateTime.now()} ---")
|
||||
it.println("--- Dumpsys $dumpsysCmd at ${ZonedDateTime.now()} ---")
|
||||
maybeWriteExceptionContext(it, exceptionContext)
|
||||
it.flush()
|
||||
}
|
||||
ParcelFileDescriptor.AutoCloseInputStream(
|
||||
InstrumentationRegistry.getInstrumentation().uiAutomation.executeShellCommand(
|
||||
"dumpsys connectivity --dump-priority HIGH")).use {
|
||||
"dumpsys $dumpsysCmd"
|
||||
)
|
||||
).use {
|
||||
it.copyTo(buffer)
|
||||
}
|
||||
}
|
||||
|
|
@ -446,4 +460,4 @@ class ConnectivityDiagnosticsCollector : BaseMetricListener() {
|
|||
writer.println("At: ")
|
||||
exceptionContext.printStackTrace(writer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ import androidx.test.InstrumentationRegistry;
|
|||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.net.module.util.DnsPacket;
|
||||
import com.android.testutils.ConnectivityDiagnosticsCollector;
|
||||
import com.android.testutils.DevSdkIgnoreRule;
|
||||
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo;
|
||||
import com.android.testutils.DeviceConfigRule;
|
||||
|
|
@ -394,7 +395,22 @@ public class DnsResolverTest {
|
|||
@Test
|
||||
@DnsResolverModuleTest
|
||||
public void testRawQueryNXDomainWithPrivateDns() throws Exception {
|
||||
doTestRawQueryNXDomainWithPrivateDns(mExecutor);
|
||||
try {
|
||||
doTestRawQueryNXDomainWithPrivateDns(mExecutor);
|
||||
} catch (Throwable e) {
|
||||
final ConnectivityDiagnosticsCollector collector =
|
||||
ConnectivityDiagnosticsCollector.getInstance();
|
||||
if (collector != null) {
|
||||
// IWLAN on U QPR3 release may cause failures in this test, see
|
||||
// CarrierConfigSetupTest which is supposed to avoid the issue. Collect IWLAN
|
||||
// related dumpsys if the test still fails.
|
||||
collector.collectDumpsys("carrier_config", e);
|
||||
collector.collectDumpsys("telecom", e);
|
||||
collector.collectDumpsys("telephony_ims", e);
|
||||
collector.collectDumpsys("telephony.registry", e);
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
Loading…
Reference in a new issue