Merge "VCN: Explicitly handle IAE from updating underlying network"

This commit is contained in:
Yan Yan
2023-06-23 18:02:14 +00:00
committed by Gerrit Code Review
2 changed files with 29 additions and 1 deletions

View File

@@ -1889,7 +1889,7 @@ public class VcnGatewayConnection extends StateMachine {
mIpSecManager.applyTunnelModeTransform(
tunnelIface, IpSecManager.DIRECTION_FWD, transform);
}
} catch (IOException e) {
} catch (IOException | IllegalArgumentException e) {
logInfo("Transform application failed for network " + token, e);
sessionLost(token, e);
}

View File

@@ -42,6 +42,7 @@ import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.argThat;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
@@ -345,6 +346,33 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
verify(mConnMgr).reportNetworkConnectivity(eq(mNetworkAgent.getNetwork()), eq(false));
}
@Test
public void testMigrationHandleFailure() throws Exception {
triggerChildOpened();
mTestLooper.dispatchAll();
assertEquals(mIkeConnectionInfo, mGatewayConnection.getIkeConnectionInfo());
mGatewayConnection
.getUnderlyingNetworkControllerCallback()
.onSelectedUnderlyingNetworkChanged(TEST_UNDERLYING_NETWORK_RECORD_2);
final IkeSessionConnectionInfo newIkeConnectionInfo =
new IkeSessionConnectionInfo(
TEST_ADDR_V4, TEST_ADDR_V4_2, TEST_UNDERLYING_NETWORK_RECORD_2.network);
getIkeSessionCallback().onIkeSessionConnectionInfoChanged(newIkeConnectionInfo);
getChildSessionCallback()
.onIpSecTransformsMigrated(makeDummyIpSecTransform(), makeDummyIpSecTransform());
doThrow(new IllegalArgumentException("testMigrationHandleFailure"))
.when(mIpSecSvc)
.setNetworkForTunnelInterface(anyInt(), any(), any());
mTestLooper.dispatchAll();
assertEquals(mGatewayConnection.mDisconnectingState, mGatewayConnection.getCurrentState());
verify(mIkeSession).close();
}
private void triggerChildOpened() {
triggerChildOpened(Collections.singletonList(TEST_INTERNAL_ADDR), TEST_DNS_ADDR);
}