@@ -1264,6 +1264,58 @@ public void testIsAnyVmVolumeUsingLocalStorage() {
12641264 }
12651265 }
12661266
1267+ @ Test
1268+ public void testIsAnyVmVolumeUsingLocalStorageSkipsDestroyedVolumeWithMissingPool () {
1269+ VolumeVO volume = Mockito .mock (VolumeVO .class );
1270+ Mockito .when (volume .getState ()).thenReturn (Volume .State .Destroy );
1271+
1272+ Assert .assertFalse (userVmManagerImpl .isAnyVmVolumeUsingLocalStorage (Collections .singletonList (volume )));
1273+ Mockito .verify (primaryDataStoreDao , never ()).findById (anyLong ());
1274+ }
1275+
1276+ @ Test
1277+ public void testIsAnyVmVolumeUsingLocalStorageSkipsRemovedVolume () {
1278+ VolumeVO volume = Mockito .mock (VolumeVO .class );
1279+ Mockito .when (volume .getRemoved ()).thenReturn (new Date ());
1280+
1281+ Assert .assertFalse (userVmManagerImpl .isAnyVmVolumeUsingLocalStorage (Collections .singletonList (volume )));
1282+ Mockito .verify (primaryDataStoreDao , never ()).findById (anyLong ());
1283+ }
1284+
1285+ @ Test
1286+ public void testIsAnyVmVolumeUsingLocalStorageFailsForActiveVolumeWithMissingPool () {
1287+ VolumeVO volume = Mockito .mock (VolumeVO .class );
1288+ Mockito .when (volume .getState ()).thenReturn (Volume .State .Ready );
1289+ Mockito .when (volume .getDiskOfferingId ()).thenReturn (1L );
1290+ Mockito .when (volume .getPoolId ()).thenReturn (2L );
1291+ DiskOfferingVO diskOffering = Mockito .mock (DiskOfferingVO .class );
1292+ Mockito .when (diskOfferingDao .findById (1L )).thenReturn (diskOffering );
1293+ Mockito .when (diskOffering .isUseLocalStorage ()).thenReturn (false );
1294+ Mockito .when (primaryDataStoreDao .findById (2L )).thenReturn (null );
1295+
1296+ CloudRuntimeException exception = assertThrows (CloudRuntimeException .class , () ->
1297+ userVmManagerImpl .isAnyVmVolumeUsingLocalStorage (Collections .singletonList (volume )));
1298+ Assert .assertTrue (exception .getMessage ().contains ("storage pool ID 2 is missing or removed" ));
1299+ }
1300+
1301+ @ Test
1302+ public void testIsAnyVmVolumeUsingLocalStorageFailsForActiveVolumeWithRemovedPool () {
1303+ VolumeVO volume = Mockito .mock (VolumeVO .class );
1304+ Mockito .when (volume .getState ()).thenReturn (Volume .State .Ready );
1305+ Mockito .when (volume .getDiskOfferingId ()).thenReturn (1L );
1306+ Mockito .when (volume .getPoolId ()).thenReturn (2L );
1307+ DiskOfferingVO diskOffering = Mockito .mock (DiskOfferingVO .class );
1308+ Mockito .when (diskOfferingDao .findById (1L )).thenReturn (diskOffering );
1309+ Mockito .when (diskOffering .isUseLocalStorage ()).thenReturn (false );
1310+ StoragePoolVO storagePool = Mockito .mock (StoragePoolVO .class );
1311+ Mockito .when (storagePool .getRemoved ()).thenReturn (new Date ());
1312+ Mockito .when (primaryDataStoreDao .findById (2L )).thenReturn (storagePool );
1313+
1314+ CloudRuntimeException exception = assertThrows (CloudRuntimeException .class , () ->
1315+ userVmManagerImpl .isAnyVmVolumeUsingLocalStorage (Collections .singletonList (volume )));
1316+ Assert .assertTrue (exception .getMessage ().contains ("storage pool ID 2 is missing or removed" ));
1317+ }
1318+
12671319 private List <VolumeVO > mockVolumesForIsAllVmVolumesOnZoneWideStore (int nullPoolIdVolumes , int nullPoolVolumes , int zoneVolumes , int nonZoneVolumes ) {
12681320 List <VolumeVO > volumes = new ArrayList <>();
12691321 for (int i =0 ; i < nullPoolIdVolumes + nullPoolVolumes + zoneVolumes + nonZoneVolumes ; ++i ) {
0 commit comments