From 64d39c73119acdf8340d8f1b65966275279e5f83 Mon Sep 17 00:00:00 2001 From: Aaron Huang Date: Mon, 21 Jun 2021 10:14:21 +0000 Subject: Supports to add a response for the given headers Currently TestHttpServer only supports to add a response for Location header. Make it to add a response for the given headers so that any additional headers that should be returned along with the response. Bug: 181745786 Test: build Original-Change: https://android-review.googlesource.com/1724310 Merged-In: I80b2fe43016b9cd12fc3cb95ee76f1ec9568ddfc Change-Id: I80b2fe43016b9cd12fc3cb95ee76f1ec9568ddfc --- .../devicetests/com/android/testutils/TestHttpServer.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/common/testutils/devicetests/com/android/testutils/TestHttpServer.kt b/common/testutils/devicetests/com/android/testutils/TestHttpServer.kt index 7aae8e3b..39ce4872 100644 --- a/common/testutils/devicetests/com/android/testutils/TestHttpServer.kt +++ b/common/testutils/devicetests/com/android/testutils/TestHttpServer.kt @@ -54,12 +54,12 @@ class TestHttpServer(host: String? = null) : NanoHTTPD(host, 0 /* auto-select th fun addResponse( uri: Uri, statusCode: Response.IStatus, - locationHeader: String? = null, + headers: Map? = null, content: String = "" ) { addResponse(Request(uri.path ?: "", Method.GET, uri.query ?: ""), - statusCode, locationHeader, content) + statusCode, headers, content) } /** @@ -68,11 +68,13 @@ class TestHttpServer(host: String? = null) : NanoHTTPD(host, 0 /* auto-select th fun addResponse( request: Request, statusCode: Response.IStatus, - locationHeader: String? = null, + headers: Map? = null, content: String = "" ) { val response = newFixedLengthResponse(statusCode, "text/plain", content) - locationHeader?.let { response.addHeader("Location", it) } + headers?.forEach { + (key, value) -> response.addHeader(key, value) + } responses[request] = response } -- cgit v1.2.3 From 719cb55e9590bdbe44a34094de47b802d80157c9 Mon Sep 17 00:00:00 2001 From: Lucas Lin Date: Mon, 21 Jun 2021 20:22:10 +0000 Subject: Create a new utils for connectivity related settings ConnectivitySettingsManager and CtsNetUtils are doing the same thing to set/get private DNS related settings. To prevent making the duplication code in two places, having a lib for them to call. Bug: 185311744 Test: atest CtsNetTestCases CtsNetTestCasesLatestSdk Original-Change: https://android-review.googlesource.com/1715693 Merged-In: Ia192520039b187b24e0a7b8bf9509bb10859ace0 Change-Id: Ia192520039b187b24e0a7b8bf9509bb10859ace0 --- .../net/module/util/ConnectivitySettingsUtils.java | 127 +++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 common/framework/com/android/net/module/util/ConnectivitySettingsUtils.java diff --git a/common/framework/com/android/net/module/util/ConnectivitySettingsUtils.java b/common/framework/com/android/net/module/util/ConnectivitySettingsUtils.java new file mode 100644 index 00000000..b7eb70b0 --- /dev/null +++ b/common/framework/com/android/net/module/util/ConnectivitySettingsUtils.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.net.module.util; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.content.ContentResolver; +import android.content.Context; +import android.provider.Settings; +import android.text.TextUtils; + +/** + * Collection of connectivity settings utilities. + * + * @hide + */ +public class ConnectivitySettingsUtils { + public static final int PRIVATE_DNS_MODE_OFF = 1; + public static final int PRIVATE_DNS_MODE_OPPORTUNISTIC = 2; + public static final int PRIVATE_DNS_MODE_PROVIDER_HOSTNAME = 3; + + public static final String PRIVATE_DNS_DEFAULT_MODE = "private_dns_default_mode"; + public static final String PRIVATE_DNS_MODE = "private_dns_mode"; + public static final String PRIVATE_DNS_MODE_OFF_STRING = "off"; + public static final String PRIVATE_DNS_MODE_OPPORTUNISTIC_STRING = "opportunistic"; + public static final String PRIVATE_DNS_MODE_PROVIDER_HOSTNAME_STRING = "hostname"; + public static final String PRIVATE_DNS_SPECIFIER = "private_dns_specifier"; + + /** + * Get private DNS mode as string. + * + * @param mode One of the private DNS values. + * @return A string of private DNS mode. + */ + public static String getPrivateDnsModeAsString(int mode) { + switch (mode) { + case PRIVATE_DNS_MODE_OFF: + return PRIVATE_DNS_MODE_OFF_STRING; + case PRIVATE_DNS_MODE_OPPORTUNISTIC: + return PRIVATE_DNS_MODE_OPPORTUNISTIC_STRING; + case PRIVATE_DNS_MODE_PROVIDER_HOSTNAME: + return PRIVATE_DNS_MODE_PROVIDER_HOSTNAME_STRING; + default: + throw new IllegalArgumentException("Invalid private dns mode: " + mode); + } + } + + private static int getPrivateDnsModeAsInt(String mode) { + switch (mode) { + case "off": + return PRIVATE_DNS_MODE_OFF; + case "hostname": + return PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; + case "opportunistic": + return PRIVATE_DNS_MODE_OPPORTUNISTIC; + default: + throw new IllegalArgumentException("Invalid private dns mode: " + mode); + } + } + + /** + * Get private DNS mode from settings. + * + * @param context The Context to query the private DNS mode from settings. + * @return An integer of private DNS mode. + */ + public static int getPrivateDnsMode(@NonNull Context context) { + final ContentResolver cr = context.getContentResolver(); + String mode = Settings.Global.getString(cr, PRIVATE_DNS_MODE); + if (TextUtils.isEmpty(mode)) mode = Settings.Global.getString(cr, PRIVATE_DNS_DEFAULT_MODE); + // If both PRIVATE_DNS_MODE and PRIVATE_DNS_DEFAULT_MODE are not set, choose + // PRIVATE_DNS_MODE_OPPORTUNISTIC as default mode. + if (TextUtils.isEmpty(mode)) return PRIVATE_DNS_MODE_OPPORTUNISTIC; + return getPrivateDnsModeAsInt(mode); + } + + /** + * Set private DNS mode to settings. + * + * @param context The {@link Context} to set the private DNS mode. + * @param mode The private dns mode. This should be one of the PRIVATE_DNS_MODE_* constants. + */ + public static void setPrivateDnsMode(@NonNull Context context, int mode) { + if (!(mode == PRIVATE_DNS_MODE_OFF + || mode == PRIVATE_DNS_MODE_OPPORTUNISTIC + || mode == PRIVATE_DNS_MODE_PROVIDER_HOSTNAME)) { + throw new IllegalArgumentException("Invalid private dns mode: " + mode); + } + Settings.Global.putString(context.getContentResolver(), PRIVATE_DNS_MODE, + getPrivateDnsModeAsString(mode)); + } + + /** + * Get specific private dns provider name from {@link Settings}. + * + * @param context The {@link Context} to query the setting. + * @return The specific private dns provider name, or null if no setting value. + */ + @Nullable + public static String getPrivateDnsHostname(@NonNull Context context) { + return Settings.Global.getString(context.getContentResolver(), PRIVATE_DNS_SPECIFIER); + } + + /** + * Set specific private dns provider name to {@link Settings}. + * + * @param context The {@link Context} to set the setting. + * @param specifier The specific private dns provider name. + */ + public static void setPrivateDnsHostname(@NonNull Context context, @Nullable String specifier) { + Settings.Global.putString(context.getContentResolver(), PRIVATE_DNS_SPECIFIER, specifier); + } +} -- cgit v1.2.3 From e3b729e5a2f78a5e6658b2190dfa1a982c7b2597 Mon Sep 17 00:00:00 2001 From: Junyu Lai Date: Tue, 22 Jun 2021 01:21:24 +0000 Subject: Add OnSetWarningAndLimit into TestableNetworkStatsProvider This change also address left comments at ag/15010113. Ignore-AOSP-First: Counter part CL is not in aosp. Test: m gts && atest \ GtsNetworkStackHostTestCases:NetworkStatsHostTest#testNetworkStatsProvider Bug: 191327585 Change-Id: I100668cc6d4cecbaff29d027d37d313dd48854f3 --- .../com/android/testutils/TestableNetworkStatsProvider.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/common/testutils/devicetests/com/android/testutils/TestableNetworkStatsProvider.kt b/common/testutils/devicetests/com/android/testutils/TestableNetworkStatsProvider.kt index d034a7d5..8477151b 100644 --- a/common/testutils/devicetests/com/android/testutils/TestableNetworkStatsProvider.kt +++ b/common/testutils/devicetests/com/android/testutils/TestableNetworkStatsProvider.kt @@ -30,7 +30,12 @@ open class TestableNetworkStatsProvider( ) : NetworkStatsProvider() { sealed class CallbackType { data class OnRequestStatsUpdate(val token: Int) : CallbackType() - data class OnSetLimit(val iface: String?, val quotaBytes: Long) : CallbackType() + data class OnSetWarningAndLimit( + val iface: String?, + val warningBytes: Long, + val limitBytes: Long + ) : CallbackType() + data class OnSetLimit(val iface: String?, val limitBytes: Long) : CallbackType() data class OnSetAlert(val quotaBytes: Long) : CallbackType() } @@ -42,6 +47,10 @@ open class TestableNetworkStatsProvider( history.add(CallbackType.OnRequestStatsUpdate(token)) } + override fun onSetWarningAndLimit(iface: String, warningBytes: Long, limitBytes: Long) { + history.add(CallbackType.OnSetWarningAndLimit(iface, warningBytes, limitBytes)) + } + override fun onSetLimit(iface: String, quotaBytes: Long) { history.add(CallbackType.OnSetLimit(iface, quotaBytes)) } @@ -56,7 +65,7 @@ open class TestableNetworkStatsProvider( if (token != TOKEN_ANY) { assertEquals(token, event.token) } - return token + return event.token } fun expectOnSetLimit(iface: String?, quotaBytes: Long, timeout: Long = defaultTimeoutMs) { -- cgit v1.2.3 From a1365e7358b928ed833e90eee58bd39e1d8ac6af Mon Sep 17 00:00:00 2001 From: Chiachang Wang Date: Tue, 22 Jun 2021 13:15:21 +0000 Subject: Add fall back to createTunInterface when running on R TNM.createTunInterface() takes different parameter from S. GTS is multi-release, so it should be compatible with S and before S build. Add sdk version check to support it. Bug: 186680038 Test: atest GtsNetworkStackHostTestCases:\ com.google.android.gts.networkstack.NetworkStackHostTest#\ testNetworkStack Original-Change: https://android-review.googlesource.com/1742033 Merged-In: I5a08068db43e507637a53a32c15a5eb453d50c32 Change-Id: I5a08068db43e507637a53a32c15a5eb453d50c32 --- common/testutils/Android.bp | 1 + .../testutils/devicetests/com/android/testutils/TestNetworkTracker.kt | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/common/testutils/Android.bp b/common/testutils/Android.bp index 1a7b4375..d29c1cd9 100644 --- a/common/testutils/Android.bp +++ b/common/testutils/Android.bp @@ -35,6 +35,7 @@ java_library { "libnanohttpd", "net-tests-utils-host-device-common", "net-utils-device-common", + "modules-utils-build_system", ], } diff --git a/common/testutils/devicetests/com/android/testutils/TestNetworkTracker.kt b/common/testutils/devicetests/com/android/testutils/TestNetworkTracker.kt index d8dd67a3..36c09ce6 100644 --- a/common/testutils/devicetests/com/android/testutils/TestNetworkTracker.kt +++ b/common/testutils/devicetests/com/android/testutils/TestNetworkTracker.kt @@ -26,6 +26,7 @@ import android.net.NetworkRequest import android.net.TestNetworkInterface import android.net.TestNetworkManager import android.os.Binder +import com.android.modules.utils.build.SdkLevel.isAtLeastS import java.util.concurrent.CompletableFuture import java.util.concurrent.TimeUnit @@ -39,7 +40,8 @@ import java.util.concurrent.TimeUnit fun initTestNetwork(context: Context, interfaceAddr: LinkAddress, setupTimeoutMs: Long = 10_000L): TestNetworkTracker { val tnm = context.getSystemService(TestNetworkManager::class.java) - val iface = tnm.createTunInterface(arrayOf(interfaceAddr)) + val iface = if (isAtLeastS()) tnm.createTunInterface(listOf(interfaceAddr)) + else tnm.createTunInterface(arrayOf(interfaceAddr)) return TestNetworkTracker(context, iface, tnm, setupTimeoutMs) } -- cgit v1.2.3