summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRemi NGUYEN VAN <reminv@google.com>2020-05-29 22:09:13 +0000
committerRemi NGUYEN VAN <reminv@google.com>2020-06-01 01:56:45 +0000
commitd44616a143669a0c940c92a717da3c602ba54525 (patch)
tree792217ee0fcf0df9ea0793ea36d51a01ff273f42
parente443dd652fbbdfc95c7138ea4fe25a37fe242351 (diff)
Validate test wifi/eth/bluetooth/mobile networks
While not all test networks created by TestNetworkManager should be validated (because they can be used in self-contained tests that should not see unexpected traffic, such as data usage tests), allowing NetworkMonitor to validate test networks that intend to replicate actual network management on the device is valuable for proper testing. This change considers that a network that has both TRANSPORT_TEST and another major transport type (wifi, ethernet, bluetooth, mobile) is attempting to replicate actual network management on the device: this is currently the case with EthernetManager#setIncludeTestInterfaces. In such cases, have the system perform validation even if the network does not have CAPABILITY_INTERNET. Because TRANSPORT_TEST networks do not have CAPABILITY_INTERNET (as expected from the network agent and enforced by ConnectivityService), they still cannot become default networks, even if they gain CAPABILITY_VALIDATED. Bug: 156319532 Test: atest NetworkStackTests FrameworksNetTests CaptivePortalApiTest Original-Change: https://android-review.googlesource.com/1317682 Merged-In: Ib5810dc3b589ffddc06507fb8be3066e09063a3c Change-Id: Ib5810dc3b589ffddc06507fb8be3066e09063a3c
-rw-r--r--apishim/31/com/android/networkstack/apishim/ConstantsShim.java1
-rw-r--r--common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java38
2 files changed, 36 insertions, 3 deletions
diff --git a/apishim/31/com/android/networkstack/apishim/ConstantsShim.java b/apishim/31/com/android/networkstack/apishim/ConstantsShim.java
index 4bafe4c..0184845 100644
--- a/apishim/31/com/android/networkstack/apishim/ConstantsShim.java
+++ b/apishim/31/com/android/networkstack/apishim/ConstantsShim.java
@@ -31,6 +31,7 @@ public class ConstantsShim extends com.android.networkstack.apishim.api30.Consta
@VisibleForTesting
public static final int VERSION = 31;
+ // When removing this shim, the version in NetworkMonitorUtils should be removed too.
// TODO: add TRANSPORT_TEST to system API in API 31 (it is only a test API as of R)
public static final int TRANSPORT_TEST = 7;
}
diff --git a/common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java b/common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java
index 8983d00..981a576 100644
--- a/common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java
+++ b/common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java
@@ -20,11 +20,21 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED;
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN;
import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED;
+import static android.net.NetworkCapabilities.TRANSPORT_BLUETOOTH;
+import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
+import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
+import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import android.net.NetworkCapabilities;
/** @hide */
public class NetworkMonitorUtils {
+ // This class is used by both NetworkMonitor and ConnectivityService, so it cannot use
+ // NetworkStack shims, but at the same time cannot use non-system APIs.
+ // TRANSPORT_TEST is test API as of R (so it is enforced to always be 7 and can't be changed),
+ // and it is being added as a system API in S.
+ // TODO: use NetworkCapabilities.TRANSPORT_TEST once NetworkStack builds against API 31.
+ private static final int TRANSPORT_TEST = 7;
// Network conditions broadcast constants
public static final String ACTION_NETWORK_CONDITIONS_MEASURED =
@@ -47,11 +57,33 @@ public class NetworkMonitorUtils {
* @param nc Network capabilities of the network to test.
*/
public static boolean isPrivateDnsValidationRequired(NetworkCapabilities nc) {
+ if (nc == null) return false;
+
// TODO: Consider requiring validation for DUN networks.
- return nc != null
- && nc.hasCapability(NET_CAPABILITY_INTERNET)
+ if (nc.hasCapability(NET_CAPABILITY_INTERNET)
&& nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)
- && nc.hasCapability(NET_CAPABILITY_TRUSTED);
+ && nc.hasCapability(NET_CAPABILITY_TRUSTED)) {
+ // Real networks
+ return true;
+ }
+
+ // TODO: once TRANSPORT_TEST is @SystemApi in S and S SDK is stable (so constant shims can
+ // be replaced with the SDK constant that will be inlined), replace isTestNetwork with
+ // hasTransport(TRANSPORT_TEST)
+
+ // Test networks that also have one of the major transport types are attempting to replicate
+ // that transport on a test interface (for example, test ethernet networks with
+ // EthernetManager#setIncludeTestInterfaces). Run validation on them for realistic tests.
+ // See also comments on EthernetManager#setIncludeTestInterfaces and on TestNetworkManager.
+ if (nc.hasTransport(TRANSPORT_TEST) && nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED) && (
+ nc.hasTransport(TRANSPORT_WIFI)
+ || nc.hasTransport(TRANSPORT_CELLULAR)
+ || nc.hasTransport(TRANSPORT_BLUETOOTH)
+ || nc.hasTransport(TRANSPORT_ETHERNET))) {
+ return true;
+ }
+
+ return false;
}
/**