From e9aeb3c1c51c3174f6500b03cd602dc5cec4a1d7 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti <lorenzo@google.com> Date: Wed, 3 Feb 2021 03:20:15 +0900 Subject: [PATCH] Add CTS coverage for VpnTransportInfo. Bug: 173331190 Test: FrameworksNetTests HostsideVpnTests CtsNetTestCases Change-Id: I77d866270c63f1078a2a01941b2271d4338aa178 --- .../com/android/cts/net/hostside/VpnTest.java | 30 +++++++++++++++++++ .../src/android/net/cts/NetworkAgentTest.kt | 7 ++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java index a1e4caa79d..a5efe0c507 100755 --- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java +++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java @@ -17,6 +17,7 @@ package com.android.cts.net.hostside; import static android.Manifest.permission.NETWORK_SETTINGS; +import static android.net.NetworkCapabilities.TRANSPORT_VPN; import static android.os.Process.INVALID_UID; import static android.system.OsConstants.AF_INET; import static android.system.OsConstants.AF_INET6; @@ -49,8 +50,11 @@ import android.net.NetworkCapabilities; import android.net.NetworkRequest; import android.net.Proxy; import android.net.ProxyInfo; +import android.net.TransportInfo; import android.net.Uri; +import android.net.VpnManager; import android.net.VpnService; +import android.net.VpnTransportInfo; import android.net.wifi.WifiManager; import android.os.Handler; import android.os.Looper; @@ -747,6 +751,8 @@ public class VpnTest extends InstrumentationTestCase { checkTrafficOnVpn(); + expectVpnTransportInfo(mCM.getActiveNetwork()); + // Check that system default network callback has not seen any network changes, but the app // default network callback has. This needs to be done before testing private DNS because // checkStrictModePrivateDns will set the private DNS server to a nonexistent name, which @@ -778,6 +784,8 @@ public class VpnTest extends InstrumentationTestCase { checkTrafficOnVpn(); + expectVpnTransportInfo(mCM.getActiveNetwork()); + checkStrictModePrivateDns(); } @@ -803,6 +811,10 @@ public class VpnTest extends InstrumentationTestCase { assertSocketStillOpen(remoteFd, TEST_HOST); checkNoTrafficOnVpn(); + + final Network network = mCM.getActiveNetwork(); + final NetworkCapabilities nc = mCM.getNetworkCapabilities(network); + assertFalse(nc.hasTransport(TRANSPORT_VPN)); } public void testGetConnectionOwnerUidSecurity() throws Exception { @@ -957,6 +969,8 @@ public class VpnTest extends InstrumentationTestCase { // VPN with no underlying networks should be metered by default. assertTrue(isNetworkMetered(mNetwork)); assertTrue(mCM.isActiveNetworkMetered()); + + expectVpnTransportInfo(mCM.getActiveNetwork()); } public void testVpnMeterednessWithNullUnderlyingNetwork() throws Exception { @@ -983,6 +997,8 @@ public class VpnTest extends InstrumentationTestCase { assertEquals(isNetworkMetered(underlyingNetwork), isNetworkMetered(mNetwork)); // Meteredness based on VPN capabilities and CM#isActiveNetworkMetered should be in sync. assertEquals(isNetworkMetered(mNetwork), mCM.isActiveNetworkMetered()); + + expectVpnTransportInfo(mCM.getActiveNetwork()); } public void testVpnMeterednessWithNonNullUnderlyingNetwork() throws Exception { @@ -1010,6 +1026,8 @@ public class VpnTest extends InstrumentationTestCase { assertEquals(isNetworkMetered(underlyingNetwork), isNetworkMetered(mNetwork)); // Meteredness based on VPN capabilities and CM#isActiveNetworkMetered should be in sync. assertEquals(isNetworkMetered(mNetwork), mCM.isActiveNetworkMetered()); + + expectVpnTransportInfo(mCM.getActiveNetwork()); } public void testAlwaysMeteredVpnWithNullUnderlyingNetwork() throws Exception { @@ -1034,6 +1052,8 @@ public class VpnTest extends InstrumentationTestCase { // VPN's meteredness does not depend on underlying network since it is always metered. assertTrue(isNetworkMetered(mNetwork)); assertTrue(mCM.isActiveNetworkMetered()); + + expectVpnTransportInfo(mCM.getActiveNetwork()); } public void testAlwaysMeteredVpnWithNonNullUnderlyingNetwork() throws Exception { @@ -1059,6 +1079,8 @@ public class VpnTest extends InstrumentationTestCase { // VPN's meteredness does not depend on underlying network since it is always metered. assertTrue(isNetworkMetered(mNetwork)); assertTrue(mCM.isActiveNetworkMetered()); + + expectVpnTransportInfo(mCM.getActiveNetwork()); } public void testB141603906() throws Exception { @@ -1108,6 +1130,14 @@ public class VpnTest extends InstrumentationTestCase { } } + private void expectVpnTransportInfo(Network network) { + final NetworkCapabilities vpnNc = mCM.getNetworkCapabilities(network); + assertTrue(vpnNc.hasTransport(TRANSPORT_VPN)); + final TransportInfo ti = vpnNc.getTransportInfo(); + assertTrue(ti instanceof VpnTransportInfo); + assertEquals(VpnManager.TYPE_VPN_SERVICE, ((VpnTransportInfo) ti).type); + } + private void assertDefaultProxy(ProxyInfo expected) { assertEquals("Incorrect proxy config.", expected, mCM.getDefaultProxy()); String expectedHost = expected == null ? null : expected.getHost(); diff --git a/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt b/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt index 4dbde1b0be..41537a94c3 100644 --- a/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt +++ b/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt @@ -48,6 +48,8 @@ import android.net.RouteInfo import android.net.SocketKeepalive import android.net.StringNetworkSpecifier import android.net.Uri +import android.net.VpnManager +import android.net.VpnTransportInfo import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnAddKeepalivePacketFilter import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnAutomaticReconnectDisabled import android.net.cts.NetworkAgentTest.TestableNetworkAgent.CallbackEntry.OnBandwidthUpdateRequested @@ -545,7 +547,7 @@ class NetworkAgentTest { @Test @IgnoreUpTo(Build.VERSION_CODES.R) - fun testSetUnderlyingNetworks() { + fun testSetUnderlyingNetworksAndVpnSpecifier() { val request = NetworkRequest.Builder() .addTransportType(TRANSPORT_TEST) .addTransportType(TRANSPORT_VPN) @@ -560,6 +562,7 @@ class NetworkAgentTest { addTransportType(TRANSPORT_VPN) removeCapability(NET_CAPABILITY_NOT_VPN) addCapability(NET_CAPABILITY_NOT_VCN_MANAGED) + setTransportInfo(VpnTransportInfo(VpnManager.TYPE_VPN_SERVICE)) } val defaultNetwork = mCM.activeNetwork assertNotNull(defaultNetwork) @@ -574,6 +577,8 @@ class NetworkAgentTest { // Check that the default network's transport is propagated to the VPN. var vpnNc = mCM.getNetworkCapabilities(agent.network) assertNotNull(vpnNc) + assertEquals(VpnManager.TYPE_VPN_SERVICE, + (vpnNc.transportInfo as VpnTransportInfo).type) val testAndVpn = intArrayOf(TRANSPORT_TEST, TRANSPORT_VPN) assertTrue(hasAllTransports(vpnNc, testAndVpn)) -- GitLab