Loading src/android/net/util/DataStallUtils.java 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 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 android.net.util; /** * Collection of utilities for data stall. */ public class DataStallUtils { /** * Detect data stall via using dns timeout counts. */ public static final int DATA_STALL_EVALUATION_TYPE_DNS = 1; // Default configuration values for data stall detection. public static final int DEFAULT_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD = 5; public static final int DEFAULT_DATA_STALL_MIN_EVALUATE_TIME_MS = 60 * 1000; public static final int DEFAULT_DATA_STALL_VALID_DNS_TIME_THRESHOLD_MS = 30 * 60 * 1000; /** * The threshold value for the number of consecutive dns timeout events received to be a * signal of data stall. The number of consecutive timeouts needs to be {@code >=} this * threshold to be considered a data stall. Set the value to {@code <= 0} to disable. Note * that the value should be {@code > 0} if the DNS data stall detection is enabled. * */ public static final String CONFIG_DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD = "data_stall_consecutive_dns_timeout_threshold"; /** * The minimal time interval in milliseconds for data stall reevaluation. * */ public static final String CONFIG_DATA_STALL_MIN_EVALUATE_INTERVAL = "data_stall_min_evaluate_interval"; /** * DNS timeouts older than this timeout (in milliseconds) are not considered for detecting * a data stall. * */ public static final String CONFIG_DATA_STALL_VALID_DNS_TIME_THRESHOLD = "data_stall_valid_dns_time_threshold"; /** * Which data stall detection signal to use. This is a bitmask constructed by bitwise-or-ing * (i.e. {@code |}) the DATA_STALL_EVALUATION_TYPE_* values. * * Type: int * Valid values: * {@link #DATA_STALL_EVALUATION_TYPE_DNS} : Use dns as a signal. */ public static final String CONFIG_DATA_STALL_EVALUATION_TYPE = "data_stall_evaluation_type"; public static final int DEFAULT_DATA_STALL_EVALUATION_TYPES = DATA_STALL_EVALUATION_TYPE_DNS; // The default number of DNS events kept of the log kept for dns signal evaluation. Each event // is represented by a {@link com.android.server.connectivity.NetworkMonitor#DnsResult} objects. // It's also the size of array of {@link com.android.server.connectivity.nano.DnsEvent} kept in // metrics. Note that increasing the size may cause statsd log buffer bust. Need to check the // design in statsd when you try to increase the size. public static final int DEFAULT_DNS_LOG_SIZE = 20; } src/android/net/util/NetworkStackUtils.java +21 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,9 @@ import java.util.function.Predicate; * Collection of utilities for the network stack. */ public class NetworkStackUtils { // TODO: Refer to DeviceConfig definition. public static final String NAMESPACE_CONNECTIVITY = "connectivity"; static { System.loadLibrary("networkstackutilsjni"); } Loading Loading @@ -102,6 +105,24 @@ public class NetworkStackUtils { return defaultValue; } /** * Look up the value of a property for a particular namespace from {@link DeviceConfig}. * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @param defaultValue The value to return if the property does not exist or has no non-null * value. * @return the corresponding value, or defaultValue if none exists. */ public static int getDeviceConfigPropertyInt(@NonNull String namespace, @NonNull String name, int defaultValue) { String value = getDeviceConfigProperty(namespace, name, null /* defaultValue */); try { return (value != null) ? Integer.parseInt(value) : defaultValue; } catch (NumberFormatException e) { return defaultValue; } } /** * Attaches a socket filter that accepts DHCP packets to the given socket. */ Loading src/com/android/server/connectivity/NetworkMonitor.java +49 −22 Original line number Diff line number Diff line Loading @@ -33,8 +33,18 @@ import static android.net.metrics.ValidationProbeEvent.DNS_FAILURE; import static android.net.metrics.ValidationProbeEvent.DNS_SUCCESS; import static android.net.metrics.ValidationProbeEvent.PROBE_FALLBACK; import static android.net.metrics.ValidationProbeEvent.PROBE_PRIVDNS; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_EVALUATION_TYPE; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_MIN_EVALUATE_INTERVAL; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_VALID_DNS_TIME_THRESHOLD; import static android.net.util.DataStallUtils.DATA_STALL_EVALUATION_TYPE_DNS; import static android.net.util.DataStallUtils.DEFAULT_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD; import static android.net.util.DataStallUtils.DEFAULT_DATA_STALL_EVALUATION_TYPES; import static android.net.util.DataStallUtils.DEFAULT_DATA_STALL_MIN_EVALUATE_TIME_MS; import static android.net.util.DataStallUtils.DEFAULT_DATA_STALL_VALID_DNS_TIME_THRESHOLD_MS; import static android.net.util.DataStallUtils.DEFAULT_DNS_LOG_SIZE; import static android.net.util.NetworkStackUtils.NAMESPACE_CONNECTIVITY; import static android.net.util.NetworkStackUtils.isEmpty; import static android.provider.Settings.Global.DATA_STALL_EVALUATION_TYPE_DNS; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -62,6 +72,7 @@ import android.net.metrics.NetworkEvent; import android.net.metrics.ValidationProbeEvent; import android.net.shared.NetworkMonitorUtils; import android.net.shared.PrivateDnsConfig; import android.net.util.NetworkStackUtils; import android.net.util.SharedLog; import android.net.util.Stopwatch; import android.net.wifi.WifiInfo; Loading Loading @@ -122,18 +133,6 @@ public class NetworkMonitor extends StateMachine { private static final int SOCKET_TIMEOUT_MS = 10000; private static final int PROBE_TIMEOUT_MS = 3000; // Default configuration values for data stall detection. private static final int DEFAULT_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD = 5; private static final int DEFAULT_DATA_STALL_MIN_EVALUATE_TIME_MS = 60 * 1000; private static final int DEFAULT_DATA_STALL_VALID_DNS_TIME_THRESHOLD_MS = 30 * 60 * 1000; private static final int DEFAULT_DATA_STALL_EVALUATION_TYPES = DATA_STALL_EVALUATION_TYPE_DNS; // Reevaluate it as intending to increase the number. Larger log size may cause statsd // log buffer bust and have stats log lost. private static final int DEFAULT_DNS_LOG_SIZE = 20; enum EvaluationResult { VALIDATED(true), CAPTIVE_PORTAL(false); Loading Loading @@ -384,7 +383,7 @@ public class NetworkMonitor extends StateMachine { mDnsStallDetector = new DnsStallDetector(mConsecutiveDnsTimeoutThreshold); mDataStallMinEvaluateTime = getDataStallMinEvaluateTime(); mDataStallValidDnsTimeThreshold = getDataStallValidDnsTimeThreshold(); mDataStallEvaluationType = getDataStallEvalutionType(); mDataStallEvaluationType = getDataStallEvaluationType(); // Provide empty LinkProperties and NetworkCapabilities to make sure they are never null, // even before notifyNetworkConnected. Loading Loading @@ -1194,25 +1193,26 @@ public class NetworkMonitor extends StateMachine { } private int getConsecutiveDnsTimeoutThreshold() { return mDependencies.getSetting(mContext, Settings.Global.DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD, return mDependencies.getDeviceConfigPropertyInt(NAMESPACE_CONNECTIVITY, CONFIG_DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD, DEFAULT_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD); } private int getDataStallMinEvaluateTime() { return mDependencies.getSetting(mContext, Settings.Global.DATA_STALL_MIN_EVALUATE_INTERVAL, return mDependencies.getDeviceConfigPropertyInt(NAMESPACE_CONNECTIVITY, CONFIG_DATA_STALL_MIN_EVALUATE_INTERVAL, DEFAULT_DATA_STALL_MIN_EVALUATE_TIME_MS); } private int getDataStallValidDnsTimeThreshold() { return mDependencies.getSetting(mContext, Settings.Global.DATA_STALL_VALID_DNS_TIME_THRESHOLD, return mDependencies.getDeviceConfigPropertyInt(NAMESPACE_CONNECTIVITY, CONFIG_DATA_STALL_VALID_DNS_TIME_THRESHOLD, DEFAULT_DATA_STALL_VALID_DNS_TIME_THRESHOLD_MS); } private int getDataStallEvalutionType() { return mDependencies.getSetting(mContext, Settings.Global.DATA_STALL_EVALUATION_TYPE, private int getDataStallEvaluationType() { return mDependencies.getDeviceConfigPropertyInt(NAMESPACE_CONNECTIVITY, CONFIG_DATA_STALL_EVALUATION_TYPE, DEFAULT_DATA_STALL_EVALUATION_TYPES); } Loading Loading @@ -1797,6 +1797,33 @@ public class NetworkMonitor extends StateMachine { return value != null ? value : defaultValue; } /** * Look up the value of a property in DeviceConfig. * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @param defaultValue The value to return if the property does not exist or has no non-null * value. * @return the corresponding value, or defaultValue if none exists. */ @Nullable public String getDeviceConfigProperty(@NonNull String namespace, @NonNull String name, @Nullable String defaultValue) { return NetworkStackUtils.getDeviceConfigProperty(namespace, name, defaultValue); } /** * Look up the value of a property in DeviceConfig. * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @param defaultValue The value to return if the property does not exist or has no non-null * value. * @return the corresponding value, or defaultValue if none exists. */ public int getDeviceConfigPropertyInt(@NonNull String namespace, @NonNull String name, int defaultValue) { return NetworkStackUtils.getDeviceConfigPropertyInt(namespace, name, defaultValue); } public static final Dependencies DEFAULT = new Dependencies(); } Loading tests/src/com/android/server/connectivity/NetworkMonitorTest.java +13 −11 Original line number Diff line number Diff line Loading @@ -21,7 +21,11 @@ import static android.net.INetworkMonitor.NETWORK_TEST_RESULT_INVALID; import static android.net.INetworkMonitor.NETWORK_TEST_RESULT_PARTIAL_CONNECTIVITY; import static android.net.INetworkMonitor.NETWORK_TEST_RESULT_VALID; import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; import static android.provider.Settings.Global.DATA_STALL_EVALUATION_TYPE_DNS; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_EVALUATION_TYPE; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_MIN_EVALUATE_INTERVAL; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_VALID_DNS_TIME_THRESHOLD; import static android.net.util.DataStallUtils.DATA_STALL_EVALUATION_TYPE_DNS; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; Loading Loading @@ -115,7 +119,6 @@ public class NetworkMonitorTest { private @Captor ArgumentCaptor<String> mNetworkTestedRedirectUrlCaptor; private static final int TEST_NETID = 4242; private static final String TEST_HTTP_URL = "http://www.google.com/gen_204"; private static final String TEST_HTTPS_URL = "https://www.google.com/gen_204"; private static final String TEST_FALLBACK_URL = "http://fallback.google.com/gen_204"; Loading Loading @@ -600,24 +603,23 @@ public class NetworkMonitorTest { } private void setDataStallEvaluationType(int type) { when(mDependencies.getSetting(any(), eq(Settings.Global.DATA_STALL_EVALUATION_TYPE), anyInt())).thenReturn(type); when(mDependencies.getDeviceConfigPropertyInt(any(), eq(CONFIG_DATA_STALL_EVALUATION_TYPE), anyInt())).thenReturn(type); } private void setMinDataStallEvaluateInterval(int time) { when(mDependencies.getSetting(any(), eq(Settings.Global.DATA_STALL_MIN_EVALUATE_INTERVAL), anyInt())).thenReturn(time); when(mDependencies.getDeviceConfigPropertyInt(any(), eq(CONFIG_DATA_STALL_MIN_EVALUATE_INTERVAL), anyInt())).thenReturn(time); } private void setValidDataStallDnsTimeThreshold(int time) { when(mDependencies.getSetting(any(), eq(Settings.Global.DATA_STALL_VALID_DNS_TIME_THRESHOLD), anyInt())).thenReturn(time); when(mDependencies.getDeviceConfigPropertyInt(any(), eq(CONFIG_DATA_STALL_VALID_DNS_TIME_THRESHOLD), anyInt())).thenReturn(time); } private void setConsecutiveDnsTimeoutThreshold(int num) { when(mDependencies.getSetting(any(), eq(Settings.Global.DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD), anyInt())) .thenReturn(num); when(mDependencies.getDeviceConfigPropertyInt(any(), eq(CONFIG_DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD), anyInt())).thenReturn(num); } private void setFallbackUrl(String url) { Loading Loading
src/android/net/util/DataStallUtils.java 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 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 android.net.util; /** * Collection of utilities for data stall. */ public class DataStallUtils { /** * Detect data stall via using dns timeout counts. */ public static final int DATA_STALL_EVALUATION_TYPE_DNS = 1; // Default configuration values for data stall detection. public static final int DEFAULT_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD = 5; public static final int DEFAULT_DATA_STALL_MIN_EVALUATE_TIME_MS = 60 * 1000; public static final int DEFAULT_DATA_STALL_VALID_DNS_TIME_THRESHOLD_MS = 30 * 60 * 1000; /** * The threshold value for the number of consecutive dns timeout events received to be a * signal of data stall. The number of consecutive timeouts needs to be {@code >=} this * threshold to be considered a data stall. Set the value to {@code <= 0} to disable. Note * that the value should be {@code > 0} if the DNS data stall detection is enabled. * */ public static final String CONFIG_DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD = "data_stall_consecutive_dns_timeout_threshold"; /** * The minimal time interval in milliseconds for data stall reevaluation. * */ public static final String CONFIG_DATA_STALL_MIN_EVALUATE_INTERVAL = "data_stall_min_evaluate_interval"; /** * DNS timeouts older than this timeout (in milliseconds) are not considered for detecting * a data stall. * */ public static final String CONFIG_DATA_STALL_VALID_DNS_TIME_THRESHOLD = "data_stall_valid_dns_time_threshold"; /** * Which data stall detection signal to use. This is a bitmask constructed by bitwise-or-ing * (i.e. {@code |}) the DATA_STALL_EVALUATION_TYPE_* values. * * Type: int * Valid values: * {@link #DATA_STALL_EVALUATION_TYPE_DNS} : Use dns as a signal. */ public static final String CONFIG_DATA_STALL_EVALUATION_TYPE = "data_stall_evaluation_type"; public static final int DEFAULT_DATA_STALL_EVALUATION_TYPES = DATA_STALL_EVALUATION_TYPE_DNS; // The default number of DNS events kept of the log kept for dns signal evaluation. Each event // is represented by a {@link com.android.server.connectivity.NetworkMonitor#DnsResult} objects. // It's also the size of array of {@link com.android.server.connectivity.nano.DnsEvent} kept in // metrics. Note that increasing the size may cause statsd log buffer bust. Need to check the // design in statsd when you try to increase the size. public static final int DEFAULT_DNS_LOG_SIZE = 20; }
src/android/net/util/NetworkStackUtils.java +21 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,9 @@ import java.util.function.Predicate; * Collection of utilities for the network stack. */ public class NetworkStackUtils { // TODO: Refer to DeviceConfig definition. public static final String NAMESPACE_CONNECTIVITY = "connectivity"; static { System.loadLibrary("networkstackutilsjni"); } Loading Loading @@ -102,6 +105,24 @@ public class NetworkStackUtils { return defaultValue; } /** * Look up the value of a property for a particular namespace from {@link DeviceConfig}. * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @param defaultValue The value to return if the property does not exist or has no non-null * value. * @return the corresponding value, or defaultValue if none exists. */ public static int getDeviceConfigPropertyInt(@NonNull String namespace, @NonNull String name, int defaultValue) { String value = getDeviceConfigProperty(namespace, name, null /* defaultValue */); try { return (value != null) ? Integer.parseInt(value) : defaultValue; } catch (NumberFormatException e) { return defaultValue; } } /** * Attaches a socket filter that accepts DHCP packets to the given socket. */ Loading
src/com/android/server/connectivity/NetworkMonitor.java +49 −22 Original line number Diff line number Diff line Loading @@ -33,8 +33,18 @@ import static android.net.metrics.ValidationProbeEvent.DNS_FAILURE; import static android.net.metrics.ValidationProbeEvent.DNS_SUCCESS; import static android.net.metrics.ValidationProbeEvent.PROBE_FALLBACK; import static android.net.metrics.ValidationProbeEvent.PROBE_PRIVDNS; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_EVALUATION_TYPE; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_MIN_EVALUATE_INTERVAL; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_VALID_DNS_TIME_THRESHOLD; import static android.net.util.DataStallUtils.DATA_STALL_EVALUATION_TYPE_DNS; import static android.net.util.DataStallUtils.DEFAULT_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD; import static android.net.util.DataStallUtils.DEFAULT_DATA_STALL_EVALUATION_TYPES; import static android.net.util.DataStallUtils.DEFAULT_DATA_STALL_MIN_EVALUATE_TIME_MS; import static android.net.util.DataStallUtils.DEFAULT_DATA_STALL_VALID_DNS_TIME_THRESHOLD_MS; import static android.net.util.DataStallUtils.DEFAULT_DNS_LOG_SIZE; import static android.net.util.NetworkStackUtils.NAMESPACE_CONNECTIVITY; import static android.net.util.NetworkStackUtils.isEmpty; import static android.provider.Settings.Global.DATA_STALL_EVALUATION_TYPE_DNS; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -62,6 +72,7 @@ import android.net.metrics.NetworkEvent; import android.net.metrics.ValidationProbeEvent; import android.net.shared.NetworkMonitorUtils; import android.net.shared.PrivateDnsConfig; import android.net.util.NetworkStackUtils; import android.net.util.SharedLog; import android.net.util.Stopwatch; import android.net.wifi.WifiInfo; Loading Loading @@ -122,18 +133,6 @@ public class NetworkMonitor extends StateMachine { private static final int SOCKET_TIMEOUT_MS = 10000; private static final int PROBE_TIMEOUT_MS = 3000; // Default configuration values for data stall detection. private static final int DEFAULT_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD = 5; private static final int DEFAULT_DATA_STALL_MIN_EVALUATE_TIME_MS = 60 * 1000; private static final int DEFAULT_DATA_STALL_VALID_DNS_TIME_THRESHOLD_MS = 30 * 60 * 1000; private static final int DEFAULT_DATA_STALL_EVALUATION_TYPES = DATA_STALL_EVALUATION_TYPE_DNS; // Reevaluate it as intending to increase the number. Larger log size may cause statsd // log buffer bust and have stats log lost. private static final int DEFAULT_DNS_LOG_SIZE = 20; enum EvaluationResult { VALIDATED(true), CAPTIVE_PORTAL(false); Loading Loading @@ -384,7 +383,7 @@ public class NetworkMonitor extends StateMachine { mDnsStallDetector = new DnsStallDetector(mConsecutiveDnsTimeoutThreshold); mDataStallMinEvaluateTime = getDataStallMinEvaluateTime(); mDataStallValidDnsTimeThreshold = getDataStallValidDnsTimeThreshold(); mDataStallEvaluationType = getDataStallEvalutionType(); mDataStallEvaluationType = getDataStallEvaluationType(); // Provide empty LinkProperties and NetworkCapabilities to make sure they are never null, // even before notifyNetworkConnected. Loading Loading @@ -1194,25 +1193,26 @@ public class NetworkMonitor extends StateMachine { } private int getConsecutiveDnsTimeoutThreshold() { return mDependencies.getSetting(mContext, Settings.Global.DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD, return mDependencies.getDeviceConfigPropertyInt(NAMESPACE_CONNECTIVITY, CONFIG_DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD, DEFAULT_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD); } private int getDataStallMinEvaluateTime() { return mDependencies.getSetting(mContext, Settings.Global.DATA_STALL_MIN_EVALUATE_INTERVAL, return mDependencies.getDeviceConfigPropertyInt(NAMESPACE_CONNECTIVITY, CONFIG_DATA_STALL_MIN_EVALUATE_INTERVAL, DEFAULT_DATA_STALL_MIN_EVALUATE_TIME_MS); } private int getDataStallValidDnsTimeThreshold() { return mDependencies.getSetting(mContext, Settings.Global.DATA_STALL_VALID_DNS_TIME_THRESHOLD, return mDependencies.getDeviceConfigPropertyInt(NAMESPACE_CONNECTIVITY, CONFIG_DATA_STALL_VALID_DNS_TIME_THRESHOLD, DEFAULT_DATA_STALL_VALID_DNS_TIME_THRESHOLD_MS); } private int getDataStallEvalutionType() { return mDependencies.getSetting(mContext, Settings.Global.DATA_STALL_EVALUATION_TYPE, private int getDataStallEvaluationType() { return mDependencies.getDeviceConfigPropertyInt(NAMESPACE_CONNECTIVITY, CONFIG_DATA_STALL_EVALUATION_TYPE, DEFAULT_DATA_STALL_EVALUATION_TYPES); } Loading Loading @@ -1797,6 +1797,33 @@ public class NetworkMonitor extends StateMachine { return value != null ? value : defaultValue; } /** * Look up the value of a property in DeviceConfig. * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @param defaultValue The value to return if the property does not exist or has no non-null * value. * @return the corresponding value, or defaultValue if none exists. */ @Nullable public String getDeviceConfigProperty(@NonNull String namespace, @NonNull String name, @Nullable String defaultValue) { return NetworkStackUtils.getDeviceConfigProperty(namespace, name, defaultValue); } /** * Look up the value of a property in DeviceConfig. * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @param defaultValue The value to return if the property does not exist or has no non-null * value. * @return the corresponding value, or defaultValue if none exists. */ public int getDeviceConfigPropertyInt(@NonNull String namespace, @NonNull String name, int defaultValue) { return NetworkStackUtils.getDeviceConfigPropertyInt(namespace, name, defaultValue); } public static final Dependencies DEFAULT = new Dependencies(); } Loading
tests/src/com/android/server/connectivity/NetworkMonitorTest.java +13 −11 Original line number Diff line number Diff line Loading @@ -21,7 +21,11 @@ import static android.net.INetworkMonitor.NETWORK_TEST_RESULT_INVALID; import static android.net.INetworkMonitor.NETWORK_TEST_RESULT_PARTIAL_CONNECTIVITY; import static android.net.INetworkMonitor.NETWORK_TEST_RESULT_VALID; import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; import static android.provider.Settings.Global.DATA_STALL_EVALUATION_TYPE_DNS; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_EVALUATION_TYPE; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_MIN_EVALUATE_INTERVAL; import static android.net.util.DataStallUtils.CONFIG_DATA_STALL_VALID_DNS_TIME_THRESHOLD; import static android.net.util.DataStallUtils.DATA_STALL_EVALUATION_TYPE_DNS; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; Loading Loading @@ -115,7 +119,6 @@ public class NetworkMonitorTest { private @Captor ArgumentCaptor<String> mNetworkTestedRedirectUrlCaptor; private static final int TEST_NETID = 4242; private static final String TEST_HTTP_URL = "http://www.google.com/gen_204"; private static final String TEST_HTTPS_URL = "https://www.google.com/gen_204"; private static final String TEST_FALLBACK_URL = "http://fallback.google.com/gen_204"; Loading Loading @@ -600,24 +603,23 @@ public class NetworkMonitorTest { } private void setDataStallEvaluationType(int type) { when(mDependencies.getSetting(any(), eq(Settings.Global.DATA_STALL_EVALUATION_TYPE), anyInt())).thenReturn(type); when(mDependencies.getDeviceConfigPropertyInt(any(), eq(CONFIG_DATA_STALL_EVALUATION_TYPE), anyInt())).thenReturn(type); } private void setMinDataStallEvaluateInterval(int time) { when(mDependencies.getSetting(any(), eq(Settings.Global.DATA_STALL_MIN_EVALUATE_INTERVAL), anyInt())).thenReturn(time); when(mDependencies.getDeviceConfigPropertyInt(any(), eq(CONFIG_DATA_STALL_MIN_EVALUATE_INTERVAL), anyInt())).thenReturn(time); } private void setValidDataStallDnsTimeThreshold(int time) { when(mDependencies.getSetting(any(), eq(Settings.Global.DATA_STALL_VALID_DNS_TIME_THRESHOLD), anyInt())).thenReturn(time); when(mDependencies.getDeviceConfigPropertyInt(any(), eq(CONFIG_DATA_STALL_VALID_DNS_TIME_THRESHOLD), anyInt())).thenReturn(time); } private void setConsecutiveDnsTimeoutThreshold(int num) { when(mDependencies.getSetting(any(), eq(Settings.Global.DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD), anyInt())) .thenReturn(num); when(mDependencies.getDeviceConfigPropertyInt(any(), eq(CONFIG_DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD), anyInt())).thenReturn(num); } private void setFallbackUrl(String url) { Loading