Skip to content

Commit 4b8af6f

Browse files
authored
test: add, refactor ipv6 network, vpc tests (apache#6338)
- Refactor IPv6 related tests - Adds smoke test for IPv4 network to IPv6 upgrade - Adds smoke test for IPv6 VPC Signed-off-by: Abhishek Kumar <[email protected]>
1 parent b2cf82e commit 4b8af6f

File tree

13 files changed

+4567
-594
lines changed

13 files changed

+4567
-594
lines changed

api/src/main/java/org/apache/cloudstack/api/response/VpcResponse.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,4 +253,8 @@ public void setResourceIconResponse(ResourceIconResponse icon) {
253253
public void setIpv6Routes(Set<Ipv6RouteResponse> ipv6Routes) {
254254
this.ipv6Routes = ipv6Routes;
255255
}
256+
257+
public Set<Ipv6RouteResponse> getIpv6Routes() {
258+
return ipv6Routes;
259+
}
256260
}

engine/schema/src/main/java/com/cloud/offerings/dao/NetworkOfferingDaoImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ public NetUtils.InternetProtocol getNetworkOfferingInternetProtocol(long offerin
279279
}
280280

281281
@Override
282-
public NetUtils.InternetProtocol getNetworkOfferingInternetProtocol(long offeringId,NetUtils.InternetProtocol defaultProtocol) {
282+
public NetUtils.InternetProtocol getNetworkOfferingInternetProtocol(long offeringId, NetUtils.InternetProtocol defaultProtocol) {
283283
NetUtils.InternetProtocol protocol = getNetworkOfferingInternetProtocol(offeringId);
284284
if (protocol == null) {
285285
return defaultProtocol;
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
18+
package com.cloud.offerings.dao;
19+
20+
import org.junit.Assert;
21+
import org.junit.Before;
22+
import org.junit.Test;
23+
import org.mockito.InjectMocks;
24+
import org.mockito.Mock;
25+
import org.mockito.Mockito;
26+
import org.mockito.MockitoAnnotations;
27+
28+
import com.cloud.offering.NetworkOffering;
29+
import com.cloud.utils.net.NetUtils;
30+
31+
public class NetworkOfferingDaoImplTest {
32+
@Mock
33+
NetworkOfferingDetailsDao detailsDao;
34+
35+
@InjectMocks
36+
NetworkOfferingDaoImpl networkOfferingDao = new NetworkOfferingDaoImpl();
37+
38+
final long offeringId = 1L;
39+
40+
@Before
41+
public void setup() {
42+
MockitoAnnotations.initMocks(this);
43+
}
44+
45+
@Test
46+
public void testGetNetworkOfferingInternetProtocol() {
47+
Mockito.when(detailsDao.getDetail(offeringId, NetworkOffering.Detail.internetProtocol)).thenReturn(null);
48+
NetUtils.InternetProtocol protocol = networkOfferingDao.getNetworkOfferingInternetProtocol(offeringId);
49+
Assert.assertNull(protocol);
50+
51+
Mockito.when(detailsDao.getDetail(offeringId, NetworkOffering.Detail.internetProtocol)).thenReturn("IPv4");
52+
protocol = networkOfferingDao.getNetworkOfferingInternetProtocol(offeringId);
53+
Assert.assertEquals(NetUtils.InternetProtocol.IPv4, protocol);
54+
55+
Mockito.when(detailsDao.getDetail(offeringId, NetworkOffering.Detail.internetProtocol)).thenReturn("IPv6");
56+
protocol = networkOfferingDao.getNetworkOfferingInternetProtocol(offeringId);
57+
Assert.assertEquals(NetUtils.InternetProtocol.IPv6, protocol);
58+
59+
Mockito.when(detailsDao.getDetail(offeringId, NetworkOffering.Detail.internetProtocol)).thenReturn("DualStack");
60+
protocol = networkOfferingDao.getNetworkOfferingInternetProtocol(offeringId);
61+
Assert.assertEquals(NetUtils.InternetProtocol.DualStack, protocol);
62+
}
63+
64+
@Test
65+
public void testGetNetworkOfferingInternetProtocolWithDefault() {
66+
Mockito.when(detailsDao.getDetail(offeringId, NetworkOffering.Detail.internetProtocol)).thenReturn(null);
67+
NetUtils.InternetProtocol protocol = networkOfferingDao.getNetworkOfferingInternetProtocol(offeringId, NetUtils.InternetProtocol.IPv4);
68+
Assert.assertEquals(NetUtils.InternetProtocol.IPv4, protocol);
69+
70+
Mockito.when(detailsDao.getDetail(offeringId, NetworkOffering.Detail.internetProtocol)).thenReturn("IPv6");
71+
protocol = networkOfferingDao.getNetworkOfferingInternetProtocol(offeringId, NetUtils.InternetProtocol.IPv4);
72+
Assert.assertEquals(NetUtils.InternetProtocol.IPv6, protocol);
73+
}
74+
75+
@Test
76+
public void testIsIpv6Supported() {
77+
Mockito.when(detailsDao.getDetail(offeringId, NetworkOffering.Detail.internetProtocol)).thenReturn("");
78+
boolean result = networkOfferingDao.isIpv6Supported(offeringId);
79+
Assert.assertFalse(result);
80+
81+
Mockito.when(detailsDao.getDetail(offeringId, NetworkOffering.Detail.internetProtocol)).thenReturn("IPv4");
82+
result = networkOfferingDao.isIpv6Supported(offeringId);
83+
Assert.assertFalse(result);
84+
85+
Mockito.when(detailsDao.getDetail(offeringId, NetworkOffering.Detail.internetProtocol)).thenReturn("IPv6");
86+
result = networkOfferingDao.isIpv6Supported(offeringId);
87+
Assert.assertTrue(result);
88+
89+
Mockito.when(detailsDao.getDetail(offeringId, NetworkOffering.Detail.internetProtocol)).thenReturn("DualStack");
90+
result = networkOfferingDao.isIpv6Supported(offeringId);
91+
Assert.assertTrue(result);
92+
}
93+
}

server/src/test/java/com/cloud/configuration/ConfigurationManagerTest.java

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@
3939
import java.util.Random;
4040
import java.util.UUID;
4141

42+
import org.apache.cloudstack.api.command.admin.network.CreateGuestNetworkIpv6PrefixCmd;
43+
import org.apache.cloudstack.api.command.admin.network.CreateNetworkOfferingCmd;
44+
import org.apache.cloudstack.api.command.admin.network.DeleteGuestNetworkIpv6PrefixCmd;
45+
import org.apache.cloudstack.api.command.admin.network.ListGuestNetworkIpv6PrefixesCmd;
46+
import org.apache.cloudstack.api.command.admin.vlan.CreateVlanIpRangeCmd;
4247
import org.apache.cloudstack.api.command.admin.vlan.DedicatePublicIpRangeCmd;
4348
import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd;
4449
import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd;
@@ -58,34 +63,44 @@
5863
import org.mockito.Mockito;
5964
import org.mockito.MockitoAnnotations;
6065
import org.mockito.Spy;
66+
import org.mockito.stubbing.Answer;
6167

6268
import com.cloud.api.query.dao.NetworkOfferingJoinDao;
6369
import com.cloud.api.query.vo.NetworkOfferingJoinVO;
6470
import com.cloud.configuration.Resource.ResourceType;
6571
import com.cloud.dc.AccountVlanMapVO;
6672
import com.cloud.dc.ClusterVO;
6773
import com.cloud.dc.DataCenter.NetworkType;
74+
import com.cloud.dc.DataCenterGuestIpv6Prefix;
75+
import com.cloud.dc.DataCenterGuestIpv6PrefixVO;
6876
import com.cloud.dc.DataCenterVO;
6977
import com.cloud.dc.HostPodVO;
7078
import com.cloud.dc.Vlan;
7179
import com.cloud.dc.VlanVO;
7280
import com.cloud.dc.dao.AccountVlanMapDao;
7381
import com.cloud.dc.dao.ClusterDao;
7482
import com.cloud.dc.dao.DataCenterDao;
83+
import com.cloud.dc.dao.DataCenterGuestIpv6PrefixDao;
7584
import com.cloud.dc.dao.DataCenterIpAddressDao;
7685
import com.cloud.dc.dao.DomainVlanMapDao;
7786
import com.cloud.dc.dao.HostPodDao;
7887
import com.cloud.dc.dao.VlanDao;
88+
import com.cloud.exception.InsufficientCapacityException;
7989
import com.cloud.exception.InvalidParameterValueException;
90+
import com.cloud.exception.ResourceAllocationException;
91+
import com.cloud.exception.ResourceUnavailableException;
8092
import com.cloud.host.HostVO;
8193
import com.cloud.host.dao.HostDao;
8294
import com.cloud.network.IpAddressManager;
95+
import com.cloud.network.Ipv6GuestPrefixSubnetNetworkMapVO;
8396
import com.cloud.network.Network;
8497
import com.cloud.network.Network.Capability;
8598
import com.cloud.network.NetworkModel;
99+
import com.cloud.network.Networks;
86100
import com.cloud.network.dao.FirewallRulesDao;
87101
import com.cloud.network.dao.IPAddressDao;
88102
import com.cloud.network.dao.IPAddressVO;
103+
import com.cloud.network.dao.Ipv6GuestPrefixSubnetNetworkMapDao;
89104
import com.cloud.network.dao.PhysicalNetworkDao;
90105
import com.cloud.network.dao.PhysicalNetworkVO;
91106
import com.cloud.projects.ProjectManager;
@@ -104,6 +119,7 @@
104119
import com.cloud.utils.db.TransactionLegacy;
105120
import com.cloud.utils.exception.CloudRuntimeException;
106121
import com.cloud.utils.net.Ip;
122+
import com.cloud.utils.net.NetUtils;
107123
import com.cloud.vm.VMInstanceVO;
108124
import com.cloud.vm.dao.VMInstanceDao;
109125

@@ -169,6 +185,10 @@ public class ConfigurationManagerTest {
169185
ConfigurationDao _configDao;
170186
@Mock
171187
DiskOfferingVO diskOfferingVOMock;
188+
@Mock
189+
DataCenterGuestIpv6PrefixDao dataCenterGuestIpv6PrefixDao;
190+
@Mock
191+
Ipv6GuestPrefixSubnetNetworkMapDao ipv6GuestPrefixSubnetNetworkMapDao;
172192

173193
VlanVO vlan = new VlanVO(Vlan.VlanType.VirtualNetwork, "vlantag", "vlangateway", "vlannetmask", 1L, "iprange", 1L, 1L, null, null, null);
174194

@@ -1002,4 +1022,152 @@ public void updateDiskOfferingTagsIfIsNotNullTestWhenTagsIsNotNull(){
10021022
this.configurationMgr.updateOfferingTagsIfIsNotNull(tags, diskOfferingVOMock);
10031023
Mockito.verify(configurationMgr, Mockito.times(1)).updateOfferingTagsIfIsNotNull(tags, diskOfferingVOMock);
10041024
}
1025+
1026+
@Test(expected = IllegalArgumentException.class)
1027+
public void testInvalidCreateDataCenterGuestIpv6Prefix() {
1028+
CreateGuestNetworkIpv6PrefixCmd cmd = Mockito.mock(CreateGuestNetworkIpv6PrefixCmd.class);
1029+
Mockito.when(cmd.getZoneId()).thenReturn(1L);
1030+
Mockito.when(cmd.getPrefix()).thenReturn("Invalid");
1031+
Mockito.when(_zoneDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(DataCenterVO.class));
1032+
configurationMgr.createDataCenterGuestIpv6Prefix(cmd);
1033+
}
1034+
1035+
@Test(expected = InvalidParameterValueException.class)
1036+
public void testWrongCreateDataCenterGuestIpv6Prefix() {
1037+
CreateGuestNetworkIpv6PrefixCmd cmd = Mockito.mock(CreateGuestNetworkIpv6PrefixCmd.class);
1038+
Mockito.when(cmd.getZoneId()).thenReturn(1L);
1039+
Mockito.when(cmd.getPrefix()).thenReturn("fd17:5:8a43:e2a4:c000::/66");
1040+
Mockito.when(_zoneDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(DataCenterVO.class));
1041+
configurationMgr.createDataCenterGuestIpv6Prefix(cmd);
1042+
}
1043+
1044+
@Test(expected = InvalidParameterValueException.class)
1045+
public void testConflictingCreateDataCenterGuestIpv6Prefix() {
1046+
CreateGuestNetworkIpv6PrefixCmd cmd = Mockito.mock(CreateGuestNetworkIpv6PrefixCmd.class);
1047+
Mockito.when(cmd.getZoneId()).thenReturn(1L);
1048+
Mockito.when(cmd.getPrefix()).thenReturn("fd17:5:8a43:e2a5::/64");
1049+
Mockito.when(_zoneDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(DataCenterVO.class));
1050+
DataCenterGuestIpv6PrefixVO prefix = Mockito.mock(DataCenterGuestIpv6PrefixVO.class);
1051+
Mockito.when(prefix.getPrefix()).thenReturn("fd17:5:8a43:e2a4::/62");
1052+
Mockito.when(dataCenterGuestIpv6PrefixDao.listByDataCenterId(Mockito.anyLong())).thenReturn(List.of(prefix));
1053+
configurationMgr.createDataCenterGuestIpv6Prefix(cmd);
1054+
}
1055+
1056+
@Test
1057+
public void testCreateDataCenterGuestIpv6Prefix() {
1058+
final Long zoneId = 1L;
1059+
final String prefix = "fd17:5:8a43:e2a5::/64";
1060+
CreateGuestNetworkIpv6PrefixCmd cmd = Mockito.mock(CreateGuestNetworkIpv6PrefixCmd.class);
1061+
Mockito.when(cmd.getZoneId()).thenReturn(zoneId);
1062+
Mockito.when(cmd.getPrefix()).thenReturn(prefix);
1063+
Mockito.when(_zoneDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(DataCenterVO.class));
1064+
Mockito.when(dataCenterGuestIpv6PrefixDao.listByDataCenterId(Mockito.anyLong())).thenReturn(new ArrayList<>());
1065+
final List<DataCenterGuestIpv6PrefixVO> persistedPrefix = new ArrayList<>();
1066+
Mockito.when(dataCenterGuestIpv6PrefixDao.persist(Mockito.any(DataCenterGuestIpv6PrefixVO.class))).thenAnswer((Answer<DataCenterGuestIpv6PrefixVO>) invocation -> {
1067+
DataCenterGuestIpv6PrefixVO prefixVO = (DataCenterGuestIpv6PrefixVO)invocation.getArgument(0);
1068+
persistedPrefix.add(prefixVO);
1069+
return prefixVO;
1070+
});
1071+
configurationMgr.createDataCenterGuestIpv6Prefix(cmd);
1072+
Assert.assertEquals(1, persistedPrefix.size());
1073+
DataCenterGuestIpv6PrefixVO prefixVO = persistedPrefix.get(0);
1074+
Assert.assertEquals(zoneId, prefixVO.getDataCenterId());
1075+
Assert.assertEquals(prefix, prefixVO.getPrefix());
1076+
}
1077+
1078+
@Test
1079+
public void testListDataCenterGuestIpv6Prefixes() {
1080+
ListGuestNetworkIpv6PrefixesCmd cmd = Mockito.mock(ListGuestNetworkIpv6PrefixesCmd.class);
1081+
Mockito.when(cmd.getId()).thenReturn(1L);
1082+
Mockito.when(cmd.getZoneId()).thenReturn(1L);
1083+
Mockito.when(_zoneDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(DataCenterVO.class));
1084+
Mockito.when(dataCenterGuestIpv6PrefixDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(DataCenterGuestIpv6PrefixVO.class));
1085+
Mockito.when(dataCenterGuestIpv6PrefixDao.listByDataCenterId(Mockito.anyLong()))
1086+
.thenReturn(List.of(Mockito.mock(DataCenterGuestIpv6PrefixVO.class), Mockito.mock(DataCenterGuestIpv6PrefixVO.class)));
1087+
Mockito.when(dataCenterGuestIpv6PrefixDao.listAll())
1088+
.thenReturn(List.of(Mockito.mock(DataCenterGuestIpv6PrefixVO.class),
1089+
Mockito.mock(DataCenterGuestIpv6PrefixVO.class),
1090+
Mockito.mock(DataCenterGuestIpv6PrefixVO.class)));
1091+
List<? extends DataCenterGuestIpv6Prefix> prefixes = configurationMgr.listDataCenterGuestIpv6Prefixes(cmd);
1092+
Assert.assertEquals(1, prefixes.size());
1093+
ListGuestNetworkIpv6PrefixesCmd cmd1 = Mockito.mock(ListGuestNetworkIpv6PrefixesCmd.class);
1094+
Mockito.when(cmd1.getId()).thenReturn(null);
1095+
Mockito.when(cmd1.getZoneId()).thenReturn(1L);
1096+
prefixes = configurationMgr.listDataCenterGuestIpv6Prefixes(cmd1);
1097+
Assert.assertEquals(2, prefixes.size());
1098+
ListGuestNetworkIpv6PrefixesCmd cmd2 = Mockito.mock(ListGuestNetworkIpv6PrefixesCmd.class);
1099+
Mockito.when(cmd2.getId()).thenReturn(null);
1100+
Mockito.when(cmd2.getZoneId()).thenReturn(null);
1101+
prefixes = configurationMgr.listDataCenterGuestIpv6Prefixes(cmd2);
1102+
Assert.assertEquals(3, prefixes.size());
1103+
}
1104+
1105+
@Test(expected = InvalidParameterValueException.class)
1106+
public void testInvalidDeleteDataCenterGuestIpv6Prefix() {
1107+
DeleteGuestNetworkIpv6PrefixCmd cmd = Mockito.mock(DeleteGuestNetworkIpv6PrefixCmd.class);
1108+
Mockito.when(cmd.getId()).thenReturn(1L);
1109+
Mockito.when(dataCenterGuestIpv6PrefixDao.findById(Mockito.anyLong())).thenReturn(null);
1110+
configurationMgr.deleteDataCenterGuestIpv6Prefix(cmd);
1111+
}
1112+
1113+
@Test(expected = CloudRuntimeException.class)
1114+
public void testUsedDeleteDataCenterGuestIpv6Prefix() {
1115+
final Long prefixId = 1L;
1116+
DeleteGuestNetworkIpv6PrefixCmd cmd = Mockito.mock(DeleteGuestNetworkIpv6PrefixCmd.class);
1117+
Mockito.when(cmd.getId()).thenReturn(prefixId);
1118+
DataCenterGuestIpv6PrefixVO prefixVO = Mockito.mock(DataCenterGuestIpv6PrefixVO.class);
1119+
Mockito.when(prefixVO.getId()).thenReturn(prefixId);
1120+
Mockito.when(dataCenterGuestIpv6PrefixDao.findById(Mockito.anyLong())).thenReturn(prefixVO);
1121+
Mockito.when(ipv6GuestPrefixSubnetNetworkMapDao.listUsedByPrefix(Mockito.anyLong()))
1122+
.thenReturn(List.of(Mockito.mock(Ipv6GuestPrefixSubnetNetworkMapVO.class)));
1123+
configurationMgr.deleteDataCenterGuestIpv6Prefix(cmd);
1124+
}
1125+
1126+
@Test
1127+
public void testDeleteDataCenterGuestIpv6Prefix() {
1128+
final Long prefixId = 1L;
1129+
DeleteGuestNetworkIpv6PrefixCmd cmd = Mockito.mock(DeleteGuestNetworkIpv6PrefixCmd.class);
1130+
Mockito.when(cmd.getId()).thenReturn(prefixId);
1131+
DataCenterGuestIpv6PrefixVO prefixVO = Mockito.mock(DataCenterGuestIpv6PrefixVO.class);
1132+
Mockito.when(prefixVO.getId()).thenReturn(prefixId);
1133+
Mockito.when(dataCenterGuestIpv6PrefixDao.findById(Mockito.anyLong())).thenReturn(prefixVO);
1134+
Mockito.when(ipv6GuestPrefixSubnetNetworkMapDao.listUsedByPrefix(Mockito.anyLong())).thenReturn(new ArrayList<>());
1135+
final List<Long> removedPrefix = new ArrayList<>();
1136+
Mockito.when(dataCenterGuestIpv6PrefixDao.remove(Mockito.anyLong())).thenAnswer((Answer<Boolean>) invocation -> {
1137+
removedPrefix.add(invocation.getArgument(0));
1138+
return true;
1139+
});
1140+
configurationMgr.deleteDataCenterGuestIpv6Prefix(cmd);
1141+
Assert.assertEquals(1, removedPrefix.size());
1142+
Assert.assertEquals(prefixId, removedPrefix.get(0));
1143+
}
1144+
1145+
@Test(expected = InvalidParameterValueException.class)
1146+
public void testInvalidNetworkTypeCreateIpv6NetworkOffering() {
1147+
CreateNetworkOfferingCmd cmd = Mockito.mock(CreateNetworkOfferingCmd.class);
1148+
Mockito.when(cmd.getTraffictype()).thenReturn(Networks.TrafficType.Guest.toString());
1149+
Mockito.when(cmd.getGuestIpType()).thenReturn(Network.GuestType.L2.toString());
1150+
Mockito.when(cmd.getInternetProtocol()).thenReturn(NetUtils.InternetProtocol.DualStack.toString());
1151+
configurationMgr.createNetworkOffering(cmd);
1152+
}
1153+
1154+
@Test(expected = InvalidParameterValueException.class)
1155+
public void testDisabledConfigCreateIpv6NetworkOffering() {
1156+
CreateNetworkOfferingCmd cmd = Mockito.mock(CreateNetworkOfferingCmd.class);
1157+
Mockito.when(cmd.getTraffictype()).thenReturn(Networks.TrafficType.Guest.toString());
1158+
Mockito.when(cmd.getGuestIpType()).thenReturn(Network.GuestType.Isolated.toString());
1159+
Mockito.when(cmd.getInternetProtocol()).thenReturn(NetUtils.InternetProtocol.DualStack.toString());
1160+
configurationMgr.createNetworkOffering(cmd);
1161+
}
1162+
1163+
@Test(expected = InvalidParameterValueException.class)
1164+
public void testWrongIpv6CreateVlanAndPublicIpRange() {
1165+
CreateVlanIpRangeCmd cmd = Mockito.mock(CreateVlanIpRangeCmd.class);
1166+
Mockito.when(cmd.getIp6Cidr()).thenReturn("fd17:5:8a43:e2a4:c000::/66");
1167+
try {
1168+
configurationMgr.createVlanAndPublicIpRange(cmd);
1169+
} catch (InsufficientCapacityException | ResourceUnavailableException | ResourceAllocationException e) {
1170+
throw new RuntimeException(e);
1171+
}
1172+
}
10051173
}

0 commit comments

Comments
 (0)