|
31 | 31 | import com.cloud.exception.ResourceUnavailableException; |
32 | 32 | import com.cloud.host.HostVO; |
33 | 33 | import com.cloud.host.dao.HostDao; |
| 34 | +import com.cloud.network.Network; |
| 35 | +import com.cloud.network.NetworkService; |
| 36 | +import com.cloud.network.dao.NetworkDao; |
| 37 | +import com.cloud.network.dao.NetworkVO; |
34 | 38 | import com.cloud.offering.DiskOffering; |
35 | 39 | import com.cloud.offering.DiskOfferingInfo; |
36 | 40 | import com.cloud.service.ServiceOfferingVO; |
@@ -169,6 +173,12 @@ public class BackupManagerTest { |
169 | 173 | @Mock |
170 | 174 | HostDao hostDao; |
171 | 175 |
|
| 176 | + @Mock |
| 177 | + private NetworkDao networkDao; |
| 178 | + |
| 179 | + @Mock |
| 180 | + private NetworkService networkService; |
| 181 | + |
172 | 182 | private AccountVO account; |
173 | 183 | private UserVO user; |
174 | 184 |
|
@@ -1235,4 +1245,85 @@ public void testCheckAndRemoveBackupOfferingBeforeExpunge() { |
1235 | 1245 | + "Backup Offering [id: 3, external id: backup-external-id] with 1 backups. Please, remove the backup offering " |
1236 | 1246 | + "before proceeding to VM exclusion!", exception.getMessage()); |
1237 | 1247 | } |
| 1248 | + |
| 1249 | + @Test |
| 1250 | + public void testGetIpToNetworkMapFromBackup() { |
| 1251 | + Long networkId1 = 1L; |
| 1252 | + Long networkId2 = 2L; |
| 1253 | + String networkUuid1 = "network-uuid-1"; |
| 1254 | + String networkUuid2 = "network-uuid-2"; |
| 1255 | + String ip1 = "10.1.1.1"; |
| 1256 | + String ip2 = "10.1.1.2"; |
| 1257 | + String ipv61 = "2001:db8::1"; |
| 1258 | + String ipv62 = "2001:db8::2"; |
| 1259 | + String mac1 = "00:11:22:33:44:55"; |
| 1260 | + String mac2 = "00:11:22:33:44:56"; |
| 1261 | + |
| 1262 | + // Test case 1: Missing network information |
| 1263 | + Backup backup1 = mock(Backup.class); |
| 1264 | + when(backup1.getDetail(ApiConstants.NETWORK_IDS)).thenReturn(null); |
| 1265 | + List<Long> networkIds1 = new ArrayList<>(); |
| 1266 | + try { |
| 1267 | + backupManager.getIpToNetworkMapFromBackup(backup1, true, networkIds1); |
| 1268 | + fail("Expected CloudRuntimeException for missing network information"); |
| 1269 | + } catch (CloudRuntimeException e) { |
| 1270 | + assertEquals("Backup doesn't contain network information. Please specify atleast one valid network while creating instance", e.getMessage()); |
| 1271 | + } |
| 1272 | + |
| 1273 | + // Test case 2: IP preservation enabled with IP information |
| 1274 | + Backup backup2 = mock(Backup.class); |
| 1275 | + when(backup2.getDetail(ApiConstants.NETWORK_IDS)).thenReturn(networkUuid1 + "," + networkUuid2); |
| 1276 | + when(backup2.getDetail(ApiConstants.IP_ADDRESSES)).thenReturn(ip1 + "," + ip2); |
| 1277 | + when(backup2.getDetail(ApiConstants.IP6_ADDRESSES)).thenReturn(ipv61 + "," + ipv62); |
| 1278 | + when(backup2.getDetail(ApiConstants.MAC_ADDRESSES)).thenReturn(mac1 + "," + mac2); |
| 1279 | + |
| 1280 | + NetworkVO network1 = mock(NetworkVO.class); |
| 1281 | + NetworkVO network2 = mock(NetworkVO.class); |
| 1282 | + when(networkDao.findByUuid(networkUuid1)).thenReturn(network1); |
| 1283 | + when(networkDao.findByUuid(networkUuid2)).thenReturn(network2); |
| 1284 | + when(network1.getId()).thenReturn(networkId1); |
| 1285 | + when(network2.getId()).thenReturn(networkId2); |
| 1286 | + |
| 1287 | + Network.IpAddresses ipAddresses1 = mock(Network.IpAddresses.class); |
| 1288 | + Network.IpAddresses ipAddresses2 = mock(Network.IpAddresses.class); |
| 1289 | + when(networkService.getIpAddressesFromIps(ip1, ipv61, mac1)).thenReturn(ipAddresses1); |
| 1290 | + when(networkService.getIpAddressesFromIps(ip2, ipv62, mac2)).thenReturn(ipAddresses2); |
| 1291 | + |
| 1292 | + List<Long> networkIds2 = new ArrayList<>(); |
| 1293 | + Map<Long, Network.IpAddresses> result2 = backupManager.getIpToNetworkMapFromBackup(backup2, true, networkIds2); |
| 1294 | + |
| 1295 | + assertEquals(2, result2.size()); |
| 1296 | + assertEquals(ipAddresses1, result2.get(networkId1)); |
| 1297 | + assertEquals(ipAddresses2, result2.get(networkId2)); |
| 1298 | + assertEquals(2, networkIds2.size()); |
| 1299 | + assertTrue(networkIds2.contains(networkId1)); |
| 1300 | + assertTrue(networkIds2.contains(networkId2)); |
| 1301 | + |
| 1302 | + // Test case 3: IP preservation enabled but missing IP information |
| 1303 | + Backup backup3 = mock(Backup.class); |
| 1304 | + when(backup3.getDetail(ApiConstants.NETWORK_IDS)).thenReturn(networkUuid1); |
| 1305 | + when(backup3.getDetail(ApiConstants.IP_ADDRESSES)).thenReturn(null); |
| 1306 | + when(backup3.getDetail(ApiConstants.IP6_ADDRESSES)).thenReturn(null); |
| 1307 | + when(backup3.getDetail(ApiConstants.MAC_ADDRESSES)).thenReturn(null); |
| 1308 | + |
| 1309 | + List<Long> networkIds3 = new ArrayList<>(); |
| 1310 | + Map<Long, Network.IpAddresses> result3 = backupManager.getIpToNetworkMapFromBackup(backup3, true, networkIds3); |
| 1311 | + |
| 1312 | + assertEquals(1, result3.size()); |
| 1313 | + assertNull(result3.get(networkId1)); |
| 1314 | + assertEquals(1, networkIds3.size()); |
| 1315 | + assertTrue(networkIds3.contains(networkId1)); |
| 1316 | + |
| 1317 | + // Test case 4: IP preservation disabled |
| 1318 | + Backup backup4 = mock(Backup.class); |
| 1319 | + when(backup4.getDetail(ApiConstants.NETWORK_IDS)).thenReturn(networkUuid1); |
| 1320 | + |
| 1321 | + List<Long> networkIds4 = new ArrayList<>(); |
| 1322 | + Map<Long, Network.IpAddresses> result4 = backupManager.getIpToNetworkMapFromBackup(backup4, false, networkIds4); |
| 1323 | + |
| 1324 | + assertEquals(1, result4.size()); |
| 1325 | + assertNull(result4.get(networkId1)); |
| 1326 | + assertEquals(1, networkIds4.size()); |
| 1327 | + assertTrue(networkIds4.contains(networkId1)); |
| 1328 | + } |
1238 | 1329 | } |
0 commit comments