|
39 | 39 | import java.util.Random;
|
40 | 40 | import java.util.UUID;
|
41 | 41 |
|
| 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; |
42 | 47 | import org.apache.cloudstack.api.command.admin.vlan.DedicatePublicIpRangeCmd;
|
43 | 48 | import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd;
|
44 | 49 | import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd;
|
|
58 | 63 | import org.mockito.Mockito;
|
59 | 64 | import org.mockito.MockitoAnnotations;
|
60 | 65 | import org.mockito.Spy;
|
| 66 | +import org.mockito.stubbing.Answer; |
61 | 67 |
|
62 | 68 | import com.cloud.api.query.dao.NetworkOfferingJoinDao;
|
63 | 69 | import com.cloud.api.query.vo.NetworkOfferingJoinVO;
|
64 | 70 | import com.cloud.configuration.Resource.ResourceType;
|
65 | 71 | import com.cloud.dc.AccountVlanMapVO;
|
66 | 72 | import com.cloud.dc.ClusterVO;
|
67 | 73 | import com.cloud.dc.DataCenter.NetworkType;
|
| 74 | +import com.cloud.dc.DataCenterGuestIpv6Prefix; |
| 75 | +import com.cloud.dc.DataCenterGuestIpv6PrefixVO; |
68 | 76 | import com.cloud.dc.DataCenterVO;
|
69 | 77 | import com.cloud.dc.HostPodVO;
|
70 | 78 | import com.cloud.dc.Vlan;
|
71 | 79 | import com.cloud.dc.VlanVO;
|
72 | 80 | import com.cloud.dc.dao.AccountVlanMapDao;
|
73 | 81 | import com.cloud.dc.dao.ClusterDao;
|
74 | 82 | import com.cloud.dc.dao.DataCenterDao;
|
| 83 | +import com.cloud.dc.dao.DataCenterGuestIpv6PrefixDao; |
75 | 84 | import com.cloud.dc.dao.DataCenterIpAddressDao;
|
76 | 85 | import com.cloud.dc.dao.DomainVlanMapDao;
|
77 | 86 | import com.cloud.dc.dao.HostPodDao;
|
78 | 87 | import com.cloud.dc.dao.VlanDao;
|
| 88 | +import com.cloud.exception.InsufficientCapacityException; |
79 | 89 | import com.cloud.exception.InvalidParameterValueException;
|
| 90 | +import com.cloud.exception.ResourceAllocationException; |
| 91 | +import com.cloud.exception.ResourceUnavailableException; |
80 | 92 | import com.cloud.host.HostVO;
|
81 | 93 | import com.cloud.host.dao.HostDao;
|
82 | 94 | import com.cloud.network.IpAddressManager;
|
| 95 | +import com.cloud.network.Ipv6GuestPrefixSubnetNetworkMapVO; |
83 | 96 | import com.cloud.network.Network;
|
84 | 97 | import com.cloud.network.Network.Capability;
|
85 | 98 | import com.cloud.network.NetworkModel;
|
| 99 | +import com.cloud.network.Networks; |
86 | 100 | import com.cloud.network.dao.FirewallRulesDao;
|
87 | 101 | import com.cloud.network.dao.IPAddressDao;
|
88 | 102 | import com.cloud.network.dao.IPAddressVO;
|
| 103 | +import com.cloud.network.dao.Ipv6GuestPrefixSubnetNetworkMapDao; |
89 | 104 | import com.cloud.network.dao.PhysicalNetworkDao;
|
90 | 105 | import com.cloud.network.dao.PhysicalNetworkVO;
|
91 | 106 | import com.cloud.projects.ProjectManager;
|
|
104 | 119 | import com.cloud.utils.db.TransactionLegacy;
|
105 | 120 | import com.cloud.utils.exception.CloudRuntimeException;
|
106 | 121 | import com.cloud.utils.net.Ip;
|
| 122 | +import com.cloud.utils.net.NetUtils; |
107 | 123 | import com.cloud.vm.VMInstanceVO;
|
108 | 124 | import com.cloud.vm.dao.VMInstanceDao;
|
109 | 125 |
|
@@ -169,6 +185,10 @@ public class ConfigurationManagerTest {
|
169 | 185 | ConfigurationDao _configDao;
|
170 | 186 | @Mock
|
171 | 187 | DiskOfferingVO diskOfferingVOMock;
|
| 188 | + @Mock |
| 189 | + DataCenterGuestIpv6PrefixDao dataCenterGuestIpv6PrefixDao; |
| 190 | + @Mock |
| 191 | + Ipv6GuestPrefixSubnetNetworkMapDao ipv6GuestPrefixSubnetNetworkMapDao; |
172 | 192 |
|
173 | 193 | VlanVO vlan = new VlanVO(Vlan.VlanType.VirtualNetwork, "vlantag", "vlangateway", "vlannetmask", 1L, "iprange", 1L, 1L, null, null, null);
|
174 | 194 |
|
@@ -1002,4 +1022,152 @@ public void updateDiskOfferingTagsIfIsNotNullTestWhenTagsIsNotNull(){
|
1002 | 1022 | this.configurationMgr.updateOfferingTagsIfIsNotNull(tags, diskOfferingVOMock);
|
1003 | 1023 | Mockito.verify(configurationMgr, Mockito.times(1)).updateOfferingTagsIfIsNotNull(tags, diskOfferingVOMock);
|
1004 | 1024 | }
|
| 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 | + } |
1005 | 1173 | }
|
0 commit comments