Test the encap/timeout for the VCN
Bug: 269715746 Test: VpnTest Change-Id: I8e5e7a7eb09ee4d2e0a88193c5a6b1f0580d5eb8
This commit is contained in:
@@ -142,6 +142,7 @@ import android.net.ipsec.ike.exceptions.IkeNetworkLostException;
|
||||
import android.net.ipsec.ike.exceptions.IkeNonProtocolException;
|
||||
import android.net.ipsec.ike.exceptions.IkeProtocolException;
|
||||
import android.net.ipsec.ike.exceptions.IkeTimeoutException;
|
||||
import android.net.vcn.VcnTransportInfo;
|
||||
import android.net.wifi.WifiInfo;
|
||||
import android.os.Build.VERSION_CODES;
|
||||
import android.os.Bundle;
|
||||
@@ -1563,6 +1564,11 @@ public class VpnTest extends VpnTestBase {
|
||||
}
|
||||
|
||||
private NetworkCallback triggerOnAvailableAndGetCallback() throws Exception {
|
||||
return triggerOnAvailableAndGetCallback(new NetworkCapabilities.Builder().build());
|
||||
}
|
||||
|
||||
private NetworkCallback triggerOnAvailableAndGetCallback(
|
||||
@NonNull final NetworkCapabilities caps) throws Exception {
|
||||
final ArgumentCaptor<NetworkCallback> networkCallbackCaptor =
|
||||
ArgumentCaptor.forClass(NetworkCallback.class);
|
||||
verify(mConnectivityManager, timeout(TEST_TIMEOUT_MS))
|
||||
@@ -1579,7 +1585,7 @@ public class VpnTest extends VpnTestBase {
|
||||
// if NetworkCapabilities and LinkProperties of underlying network will be sent/cleared or
|
||||
// not.
|
||||
// See verifyVpnManagerEvent().
|
||||
cb.onCapabilitiesChanged(TEST_NETWORK, new NetworkCapabilities());
|
||||
cb.onCapabilitiesChanged(TEST_NETWORK, caps);
|
||||
cb.onLinkPropertiesChanged(TEST_NETWORK, new LinkProperties());
|
||||
return cb;
|
||||
}
|
||||
@@ -1903,12 +1909,15 @@ public class VpnTest extends VpnTestBase {
|
||||
|
||||
private PlatformVpnSnapshot verifySetupPlatformVpn(VpnProfile vpnProfile,
|
||||
IkeSessionConfiguration ikeConfig, boolean mtuSupportsIpv6) throws Exception {
|
||||
return verifySetupPlatformVpn(vpnProfile, ikeConfig, mtuSupportsIpv6,
|
||||
false /* areLongLivedTcpConnectionsExpensive */);
|
||||
return verifySetupPlatformVpn(vpnProfile, ikeConfig,
|
||||
new NetworkCapabilities.Builder().build() /* underlying network caps */,
|
||||
mtuSupportsIpv6, false /* areLongLivedTcpConnectionsExpensive */);
|
||||
}
|
||||
|
||||
private PlatformVpnSnapshot verifySetupPlatformVpn(VpnProfile vpnProfile,
|
||||
IkeSessionConfiguration ikeConfig, boolean mtuSupportsIpv6,
|
||||
IkeSessionConfiguration ikeConfig,
|
||||
@NonNull final NetworkCapabilities underlyingNetworkCaps,
|
||||
boolean mtuSupportsIpv6,
|
||||
boolean areLongLivedTcpConnectionsExpensive) throws Exception {
|
||||
if (!mtuSupportsIpv6) {
|
||||
doReturn(IPV6_MIN_MTU - 1).when(mTestDeps).calculateVpnMtu(any(), anyInt(), anyInt(),
|
||||
@@ -1925,7 +1934,7 @@ public class VpnTest extends VpnTestBase {
|
||||
.thenReturn(vpnProfile.encode());
|
||||
|
||||
vpn.startVpnProfile(TEST_VPN_PKG);
|
||||
final NetworkCallback nwCb = triggerOnAvailableAndGetCallback();
|
||||
final NetworkCallback nwCb = triggerOnAvailableAndGetCallback(underlyingNetworkCaps);
|
||||
verify(mExecutor, atLeastOnce()).schedule(any(Runnable.class), anyLong(), any());
|
||||
reset(mExecutor);
|
||||
|
||||
@@ -2079,15 +2088,16 @@ public class VpnTest extends VpnTestBase {
|
||||
doTestMigrateIkeSession(ikeProfile.toVpnProfile(),
|
||||
expectedKeepalive,
|
||||
ESP_IP_VERSION_AUTO /* expectedIpVersion */,
|
||||
ESP_ENCAP_TYPE_AUTO /* expectedEncapType */);
|
||||
ESP_ENCAP_TYPE_AUTO /* expectedEncapType */,
|
||||
new NetworkCapabilities.Builder().build());
|
||||
}
|
||||
|
||||
private void doTestMigrateIkeSession_FromIkeTunnConnParams(
|
||||
private Ikev2VpnProfile makeIkeV2VpnProfile(
|
||||
boolean isAutomaticIpVersionSelectionEnabled,
|
||||
boolean isAutomaticNattKeepaliveTimerEnabled,
|
||||
int keepaliveInProfile,
|
||||
int ipVersionInProfile,
|
||||
int encapTypeInProfile) throws Exception {
|
||||
int encapTypeInProfile) {
|
||||
// TODO: Update helper function in IkeSessionTestUtils to support building IkeSessionParams
|
||||
// with IP version and encap type when mainline-prod branch support these two APIs.
|
||||
final IkeSessionParams params = getTestIkeSessionParams(true /* testIpv6 */,
|
||||
@@ -2099,12 +2109,40 @@ public class VpnTest extends VpnTestBase {
|
||||
|
||||
final IkeTunnelConnectionParams tunnelParams =
|
||||
new IkeTunnelConnectionParams(ikeSessionParams, CHILD_PARAMS);
|
||||
final Ikev2VpnProfile ikeProfile = new Ikev2VpnProfile.Builder(tunnelParams)
|
||||
return new Ikev2VpnProfile.Builder(tunnelParams)
|
||||
.setBypassable(true)
|
||||
.setAutomaticNattKeepaliveTimerEnabled(isAutomaticNattKeepaliveTimerEnabled)
|
||||
.setAutomaticIpVersionSelectionEnabled(isAutomaticIpVersionSelectionEnabled)
|
||||
.build();
|
||||
}
|
||||
|
||||
private void doTestMigrateIkeSession_FromIkeTunnConnParams(
|
||||
boolean isAutomaticIpVersionSelectionEnabled,
|
||||
boolean isAutomaticNattKeepaliveTimerEnabled,
|
||||
int keepaliveInProfile,
|
||||
int ipVersionInProfile,
|
||||
int encapTypeInProfile) throws Exception {
|
||||
doTestMigrateIkeSession_FromIkeTunnConnParams(isAutomaticIpVersionSelectionEnabled,
|
||||
isAutomaticNattKeepaliveTimerEnabled, keepaliveInProfile, ipVersionInProfile,
|
||||
encapTypeInProfile, new NetworkCapabilities.Builder().build());
|
||||
}
|
||||
|
||||
private void doTestMigrateIkeSession_FromIkeTunnConnParams(
|
||||
boolean isAutomaticIpVersionSelectionEnabled,
|
||||
boolean isAutomaticNattKeepaliveTimerEnabled,
|
||||
int keepaliveInProfile,
|
||||
int ipVersionInProfile,
|
||||
int encapTypeInProfile,
|
||||
@NonNull final NetworkCapabilities nc) throws Exception {
|
||||
final Ikev2VpnProfile ikeProfile = makeIkeV2VpnProfile(
|
||||
isAutomaticIpVersionSelectionEnabled,
|
||||
isAutomaticNattKeepaliveTimerEnabled,
|
||||
keepaliveInProfile,
|
||||
ipVersionInProfile,
|
||||
encapTypeInProfile);
|
||||
|
||||
final IkeSessionParams ikeSessionParams =
|
||||
ikeProfile.getIkeTunnelConnectionParams().getIkeSessionParams();
|
||||
final int expectedKeepalive = isAutomaticNattKeepaliveTimerEnabled
|
||||
? AUTOMATIC_KEEPALIVE_DELAY_SECONDS
|
||||
: ikeSessionParams.getNattKeepAliveDelaySeconds();
|
||||
@@ -2115,22 +2153,48 @@ public class VpnTest extends VpnTestBase {
|
||||
? ESP_ENCAP_TYPE_AUTO
|
||||
: ikeSessionParams.getEncapType();
|
||||
doTestMigrateIkeSession(ikeProfile.toVpnProfile(), expectedKeepalive,
|
||||
expectedIpVersion, expectedEncapType);
|
||||
expectedIpVersion, expectedEncapType, nc);
|
||||
}
|
||||
|
||||
private void doTestMigrateIkeSession(VpnProfile profile,
|
||||
int expectedKeepalive, int expectedIpVersion, int expectedEncapType) throws Exception {
|
||||
@Test
|
||||
public void doTestMigrateIkeSession_Vcn() throws Exception {
|
||||
final int expectedKeepalive = 2097; // Any unlikely number will do
|
||||
final NetworkCapabilities vcnNc = new NetworkCapabilities.Builder()
|
||||
.addTransportType(TRANSPORT_CELLULAR)
|
||||
.setTransportInfo(new VcnTransportInfo(TEST_SUB_ID, expectedKeepalive))
|
||||
.build();
|
||||
final Ikev2VpnProfile ikev2VpnProfile = makeIkeV2VpnProfile(
|
||||
true /* isAutomaticIpVersionSelectionEnabled */,
|
||||
true /* isAutomaticNattKeepaliveTimerEnabled */,
|
||||
234 /* keepaliveInProfile */, // Should be ignored, any value will do
|
||||
ESP_IP_VERSION_IPV4, // Should be ignored
|
||||
ESP_ENCAP_TYPE_UDP // Should be ignored
|
||||
);
|
||||
doTestMigrateIkeSession(
|
||||
ikev2VpnProfile.toVpnProfile(),
|
||||
expectedKeepalive,
|
||||
ESP_IP_VERSION_AUTO /* expectedIpVersion */,
|
||||
ESP_ENCAP_TYPE_AUTO /* expectedEncapType */,
|
||||
vcnNc);
|
||||
}
|
||||
|
||||
private void doTestMigrateIkeSession(
|
||||
@NonNull final VpnProfile profile,
|
||||
final int expectedKeepalive,
|
||||
final int expectedIpVersion,
|
||||
final int expectedEncapType,
|
||||
@NonNull final NetworkCapabilities caps) throws Exception {
|
||||
final PlatformVpnSnapshot vpnSnapShot =
|
||||
verifySetupPlatformVpn(profile,
|
||||
createIkeConfig(createIkeConnectInfo(), true /* isMobikeEnabled */),
|
||||
caps /* underlying network capabilities */,
|
||||
false /* mtuSupportsIpv6 */,
|
||||
expectedKeepalive < DEFAULT_LONG_LIVED_TCP_CONNS_EXPENSIVE_TIMEOUT_SEC);
|
||||
// Simulate a new network coming up
|
||||
vpnSnapShot.nwCb.onAvailable(TEST_NETWORK_2);
|
||||
verify(mIkeSessionWrapper, never()).setNetwork(any(), anyInt(), anyInt(), anyInt());
|
||||
|
||||
vpnSnapShot.nwCb.onCapabilitiesChanged(
|
||||
TEST_NETWORK_2, new NetworkCapabilities.Builder().build());
|
||||
vpnSnapShot.nwCb.onCapabilitiesChanged(TEST_NETWORK_2, caps);
|
||||
// Verify MOBIKE is triggered
|
||||
verify(mIkeSessionWrapper, timeout(TEST_TIMEOUT_MS)).setNetwork(TEST_NETWORK_2,
|
||||
expectedIpVersion, expectedEncapType, expectedKeepalive);
|
||||
@@ -2156,6 +2220,7 @@ public class VpnTest extends VpnTestBase {
|
||||
final PlatformVpnSnapshot vpnSnapShot =
|
||||
verifySetupPlatformVpn(ikeProfile.toVpnProfile(),
|
||||
createIkeConfig(createIkeConnectInfo(), true /* isMobikeEnabled */),
|
||||
new NetworkCapabilities.Builder().build() /* underlying network caps */,
|
||||
hasV6 /* mtuSupportsIpv6 */,
|
||||
false /* areLongLivedTcpConnectionsExpensive */);
|
||||
reset(mExecutor);
|
||||
@@ -2343,6 +2408,7 @@ public class VpnTest extends VpnTestBase {
|
||||
final PlatformVpnSnapshot vpnSnapShot =
|
||||
verifySetupPlatformVpn(ikeProfile.toVpnProfile(),
|
||||
createIkeConfig(createIkeConnectInfo(), true /* isMobikeEnabled */),
|
||||
new NetworkCapabilities.Builder().build() /* underlying network caps */,
|
||||
false /* mtuSupportsIpv6 */,
|
||||
true /* areLongLivedTcpConnectionsExpensive */);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user