blob: 291d3a4aa8129bdebb636f221b946b2cb7170756 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.cloud.network.vpn;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.Site2SiteVpnConnection;
import com.cloud.network.Site2SiteVpnConnection.State;
import com.cloud.network.Site2SiteVpnGateway;
import com.cloud.network.dao.IPAddressDao;
import com.cloud.network.dao.IPAddressVO;
import com.cloud.network.dao.Site2SiteCustomerGatewayDao;
import com.cloud.network.dao.Site2SiteCustomerGatewayVO;
import com.cloud.network.dao.Site2SiteVpnConnectionDao;
import com.cloud.network.dao.Site2SiteVpnConnectionVO;
import com.cloud.network.dao.Site2SiteVpnGatewayDao;
import com.cloud.network.dao.Site2SiteVpnGatewayVO;
import com.cloud.network.element.Site2SiteVpnServiceProvider;
import com.cloud.network.vpc.VpcManager;
import com.cloud.network.vpc.VpcVO;
import com.cloud.network.vpc.dao.VpcDao;
import com.cloud.network.vpc.dao.VpcOfferingServiceMapDao;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
import com.cloud.user.AccountVO;
import com.cloud.user.User;
import com.cloud.user.UserVO;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.NetUtils;
import com.cloud.vm.DomainRouterVO;
import org.apache.cloudstack.acl.SecurityChecker;
import org.apache.cloudstack.annotation.dao.AnnotationDao;
import org.apache.cloudstack.api.command.user.vpn.CreateVpnConnectionCmd;
import org.apache.cloudstack.api.command.user.vpn.CreateVpnCustomerGatewayCmd;
import org.apache.cloudstack.api.command.user.vpn.CreateVpnGatewayCmd;
import org.apache.cloudstack.api.command.user.vpn.DeleteVpnConnectionCmd;
import org.apache.cloudstack.api.command.user.vpn.DeleteVpnCustomerGatewayCmd;
import org.apache.cloudstack.api.command.user.vpn.DeleteVpnGatewayCmd;
import org.apache.cloudstack.api.command.user.vpn.ResetVpnConnectionCmd;
import org.apache.cloudstack.context.CallContext;
import org.apache.cloudstack.framework.config.ConfigKey;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.Silent.class)
public class Site2SiteVpnManagerImplTest {
@Mock
private Site2SiteCustomerGatewayDao _customerGatewayDao;
@Mock
private Site2SiteVpnGatewayDao _vpnGatewayDao;
@Mock
private Site2SiteVpnConnectionDao _vpnConnectionDao;
@Mock
private VpcDao _vpcDao;
@Mock
private IPAddressDao _ipAddressDao;
@Mock
private VpcManager _vpcMgr;
@Mock
private AccountManager _accountMgr;
@Mock
private AnnotationDao annotationDao;
@Mock
private List<Site2SiteVpnServiceProvider> _s2sProviders;
@Mock
VpcOfferingServiceMapDao vpcOfferingServiceMapDao;
@InjectMocks
private Site2SiteVpnManagerImpl site2SiteVpnManager;
private AccountVO account;
private UserVO user;
private VpcVO vpc;
private IPAddressVO ipAddress;
private Site2SiteVpnGatewayVO vpnGateway;
private Site2SiteCustomerGatewayVO customerGateway;
private Site2SiteVpnConnectionVO vpnConnection;
private static final Long ACCOUNT_ID = 1L;
private static final Long DOMAIN_ID = 2L;
private static final Long VPC_ID = 3L;
private static final Long VPN_GATEWAY_ID = 4L;
private static final Long CUSTOMER_GATEWAY_ID = 5L;
private static final Long VPN_CONNECTION_ID = 6L;
private static final Long IP_ADDRESS_ID = 7L;
@Before
public void setUp() throws Exception {
account = new AccountVO("testaccount", DOMAIN_ID, "networkdomain", Account.Type.NORMAL, UUID.randomUUID().toString());
account.setId(ACCOUNT_ID);
user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone",
UUID.randomUUID().toString(), User.Source.UNKNOWN);
CallContext.register(user, account);
vpc = mock(VpcVO.class);
when(vpc.getId()).thenReturn(VPC_ID);
when(vpc.getAccountId()).thenReturn(ACCOUNT_ID);
when(vpc.getDomainId()).thenReturn(DOMAIN_ID);
when(vpc.getCidr()).thenReturn("10.0.0.0/16");
ipAddress = mock(IPAddressVO.class);
when(ipAddress.getId()).thenReturn(IP_ADDRESS_ID);
when(ipAddress.getVpcId()).thenReturn(VPC_ID);
vpnGateway = mock(Site2SiteVpnGatewayVO.class);
when(vpnGateway.getId()).thenReturn(VPN_GATEWAY_ID);
when(vpnGateway.getVpcId()).thenReturn(VPC_ID);
when(vpnGateway.getAccountId()).thenReturn(ACCOUNT_ID);
when(vpnGateway.getDomainId()).thenReturn(DOMAIN_ID);
customerGateway = mock(Site2SiteCustomerGatewayVO.class);
when(customerGateway.getId()).thenReturn(CUSTOMER_GATEWAY_ID);
when(customerGateway.getAccountId()).thenReturn(ACCOUNT_ID);
when(customerGateway.getDomainId()).thenReturn(DOMAIN_ID);
when(customerGateway.getGuestCidrList()).thenReturn("192.168.1.0/24");
when(customerGateway.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(customerGateway.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(customerGateway.getIkeVersion()).thenReturn("ike");
vpnConnection = new Site2SiteVpnConnectionVO(ACCOUNT_ID, DOMAIN_ID, VPN_GATEWAY_ID, CUSTOMER_GATEWAY_ID, false);
vpnConnection.setState(State.Pending);
when(_accountMgr.getAccount(ACCOUNT_ID)).thenReturn(account);
doNothing().when(_accountMgr).checkAccess(any(Account.class), nullable(SecurityChecker.AccessType.class), anyBoolean(), any());
}
@After
public void tearDown() throws Exception {
resetConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedIkeVersions);
resetConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedEncryptionAlgorithms);
resetConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedHashingAlgorithms);
resetConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedDhGroup);
resetConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteIkeVersions);
resetConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteEncryptionAlgorithms);
resetConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteHashingAlgorithms);
resetConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteDhGroup);
CallContext.unregister();
}
private void setConfigKeyValue(ConfigKey<String> configKey, String value) {
try {
Field valueField = ConfigKey.class.getDeclaredField("_value");
valueField.setAccessible(true);
valueField.set(configKey, value);
Field dynamicField = ConfigKey.class.getDeclaredField("_isDynamic");
dynamicField.setAccessible(true);
dynamicField.setBoolean(configKey, false);
} catch (IllegalAccessException | NoSuchFieldException e) {
throw new RuntimeException("Failed to set ConfigKey value", e);
}
}
private void resetConfigKeyValue(ConfigKey<String> configKey) {
try {
Field valueField = ConfigKey.class.getDeclaredField("_value");
valueField.setAccessible(true);
valueField.set(configKey, null);
Field dynamicField = ConfigKey.class.getDeclaredField("_isDynamic");
dynamicField.setAccessible(true);
dynamicField.setBoolean(configKey, true);
} catch (IllegalAccessException | NoSuchFieldException e) {
throw new RuntimeException("Failed to reset ConfigKey value", e);
}
}
@Test
public void testCreateVpnGatewaySuccess() {
CreateVpnGatewayCmd cmd = mock(CreateVpnGatewayCmd.class);
when(cmd.getVpcId()).thenReturn(VPC_ID);
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
when(cmd.isDisplay()).thenReturn(true);
when(_vpcDao.findById(VPC_ID)).thenReturn(vpc);
when(_vpnGatewayDao.findByVpcId(VPC_ID)).thenReturn(null);
when(_ipAddressDao.listByAssociatedVpc(VPC_ID, true)).thenReturn(List.of(ipAddress));
when(_vpnGatewayDao.persist(any(Site2SiteVpnGatewayVO.class))).thenReturn(vpnGateway);
Site2SiteVpnGateway result = site2SiteVpnManager.createVpnGateway(cmd);
assertNotNull(result);
verify(_vpnGatewayDao).persist(any(Site2SiteVpnGatewayVO.class));
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateVpnGatewayInvalidVpc() {
CreateVpnGatewayCmd cmd = mock(CreateVpnGatewayCmd.class);
when(cmd.getVpcId()).thenReturn(VPC_ID);
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
when(_vpcDao.findById(VPC_ID)).thenReturn(null);
site2SiteVpnManager.createVpnGateway(cmd);
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateVpnGatewayAlreadyExists() {
CreateVpnGatewayCmd cmd = mock(CreateVpnGatewayCmd.class);
when(cmd.getVpcId()).thenReturn(VPC_ID);
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
when(_vpcDao.findById(VPC_ID)).thenReturn(vpc);
when(_vpnGatewayDao.findByVpcId(VPC_ID)).thenReturn(vpnGateway);
site2SiteVpnManager.createVpnGateway(cmd);
}
@Test(expected = CloudRuntimeException.class)
public void testCreateVpnGatewayNoSourceNatIp() {
CreateVpnGatewayCmd cmd = mock(CreateVpnGatewayCmd.class);
when(cmd.getVpcId()).thenReturn(VPC_ID);
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
when(_vpcDao.findById(VPC_ID)).thenReturn(vpc);
when(_vpnGatewayDao.findByVpcId(VPC_ID)).thenReturn(null);
when(_ipAddressDao.listByAssociatedVpc(VPC_ID, true)).thenReturn(new ArrayList<>());
site2SiteVpnManager.createVpnGateway(cmd);
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateCustomerGatewayInvalidIp() {
CreateVpnCustomerGatewayCmd cmd = mock(CreateVpnCustomerGatewayCmd.class);
when(cmd.getGatewayIp()).thenReturn("invalid-ip");
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
try (MockedStatic<NetUtils> netUtilsMock = Mockito.mockStatic(NetUtils.class)) {
netUtilsMock.when(() -> NetUtils.isValidIp4("invalid-ip")).thenReturn(false);
netUtilsMock.when(() -> NetUtils.verifyDomainName("invalid-ip")).thenReturn(false);
site2SiteVpnManager.createCustomerGateway(cmd);
}
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateCustomerGatewayInvalidCidrList() {
CreateVpnCustomerGatewayCmd cmd = mock(CreateVpnCustomerGatewayCmd.class);
when(cmd.getGatewayIp()).thenReturn("1.2.3.4");
when(cmd.getGuestCidrList()).thenReturn("invalid-cidr");
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
try (MockedStatic<NetUtils> netUtilsMock = Mockito.mockStatic(NetUtils.class)) {
netUtilsMock.when(() -> NetUtils.isValidIp4("1.2.3.4")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidCidrList("invalid-cidr")).thenReturn(false);
site2SiteVpnManager.createCustomerGateway(cmd);
}
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateCustomerGatewayInvalidIkePolicy() {
CreateVpnCustomerGatewayCmd cmd = mock(CreateVpnCustomerGatewayCmd.class);
when(cmd.getGatewayIp()).thenReturn("1.2.3.4");
when(cmd.getGuestCidrList()).thenReturn("192.168.1.0/24");
when(cmd.getIkePolicy()).thenReturn("invalid-policy");
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
try (MockedStatic<NetUtils> netUtilsMock = Mockito.mockStatic(NetUtils.class)) {
netUtilsMock.when(() -> NetUtils.isValidIp4("1.2.3.4")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidCidrList("192.168.1.0/24")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("ike", "invalid-policy")).thenReturn(false);
site2SiteVpnManager.createCustomerGateway(cmd);
}
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateCustomerGatewayInvalidEspPolicy() {
CreateVpnCustomerGatewayCmd cmd = mock(CreateVpnCustomerGatewayCmd.class);
when(cmd.getGatewayIp()).thenReturn("1.2.3.4");
when(cmd.getGuestCidrList()).thenReturn("192.168.1.0/24");
when(cmd.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(cmd.getEspPolicy()).thenReturn("invalid-policy");
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
try (MockedStatic<NetUtils> netUtilsMock = Mockito.mockStatic(NetUtils.class)) {
netUtilsMock.when(() -> NetUtils.isValidIp4("1.2.3.4")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidCidrList("192.168.1.0/24")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("ike", "aes128-sha256;modp2048")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("esp", "invalid-policy")).thenReturn(false);
site2SiteVpnManager.createCustomerGateway(cmd);
}
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateCustomerGatewayWithExcludedParameters() throws Exception {
CreateVpnCustomerGatewayCmd cmd = mock(CreateVpnCustomerGatewayCmd.class);
when(cmd.getName()).thenReturn("test-gateway");
when(cmd.getGatewayIp()).thenReturn("1.2.3.4");
when(cmd.getGuestCidrList()).thenReturn("192.168.1.0/24");
when(cmd.getIpsecPsk()).thenReturn("test-psk");
when(cmd.getIkePolicy()).thenReturn("3des-sha256;modp2048");
when(cmd.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(cmd.getIkeVersion()).thenReturn("ike");
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedEncryptionAlgorithms, "3des");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedHashingAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedIkeVersions, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedDhGroup, "");
try (MockedStatic<NetUtils> netUtilsMock = Mockito.mockStatic(NetUtils.class)) {
netUtilsMock.when(() -> NetUtils.isValidIp4("1.2.3.4")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidCidrList("192.168.1.0/24")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("ike", "3des-sha256;modp2048")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("esp", "aes128-sha256;modp2048")).thenReturn(true);
site2SiteVpnManager.createCustomerGateway(cmd);
}
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateCustomerGatewayDuplicateName() {
CreateVpnCustomerGatewayCmd cmd = mock(CreateVpnCustomerGatewayCmd.class);
when(cmd.getName()).thenReturn("test-gateway");
when(cmd.getGatewayIp()).thenReturn("1.2.3.4");
when(cmd.getGuestCidrList()).thenReturn("192.168.1.0/24");
when(cmd.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(cmd.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
try (MockedStatic<NetUtils> netUtilsMock = Mockito.mockStatic(NetUtils.class)) {
netUtilsMock.when(() -> NetUtils.isValidIp4("1.2.3.4")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidCidrList("192.168.1.0/24")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("ike", "aes128-sha256;modp2048")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("esp", "aes128-sha256;modp2048")).thenReturn(true);
when(_customerGatewayDao.findByNameAndAccountId("test-gateway", ACCOUNT_ID)).thenReturn(customerGateway);
site2SiteVpnManager.createCustomerGateway(cmd);
}
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateCustomerGatewayInvalidIkeLifetime() {
CreateVpnCustomerGatewayCmd cmd = mock(CreateVpnCustomerGatewayCmd.class);
when(cmd.getGatewayIp()).thenReturn("1.2.3.4");
when(cmd.getGuestCidrList()).thenReturn("192.168.1.0/24");
when(cmd.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(cmd.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(cmd.getIkeLifetime()).thenReturn(86401L);
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
try (MockedStatic<NetUtils> netUtilsMock = Mockito.mockStatic(NetUtils.class)) {
netUtilsMock.when(() -> NetUtils.isValidIp4("1.2.3.4")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidCidrList("192.168.1.0/24")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("ike", "aes128-sha256;modp2048")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("esp", "aes128-sha256;modp2048")).thenReturn(true);
site2SiteVpnManager.createCustomerGateway(cmd);
}
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateCustomerGatewayInvalidEspLifetime() {
CreateVpnCustomerGatewayCmd cmd = mock(CreateVpnCustomerGatewayCmd.class);
when(cmd.getGatewayIp()).thenReturn("1.2.3.4");
when(cmd.getGuestCidrList()).thenReturn("192.168.1.0/24");
when(cmd.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(cmd.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(cmd.getEspLifetime()).thenReturn(86401L);
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
try (MockedStatic<NetUtils> netUtilsMock = Mockito.mockStatic(NetUtils.class)) {
netUtilsMock.when(() -> NetUtils.isValidIp4("1.2.3.4")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidCidrList("192.168.1.0/24")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("ike", "aes128-sha256;modp2048")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("esp", "aes128-sha256;modp2048")).thenReturn(true);
site2SiteVpnManager.createCustomerGateway(cmd);
}
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateCustomerGatewayTooManySubnets() {
CreateVpnCustomerGatewayCmd cmd = mock(CreateVpnCustomerGatewayCmd.class);
when(cmd.getGatewayIp()).thenReturn("1.2.3.4");
String tooManyCidrs = "192.168.1.0/24,192.168.2.0/24,192.168.3.0/24,192.168.4.0/24,192.168.5.0/24," +
"192.168.6.0/24,192.168.7.0/24,192.168.8.0/24,192.168.9.0/24,192.168.10.0/24,192.168.11.0/24";
when(cmd.getGuestCidrList()).thenReturn(tooManyCidrs);
when(cmd.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(cmd.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
try (MockedStatic<NetUtils> netUtilsMock = Mockito.mockStatic(NetUtils.class)) {
netUtilsMock.when(() -> NetUtils.isValidIp4("1.2.3.4")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidCidrList(tooManyCidrs)).thenReturn(true);
netUtilsMock.when(() -> NetUtils.getCleanIp4CidrList(tooManyCidrs)).thenReturn(tooManyCidrs);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("ike", "aes128-sha256;modp2048")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("esp", "aes128-sha256;modp2048")).thenReturn(true);
site2SiteVpnManager.createCustomerGateway(cmd);
}
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateCustomerGatewayOverlappingSubnets() {
CreateVpnCustomerGatewayCmd cmd = mock(CreateVpnCustomerGatewayCmd.class);
when(cmd.getGatewayIp()).thenReturn("1.2.3.4");
when(cmd.getGuestCidrList()).thenReturn("192.168.1.0/24,192.168.1.0/25");
when(cmd.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(cmd.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
try (MockedStatic<NetUtils> netUtilsMock = Mockito.mockStatic(NetUtils.class)) {
String cidrList = "192.168.1.0/24,192.168.1.0/25";
netUtilsMock.when(() -> NetUtils.isValidIp4("1.2.3.4")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidCidrList(cidrList)).thenReturn(true);
netUtilsMock.when(() -> NetUtils.getCleanIp4CidrList(cidrList)).thenReturn(cidrList);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("ike", "aes128-sha256;modp2048")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isValidS2SVpnPolicy("esp", "aes128-sha256;modp2048")).thenReturn(true);
netUtilsMock.when(() -> NetUtils.isNetworksOverlap("192.168.1.0/24", "192.168.1.0/25")).thenReturn(true);
site2SiteVpnManager.createCustomerGateway(cmd);
}
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateVpnConnectionCidrOverlapWithVpc() {
CreateVpnConnectionCmd cmd = mock(CreateVpnConnectionCmd.class);
when(cmd.getVpnGatewayId()).thenReturn(VPN_GATEWAY_ID);
when(cmd.getCustomerGatewayId()).thenReturn(CUSTOMER_GATEWAY_ID);
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
Site2SiteCustomerGatewayVO customerGw = mock(Site2SiteCustomerGatewayVO.class);
when(customerGw.getGuestCidrList()).thenReturn("10.0.0.0/24");
when(customerGw.getAccountId()).thenReturn(ACCOUNT_ID);
when(customerGw.getDomainId()).thenReturn(DOMAIN_ID);
when(_customerGatewayDao.findById(CUSTOMER_GATEWAY_ID)).thenReturn(customerGw);
when(_vpnGatewayDao.findById(VPN_GATEWAY_ID)).thenReturn(vpnGateway);
when(_vpnConnectionDao.findByVpnGatewayIdAndCustomerGatewayId(VPN_GATEWAY_ID, CUSTOMER_GATEWAY_ID)).thenReturn(null);
when(_vpnGatewayDao.findByVpcId(VPC_ID)).thenReturn(vpnGateway);
when(_vpcDao.findById(VPC_ID)).thenReturn(vpc);
try (MockedStatic<NetUtils> netUtilsMock = Mockito.mockStatic(NetUtils.class)) {
netUtilsMock.when(() -> NetUtils.isNetworksOverlap("10.0.0.0/16", "10.0.0.0/24")).thenReturn(true);
site2SiteVpnManager.createVpnConnection(cmd);
}
}
@Test(expected = InvalidParameterValueException.class)
public void testCreateVpnConnectionExceedsLimit() {
CreateVpnConnectionCmd cmd = mock(CreateVpnConnectionCmd.class);
when(cmd.getVpnGatewayId()).thenReturn(VPN_GATEWAY_ID);
when(cmd.getCustomerGatewayId()).thenReturn(CUSTOMER_GATEWAY_ID);
when(cmd.getEntityOwnerId()).thenReturn(ACCOUNT_ID);
when(_customerGatewayDao.findById(CUSTOMER_GATEWAY_ID)).thenReturn(customerGateway);
when(_vpnGatewayDao.findById(VPN_GATEWAY_ID)).thenReturn(vpnGateway);
when(_vpnConnectionDao.findByVpnGatewayIdAndCustomerGatewayId(VPN_GATEWAY_ID, CUSTOMER_GATEWAY_ID)).thenReturn(null);
when(_vpnGatewayDao.findByVpcId(VPC_ID)).thenReturn(vpnGateway);
when(_vpcDao.findById(VPC_ID)).thenReturn(vpc);
List<Site2SiteVpnConnectionVO> existingConns = new ArrayList<>();
for (int i = 0; i < 4; i++) {
existingConns.add(mock(Site2SiteVpnConnectionVO.class));
}
when(_vpnConnectionDao.listByVpnGatewayId(VPN_GATEWAY_ID)).thenReturn(existingConns);
site2SiteVpnManager.createVpnConnection(cmd);
}
@Test
public void testDeleteCustomerGatewaySuccess() {
DeleteVpnCustomerGatewayCmd cmd = mock(DeleteVpnCustomerGatewayCmd.class);
when(cmd.getId()).thenReturn(CUSTOMER_GATEWAY_ID);
when(_customerGatewayDao.findById(CUSTOMER_GATEWAY_ID)).thenReturn(customerGateway);
when(_vpnConnectionDao.listByCustomerGatewayId(CUSTOMER_GATEWAY_ID)).thenReturn(new ArrayList<>());
boolean result = site2SiteVpnManager.deleteCustomerGateway(cmd);
assertTrue(result);
verify(_customerGatewayDao).remove(CUSTOMER_GATEWAY_ID);
}
@Test(expected = InvalidParameterValueException.class)
public void testDeleteCustomerGatewayWithConnections() {
DeleteVpnCustomerGatewayCmd cmd = mock(DeleteVpnCustomerGatewayCmd.class);
when(cmd.getId()).thenReturn(CUSTOMER_GATEWAY_ID);
when(_customerGatewayDao.findById(CUSTOMER_GATEWAY_ID)).thenReturn(customerGateway);
when(_vpnConnectionDao.listByCustomerGatewayId(CUSTOMER_GATEWAY_ID)).thenReturn(List.of(vpnConnection));
site2SiteVpnManager.deleteCustomerGateway(cmd);
}
@Test
public void testDeleteVpnGatewaySuccess() {
DeleteVpnGatewayCmd cmd = mock(DeleteVpnGatewayCmd.class);
when(cmd.getId()).thenReturn(VPN_GATEWAY_ID);
when(_vpnGatewayDao.findById(VPN_GATEWAY_ID)).thenReturn(vpnGateway);
when(_vpnConnectionDao.listByVpnGatewayId(VPN_GATEWAY_ID)).thenReturn(new ArrayList<>());
boolean result = site2SiteVpnManager.deleteVpnGateway(cmd);
assertTrue(result);
verify(_vpnGatewayDao).remove(VPN_GATEWAY_ID);
}
@Test(expected = InvalidParameterValueException.class)
public void testDeleteVpnGatewayWithConnections() {
DeleteVpnGatewayCmd cmd = mock(DeleteVpnGatewayCmd.class);
when(cmd.getId()).thenReturn(VPN_GATEWAY_ID);
when(_vpnGatewayDao.findById(VPN_GATEWAY_ID)).thenReturn(vpnGateway);
when(_vpnConnectionDao.listByVpnGatewayId(VPN_GATEWAY_ID)).thenReturn(List.of(vpnConnection));
site2SiteVpnManager.deleteVpnGateway(cmd);
}
@Test
public void testDeleteVpnConnectionSuccess() throws ResourceUnavailableException {
DeleteVpnConnectionCmd cmd = mock(DeleteVpnConnectionCmd.class);
when(cmd.getId()).thenReturn(VPN_CONNECTION_ID);
when(_vpnConnectionDao.findById(VPN_CONNECTION_ID)).thenReturn(vpnConnection);
vpnConnection.setState(State.Pending);
when(_vpnGatewayDao.findById(VPN_GATEWAY_ID)).thenReturn(vpnGateway);
when(_vpcMgr.applyStaticRouteForVpcVpnIfNeeded(anyLong(), anyBoolean())).thenReturn(true);
boolean result = site2SiteVpnManager.deleteVpnConnection(cmd);
assertTrue(result);
verify(_vpnConnectionDao).remove(VPN_CONNECTION_ID);
}
@Test
public void testStartVpnConnectionSuccess() throws ResourceUnavailableException {
when(_vpnConnectionDao.acquireInLockTable(VPN_CONNECTION_ID)).thenReturn(vpnConnection);
vpnConnection.setState(State.Pending);
when(_vpnGatewayDao.findById(VPN_GATEWAY_ID)).thenReturn(vpnGateway);
Site2SiteVpnServiceProvider provider = mock(Site2SiteVpnServiceProvider.class);
when(provider.startSite2SiteVpn(any(Site2SiteVpnConnection.class))).thenReturn(true);
when(_s2sProviders.iterator()).thenReturn(List.of(provider).iterator());
when(_vpnConnectionDao.persist(any(Site2SiteVpnConnectionVO.class))).thenReturn(vpnConnection);
when(_vpcMgr.applyStaticRouteForVpcVpnIfNeeded(anyLong(), anyBoolean())).thenReturn(true);
Site2SiteVpnConnection result = site2SiteVpnManager.startVpnConnection(VPN_CONNECTION_ID);
assertNotNull(result);
verify(_vpnConnectionDao, org.mockito.Mockito.atLeastOnce()).persist(any(Site2SiteVpnConnectionVO.class));
}
@Test(expected = InvalidParameterValueException.class)
public void testStartVpnConnectionWrongState() throws ResourceUnavailableException {
when(_vpnConnectionDao.acquireInLockTable(VPN_CONNECTION_ID)).thenReturn(vpnConnection);
vpnConnection.setState(State.Connected);
site2SiteVpnManager.startVpnConnection(VPN_CONNECTION_ID);
}
@Test
public void testResetVpnConnectionSuccess() throws ResourceUnavailableException {
ResetVpnConnectionCmd cmd = mock(ResetVpnConnectionCmd.class);
when(cmd.getId()).thenReturn(VPN_CONNECTION_ID);
when(_vpnConnectionDao.findById(VPN_CONNECTION_ID)).thenReturn(vpnConnection);
vpnConnection.setState(State.Connected);
when(_vpnConnectionDao.acquireInLockTable(VPN_CONNECTION_ID)).thenReturn(vpnConnection);
when(_vpnGatewayDao.findById(VPN_GATEWAY_ID)).thenReturn(vpnGateway);
Site2SiteVpnServiceProvider provider = mock(Site2SiteVpnServiceProvider.class);
when(provider.stopSite2SiteVpn(any(Site2SiteVpnConnection.class))).thenReturn(true);
when(provider.startSite2SiteVpn(any(Site2SiteVpnConnection.class))).thenReturn(true);
when(_s2sProviders.iterator()).thenReturn(List.of(provider).iterator());
when(_vpnConnectionDao.persist(any(Site2SiteVpnConnectionVO.class))).thenReturn(vpnConnection);
when(_vpcMgr.applyStaticRouteForVpcVpnIfNeeded(anyLong(), anyBoolean())).thenReturn(true);
Site2SiteVpnConnection result = site2SiteVpnManager.resetVpnConnection(cmd);
assertNotNull(result);
}
@Test
public void testCleanupVpnConnectionByVpc() {
when(_vpnConnectionDao.listByVpcId(VPC_ID)).thenReturn(List.of(vpnConnection));
boolean result = site2SiteVpnManager.cleanupVpnConnectionByVpc(VPC_ID);
assertTrue(result);
verify(_vpnConnectionDao).remove(vpnConnection.getId());
}
@Test
public void testCleanupVpnGatewayByVpc() {
when(_vpnGatewayDao.findByVpcId(VPC_ID)).thenReturn(vpnGateway);
when(_vpnConnectionDao.listByVpnGatewayId(VPN_GATEWAY_ID)).thenReturn(new ArrayList<>());
boolean result = site2SiteVpnManager.cleanupVpnGatewayByVpc(VPC_ID);
assertTrue(result);
verify(_vpnGatewayDao).remove(VPN_GATEWAY_ID);
}
@Test
public void testCleanupVpnGatewayByVpcNotFound() {
when(_vpnGatewayDao.findByVpcId(VPC_ID)).thenReturn(null);
boolean result = site2SiteVpnManager.cleanupVpnGatewayByVpc(VPC_ID);
assertTrue(result);
verify(_vpnGatewayDao, never()).remove(anyLong());
}
@Test
public void testGetConnectionsForRouter() {
DomainRouterVO router = mock(DomainRouterVO.class);
when(router.getVpcId()).thenReturn(VPC_ID);
when(_vpnConnectionDao.listByVpcId(VPC_ID)).thenReturn(List.of(vpnConnection));
List<Site2SiteVpnConnectionVO> result = site2SiteVpnManager.getConnectionsForRouter(router);
assertNotNull(result);
assertEquals(1, result.size());
}
@Test
public void testGetConnectionsForRouterNoVpc() {
DomainRouterVO router = mock(DomainRouterVO.class);
when(router.getVpcId()).thenReturn(null);
List<Site2SiteVpnConnectionVO> result = site2SiteVpnManager.getConnectionsForRouter(router);
assertNotNull(result);
assertTrue(result.isEmpty());
}
@Test
public void testDeleteCustomerGatewayByAccount() {
when(_customerGatewayDao.listByAccountId(ACCOUNT_ID)).thenReturn(List.of(customerGateway));
when(_vpnConnectionDao.listByCustomerGatewayId(CUSTOMER_GATEWAY_ID)).thenReturn(new ArrayList<>());
boolean result = site2SiteVpnManager.deleteCustomerGatewayByAccount(ACCOUNT_ID);
assertTrue(result);
verify(_customerGatewayDao).remove(CUSTOMER_GATEWAY_ID);
}
@Test
public void testReconnectDisconnectedVpnByVpc() throws ResourceUnavailableException {
Site2SiteVpnConnectionVO conn = mock(Site2SiteVpnConnectionVO.class);
when(conn.getId()).thenReturn(VPN_CONNECTION_ID);
when(conn.getState()).thenReturn(State.Disconnected);
when(conn.getCustomerGatewayId()).thenReturn(CUSTOMER_GATEWAY_ID);
when(conn.getVpnGatewayId()).thenReturn(VPN_GATEWAY_ID);
when(_vpnConnectionDao.listByVpcId(VPC_ID)).thenReturn(List.of(conn));
when(_customerGatewayDao.findById(CUSTOMER_GATEWAY_ID)).thenReturn(customerGateway);
when(_vpnConnectionDao.acquireInLockTable(VPN_CONNECTION_ID)).thenReturn(conn);
when(_vpnGatewayDao.findById(VPN_GATEWAY_ID)).thenReturn(vpnGateway);
Site2SiteVpnServiceProvider provider = mock(Site2SiteVpnServiceProvider.class);
when(provider.startSite2SiteVpn(any(Site2SiteVpnConnection.class))).thenReturn(true);
when(_s2sProviders.iterator()).thenReturn(List.of(provider).iterator());
when(_vpnConnectionDao.persist(any(Site2SiteVpnConnectionVO.class))).thenReturn(conn);
when(_vpcMgr.applyStaticRouteForVpcVpnIfNeeded(anyLong(), anyBoolean())).thenReturn(true);
site2SiteVpnManager.reconnectDisconnectedVpnByVpc(VPC_ID);
verify(_vpnConnectionDao, org.mockito.Mockito.atLeastOnce()).persist(any(Site2SiteVpnConnectionVO.class));
}
@Test
public void testUpdateVpnConnection() {
when(_vpnConnectionDao.findById(VPN_CONNECTION_ID)).thenReturn(vpnConnection);
when(_vpnConnectionDao.update(anyLong(), any(Site2SiteVpnConnectionVO.class))).thenReturn(true);
when(_vpnConnectionDao.findById(VPN_CONNECTION_ID)).thenReturn(vpnConnection);
Site2SiteVpnConnection result = site2SiteVpnManager.updateVpnConnection(VPN_CONNECTION_ID, "custom-id", true);
assertNotNull(result);
}
@Test
public void testUpdateVpnGateway() {
when(_vpnGatewayDao.findById(VPN_GATEWAY_ID)).thenReturn(vpnGateway);
when(_vpnGatewayDao.update(anyLong(), any(Site2SiteVpnGatewayVO.class))).thenReturn(true);
when(_vpnGatewayDao.findById(VPN_GATEWAY_ID)).thenReturn(vpnGateway);
Site2SiteVpnGateway result = site2SiteVpnManager.updateVpnGateway(VPN_GATEWAY_ID, "custom-id", true);
assertNotNull(result);
}
@Test
public void testVpnGatewayContainsExcludedParametersWithExcludedIkeVersion() throws Exception {
Site2SiteCustomerGatewayVO gw = mock(Site2SiteCustomerGatewayVO.class);
when(gw.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getIkeVersion()).thenReturn("ikev1");
when(gw.getDomainId()).thenReturn(DOMAIN_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedIkeVersions, "ikev1");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedEncryptionAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedHashingAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedDhGroup, "");
java.util.Set<String> result = site2SiteVpnManager.getExcludedVpnGatewayParameters(gw);
assertFalse("Should detect excluded IKE version", result.isEmpty());
assertEquals("Should detect excluded IKE version", "[ikev1]", result.toString());
}
@Test
public void testVpnGatewayContainsExcludedParametersWithExcludedEncryption() throws Exception {
Site2SiteCustomerGatewayVO gw = mock(Site2SiteCustomerGatewayVO.class);
when(gw.getIkePolicy()).thenReturn("3des-sha256;modp2048");
when(gw.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getIkeVersion()).thenReturn("ike");
when(gw.getDomainId()).thenReturn(DOMAIN_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedIkeVersions, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedEncryptionAlgorithms, "3des");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedHashingAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedDhGroup, "");
java.util.Set<String> result = site2SiteVpnManager.getExcludedVpnGatewayParameters(gw);
assertFalse("Should detect excluded encryption algorithm", result.isEmpty());
assertEquals("Should detect excluded encryption algorithm", "[3des]", result.toString());
}
@Test
public void testVpnGatewayContainsExcludedParametersWithExcludedHashing() throws Exception {
Site2SiteCustomerGatewayVO gw = mock(Site2SiteCustomerGatewayVO.class);
when(gw.getIkePolicy()).thenReturn("aes128-md5;modp2048");
when(gw.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getIkeVersion()).thenReturn("ike");
when(gw.getDomainId()).thenReturn(DOMAIN_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedIkeVersions, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedEncryptionAlgorithms, "aes128");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedHashingAlgorithms, "md5");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedDhGroup, "");
java.util.Set<String> result = site2SiteVpnManager.getExcludedVpnGatewayParameters(gw);
assertFalse("Should detect excluded algorithms", result.isEmpty());
assertEquals("Should detect excluded algorithms", "[aes128, md5]", result.toString());
}
@Test
public void testVpnGatewayContainsExcludedParametersWithExcludedDhGroup() {
Site2SiteCustomerGatewayVO gw = mock(Site2SiteCustomerGatewayVO.class);
when(gw.getIkePolicy()).thenReturn("aes128-sha256;modp1024");
when(gw.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getIkeVersion()).thenReturn("ike");
when(gw.getDomainId()).thenReturn(DOMAIN_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedIkeVersions, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedEncryptionAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedHashingAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedDhGroup, "modp1024");
java.util.Set<String> result = site2SiteVpnManager.getExcludedVpnGatewayParameters(gw);
assertFalse("Should detect excluded DH group", result.isEmpty());
assertEquals("Should detect excluded DH group", "[modp1024]", result.toString());
}
@Test
public void testVpnGatewayContainsExcludedParametersNoExcludedParameters() {
Site2SiteCustomerGatewayVO gw = mock(Site2SiteCustomerGatewayVO.class);
when(gw.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getIkeVersion()).thenReturn("ike");
when(gw.getDomainId()).thenReturn(DOMAIN_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedIkeVersions, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedEncryptionAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedHashingAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedDhGroup, "");
java.util.Set<String> result = site2SiteVpnManager.getExcludedVpnGatewayParameters(gw);
assertTrue("Should not detect excluded parameters when none are configured", result.isEmpty());
}
@Test
public void testVpnGatewayContainsExcludedParametersWithExcludedEspPolicy() {
Site2SiteCustomerGatewayVO gw = mock(Site2SiteCustomerGatewayVO.class);
when(gw.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getEspPolicy()).thenReturn("3des-sha256;modp2048");
when(gw.getIkeVersion()).thenReturn("ike");
when(gw.getDomainId()).thenReturn(DOMAIN_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedIkeVersions, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedEncryptionAlgorithms, "3des");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedHashingAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayExcludedDhGroup, "");
java.util.Set<String> result = site2SiteVpnManager.getExcludedVpnGatewayParameters(gw);
assertFalse("Should detect excluded encryption in ESP policy", result.isEmpty());
assertEquals("Should detect excluded encryption in ESP policy", "[3des]", result.toString());
}
@Test
public void testVpnGatewayContainsObsoleteParametersWithObsoleteIkeVersion() {
Site2SiteCustomerGatewayVO gw = mock(Site2SiteCustomerGatewayVO.class);
when(gw.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getIkeVersion()).thenReturn("ikev1");
when(gw.getDomainId()).thenReturn(DOMAIN_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteIkeVersions, "ikev1");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteEncryptionAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteHashingAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteDhGroup, "");
java.util.Set<String> result = site2SiteVpnManager.getObsoleteVpnGatewayParameters(gw);
assertFalse("Should detect obsolete IKE version", result.isEmpty());
assertEquals("Should detect obsolete IKE version", "[ikev1]", result.toString());
}
@Test
public void testVpnGatewayContainsObsoleteParametersWithObsoleteEncryption() {
Site2SiteCustomerGatewayVO gw = mock(Site2SiteCustomerGatewayVO.class);
when(gw.getIkePolicy()).thenReturn("3des-sha256;modp2048");
when(gw.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getIkeVersion()).thenReturn("ike");
when(gw.getDomainId()).thenReturn(DOMAIN_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteIkeVersions, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteEncryptionAlgorithms, "3des");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteHashingAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteDhGroup, "");
java.util.Set<String> result = site2SiteVpnManager.getObsoleteVpnGatewayParameters(gw);
assertFalse("Should detect obsolete encryption algorithm", result.isEmpty());
assertEquals("Should detect obsolete encryption algorithm", "[3des]", result.toString());
}
@Test
public void testVpnGatewayContainsObsoleteParametersWithObsoleteHashing() {
Site2SiteCustomerGatewayVO gw = mock(Site2SiteCustomerGatewayVO.class);
when(gw.getIkePolicy()).thenReturn("aes128-md5;modp2048");
when(gw.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getIkeVersion()).thenReturn("ike");
when(gw.getDomainId()).thenReturn(DOMAIN_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteIkeVersions, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteEncryptionAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteHashingAlgorithms, "md5");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteDhGroup, "");
java.util.Set<String> result = site2SiteVpnManager.getObsoleteVpnGatewayParameters(gw);
assertFalse("Should detect obsolete hashing algorithm", result.isEmpty());
assertEquals("Should detect obsolete hashing algorithm", "[md5]", result.toString());
}
@Test
public void testVpnGatewayContainsObsoleteParametersWithObsoleteDhGroup() {
Site2SiteCustomerGatewayVO gw = mock(Site2SiteCustomerGatewayVO.class);
when(gw.getIkePolicy()).thenReturn("aes128-sha256;modp1024");
when(gw.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getIkeVersion()).thenReturn("ike");
when(gw.getDomainId()).thenReturn(DOMAIN_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteIkeVersions, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteEncryptionAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteHashingAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteDhGroup, "modp1024");
java.util.Set<String> result = site2SiteVpnManager.getObsoleteVpnGatewayParameters(gw);
assertFalse("Should detect obsolete DH group", result.isEmpty());
assertEquals("Should detect obsolete DH group", "[modp1024]", result.toString());
}
@Test
public void testVpnGatewayContainsObsoleteParametersNoObsoleteParameters() {
Site2SiteCustomerGatewayVO gw = mock(Site2SiteCustomerGatewayVO.class);
when(gw.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getEspPolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getIkeVersion()).thenReturn("ike");
when(gw.getDomainId()).thenReturn(DOMAIN_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteIkeVersions, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteEncryptionAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteHashingAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteDhGroup, "");
java.util.Set<String> result = site2SiteVpnManager.getObsoleteVpnGatewayParameters(gw);
assertTrue("Should not detect obsolete parameters when none are configured", result.isEmpty());
}
@Test
public void testVpnGatewayContainsObsoleteParametersWithObsoleteEspPolicy() {
Site2SiteCustomerGatewayVO gw = mock(Site2SiteCustomerGatewayVO.class);
when(gw.getIkePolicy()).thenReturn("aes128-sha256;modp2048");
when(gw.getEspPolicy()).thenReturn("3des-sha256;modp2048");
when(gw.getIkeVersion()).thenReturn("ike");
when(gw.getDomainId()).thenReturn(DOMAIN_ID);
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteIkeVersions, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteEncryptionAlgorithms, "3des");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteHashingAlgorithms, "");
setConfigKeyValue(Site2SiteVpnManagerImpl.VpnCustomerGatewayObsoleteDhGroup, "");
java.util.Set<String> result = site2SiteVpnManager.getObsoleteVpnGatewayParameters(gw);
assertFalse("Should detect obsolete encryption in ESP policy", result.isEmpty());
assertEquals("Should detect obsolete encryption in ESP policy", "[3des]", result.toString());
}
}