Test the encap/timeout for the VCN

Bug: 269715746
Test: VpnTest
Change-Id: I8e5e7a7eb09ee4d2e0a88193c5a6b1f0580d5eb8
This commit is contained in:
Chalard Jean
2023-04-21 14:37:13 +09:00
parent d8321ef84f
commit 12740c9ff0

View File

@@ -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 */);