From 908b002ed23167fb55ddb41c966d9a628fcb2b30 Mon Sep 17 00:00:00 2001 From: Remi NGUYEN VAN Date: Tue, 8 Jun 2021 18:54:09 +0900 Subject: [PATCH] Fix restorePrivateDnsSetting with null hostnames When private DNS setting was set to opportunistic (mode) and null (hostname), CtsNetUtils would not restore it. Make sure that private DNS settings are restored after every test. Also fail if restore is called without having saved any setting beforehand. Bug: 190465704 Test: atest CtsNetTestCases Change-Id: Ic5d8d8b729469e0eef89a0b53f166e604264c1ee --- .../android/net/cts/util/CtsNetUtils.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java b/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java index d5a26c4f62..041a9cbf19 100644 --- a/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java +++ b/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java @@ -87,6 +87,7 @@ public final class CtsNetUtils { private static final int PRIVATE_DNS_SETTING_TIMEOUT_MS = 10_000; private static final int CONNECTIVITY_CHANGE_TIMEOUT_SECS = 30; private static final String PRIVATE_DNS_MODE_OPPORTUNISTIC = "opportunistic"; + private static final String PRIVATE_DNS_MODE_STRICT = "hostname"; public static final int HTTP_PORT = 80; public static final String TEST_HOST = "connectivitycheck.gstatic.com"; public static final String HTTP_REQUEST = @@ -524,12 +525,17 @@ public final class CtsNetUtils { } public void restorePrivateDnsSetting() throws InterruptedException { - if (mOldPrivateDnsMode == null || mOldPrivateDnsSpecifier == null) { - return; + if (mOldPrivateDnsMode == null) { + fail("restorePrivateDnsSetting without storing settings first"); } // restore private DNS setting - if ("hostname".equals(mOldPrivateDnsMode)) { + if (PRIVATE_DNS_MODE_STRICT.equals(mOldPrivateDnsMode)) { setPrivateDnsStrictMode(mOldPrivateDnsSpecifier); + + // In case of invalid setting, still restore it but fail the test + if (mOldPrivateDnsSpecifier == null) { + fail("Invalid private DNS setting: no hostname specified in strict mode"); + } awaitPrivateDnsSetting("restorePrivateDnsSetting timeout", mCm.getActiveNetwork(), mOldPrivateDnsSpecifier, true); @@ -540,13 +546,14 @@ public final class CtsNetUtils { public void setPrivateDnsStrictMode(String server) { // To reduce flake rate, set PRIVATE_DNS_SPECIFIER before PRIVATE_DNS_MODE. This ensures - // that if the previous private DNS mode was not "hostname", the system only sees one + // that if the previous private DNS mode was not strict, the system only sees one // EVENT_PRIVATE_DNS_SETTINGS_CHANGED event instead of two. Settings.Global.putString(mCR, Settings.Global.PRIVATE_DNS_SPECIFIER, server); final String mode = Settings.Global.getString(mCR, Settings.Global.PRIVATE_DNS_MODE); - // If current private DNS mode is "hostname", we only need to set PRIVATE_DNS_SPECIFIER. - if (!"hostname".equals(mode)) { - Settings.Global.putString(mCR, Settings.Global.PRIVATE_DNS_MODE, "hostname"); + // If current private DNS mode is strict, we only need to set PRIVATE_DNS_SPECIFIER. + if (!PRIVATE_DNS_MODE_STRICT.equals(mode)) { + Settings.Global.putString(mCR, Settings.Global.PRIVATE_DNS_MODE, + PRIVATE_DNS_MODE_STRICT); } }