Skip to content

Commit ed7cf12

Browse files
committed
fix failing test and add test
1 parent c83affd commit ed7cf12

File tree

2 files changed

+235
-0
lines changed

2 files changed

+235
-0
lines changed

engine/storage/snapshot/src/test/java/org/apache/cloudstack/storage/snapshot/DefaultSnapshotStrategyTest.java

Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.List;
2222

2323
import com.cloud.hypervisor.Hypervisor;
24+
import com.cloud.storage.StoragePool;
2425
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
2526
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
2627
import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
@@ -327,4 +328,236 @@ public void testIsSnapshotStoredOnSameZoneStoreForQCOW2VolumeHasRef() {
327328
prepareMocksForIsSnapshotStoredOnSameZoneStoreForQCOW2VolumeTest(100L);
328329
Assert.assertTrue(defaultSnapshotStrategySpy.isSnapshotStoredOnSameZoneStoreForQCOW2Volume(snapshot, volumeVO));
329330
}
331+
332+
@Test
333+
public void testIsSnapshotStoredOnSecondaryForCLVMVolume_NullVolume() {
334+
Snapshot snapshot = Mockito.mock(Snapshot.class);
335+
Assert.assertFalse(defaultSnapshotStrategySpy.isSnapshotStoredOnSecondaryForCLVMVolume(snapshot, null));
336+
}
337+
338+
@Test
339+
public void testIsSnapshotStoredOnSecondaryForCLVMVolume_NullPoolId() {
340+
Snapshot snapshot = Mockito.mock(Snapshot.class);
341+
VolumeVO volumeVO = Mockito.mock(VolumeVO.class);
342+
Mockito.when(volumeVO.getPoolId()).thenReturn(null);
343+
344+
Assert.assertFalse(defaultSnapshotStrategySpy.isSnapshotStoredOnSecondaryForCLVMVolume(snapshot, volumeVO));
345+
}
346+
347+
@Test
348+
public void testIsSnapshotStoredOnSecondaryForCLVMVolume_NullPool() {
349+
Snapshot snapshot = Mockito.mock(Snapshot.class);
350+
VolumeVO volumeVO = Mockito.mock(VolumeVO.class);
351+
Mockito.when(volumeVO.getPoolId()).thenReturn(10L);
352+
Mockito.when(dataStoreManager.getDataStore(10L, DataStoreRole.Primary)).thenReturn(null);
353+
354+
Assert.assertFalse(defaultSnapshotStrategySpy.isSnapshotStoredOnSecondaryForCLVMVolume(snapshot, volumeVO));
355+
}
356+
357+
@Test
358+
public void testIsSnapshotStoredOnSecondaryForCLVMVolume_NonCLVMPool() {
359+
Snapshot snapshot = Mockito.mock(Snapshot.class);
360+
VolumeVO volumeVO = Mockito.mock(VolumeVO.class);
361+
Mockito.when(volumeVO.getPoolId()).thenReturn(10L);
362+
363+
StoragePool pool = Mockito.mock(StoragePool.class, Mockito.withSettings().extraInterfaces(DataStore.class));
364+
Mockito.when(pool.getPoolType()).thenReturn(Storage.StoragePoolType.NetworkFilesystem);
365+
Mockito.when(dataStoreManager.getDataStore(10L, DataStoreRole.Primary)).thenReturn((DataStore) pool);
366+
367+
Assert.assertFalse(defaultSnapshotStrategySpy.isSnapshotStoredOnSecondaryForCLVMVolume(snapshot, volumeVO));
368+
}
369+
370+
@Test
371+
public void testIsSnapshotStoredOnSecondaryForCLVMVolume_RBDPool() {
372+
Snapshot snapshot = Mockito.mock(Snapshot.class);
373+
VolumeVO volumeVO = Mockito.mock(VolumeVO.class);
374+
Mockito.when(volumeVO.getPoolId()).thenReturn(10L);
375+
376+
StoragePool pool = Mockito.mock(StoragePool.class, Mockito.withSettings().extraInterfaces(DataStore.class));
377+
Mockito.when(pool.getPoolType()).thenReturn(Storage.StoragePoolType.RBD);
378+
Mockito.when(dataStoreManager.getDataStore(10L, DataStoreRole.Primary)).thenReturn((DataStore) pool);
379+
380+
Assert.assertFalse(defaultSnapshotStrategySpy.isSnapshotStoredOnSecondaryForCLVMVolume(snapshot, volumeVO));
381+
}
382+
383+
@Test
384+
public void testIsSnapshotStoredOnSecondaryForCLVMVolume_CLVMPoolNoSnapshotStores() {
385+
Snapshot snapshot = Mockito.mock(Snapshot.class);
386+
Mockito.when(snapshot.getId()).thenReturn(1L);
387+
388+
VolumeVO volumeVO = Mockito.mock(VolumeVO.class);
389+
Mockito.when(volumeVO.getPoolId()).thenReturn(10L);
390+
391+
StoragePool pool = Mockito.mock(StoragePool.class, Mockito.withSettings().extraInterfaces(DataStore.class));
392+
Mockito.when(pool.getPoolType()).thenReturn(Storage.StoragePoolType.CLVM);
393+
Mockito.when(dataStoreManager.getDataStore(10L, DataStoreRole.Primary)).thenReturn((DataStore) pool);
394+
395+
Mockito.when(snapshotDataStoreDao.listReadyBySnapshot(1L, DataStoreRole.Image)).thenReturn(new ArrayList<>());
396+
397+
Assert.assertFalse(defaultSnapshotStrategySpy.isSnapshotStoredOnSecondaryForCLVMVolume(snapshot, volumeVO));
398+
}
399+
400+
@Test
401+
public void testIsSnapshotStoredOnSecondaryForCLVMVolume_CLVMPoolSnapshotInDifferentZone() {
402+
Snapshot snapshot = Mockito.mock(Snapshot.class);
403+
Mockito.when(snapshot.getId()).thenReturn(1L);
404+
405+
VolumeVO volumeVO = Mockito.mock(VolumeVO.class);
406+
Mockito.when(volumeVO.getPoolId()).thenReturn(10L);
407+
Mockito.when(volumeVO.getDataCenterId()).thenReturn(100L);
408+
409+
StoragePool pool = Mockito.mock(StoragePool.class, Mockito.withSettings().extraInterfaces(DataStore.class));
410+
Mockito.when(pool.getPoolType()).thenReturn(Storage.StoragePoolType.CLVM);
411+
Mockito.when(dataStoreManager.getDataStore(10L, DataStoreRole.Primary)).thenReturn((DataStore) pool);
412+
413+
SnapshotDataStoreVO snapshotStore1 = Mockito.mock(SnapshotDataStoreVO.class);
414+
Mockito.when(snapshotStore1.getDataStoreId()).thenReturn(201L);
415+
Mockito.when(snapshotStore1.getRole()).thenReturn(DataStoreRole.Image);
416+
417+
SnapshotDataStoreVO snapshotStore2 = Mockito.mock(SnapshotDataStoreVO.class);
418+
Mockito.when(snapshotStore2.getDataStoreId()).thenReturn(202L);
419+
Mockito.when(snapshotStore2.getRole()).thenReturn(DataStoreRole.Image);
420+
421+
Mockito.when(snapshotDataStoreDao.listReadyBySnapshot(1L, DataStoreRole.Image))
422+
.thenReturn(List.of(snapshotStore1, snapshotStore2));
423+
424+
Mockito.when(dataStoreManager.getStoreZoneId(201L, DataStoreRole.Image)).thenReturn(111L);
425+
Mockito.when(dataStoreManager.getStoreZoneId(202L, DataStoreRole.Image)).thenReturn(112L);
426+
427+
Assert.assertFalse(defaultSnapshotStrategySpy.isSnapshotStoredOnSecondaryForCLVMVolume(snapshot, volumeVO));
428+
}
429+
430+
@Test
431+
public void testIsSnapshotStoredOnSecondaryForCLVMVolume_CLVMPoolSnapshotInSameZone() {
432+
Snapshot snapshot = Mockito.mock(Snapshot.class);
433+
Mockito.when(snapshot.getId()).thenReturn(1L);
434+
435+
VolumeVO volumeVO = Mockito.mock(VolumeVO.class);
436+
Mockito.when(volumeVO.getPoolId()).thenReturn(10L);
437+
Mockito.when(volumeVO.getDataCenterId()).thenReturn(100L);
438+
439+
StoragePool pool = Mockito.mock(StoragePool.class, Mockito.withSettings().extraInterfaces(DataStore.class));
440+
Mockito.when(pool.getPoolType()).thenReturn(Storage.StoragePoolType.CLVM);
441+
Mockito.when(dataStoreManager.getDataStore(10L, DataStoreRole.Primary)).thenReturn((DataStore) pool);
442+
443+
SnapshotDataStoreVO snapshotStore = Mockito.mock(SnapshotDataStoreVO.class);
444+
Mockito.when(snapshotStore.getDataStoreId()).thenReturn(201L);
445+
Mockito.when(snapshotStore.getRole()).thenReturn(DataStoreRole.Image);
446+
447+
Mockito.when(snapshotDataStoreDao.listReadyBySnapshot(1L, DataStoreRole.Image))
448+
.thenReturn(List.of(snapshotStore));
449+
450+
Mockito.when(dataStoreManager.getStoreZoneId(201L, DataStoreRole.Image)).thenReturn(100L);
451+
452+
Assert.assertTrue(defaultSnapshotStrategySpy.isSnapshotStoredOnSecondaryForCLVMVolume(snapshot, volumeVO));
453+
}
454+
455+
@Test
456+
public void testIsSnapshotStoredOnSecondaryForCLVMVolume_CLVMPoolMultipleSnapshotsOneMatches() {
457+
Snapshot snapshot = Mockito.mock(Snapshot.class);
458+
Mockito.when(snapshot.getId()).thenReturn(1L);
459+
460+
VolumeVO volumeVO = Mockito.mock(VolumeVO.class);
461+
Mockito.when(volumeVO.getPoolId()).thenReturn(10L);
462+
Mockito.when(volumeVO.getDataCenterId()).thenReturn(100L);
463+
464+
StoragePool pool = Mockito.mock(StoragePool.class, Mockito.withSettings().extraInterfaces(DataStore.class));
465+
Mockito.when(pool.getPoolType()).thenReturn(Storage.StoragePoolType.CLVM);
466+
Mockito.when(dataStoreManager.getDataStore(10L, DataStoreRole.Primary)).thenReturn((DataStore) pool);
467+
468+
SnapshotDataStoreVO snapshotStore1 = Mockito.mock(SnapshotDataStoreVO.class);
469+
Mockito.when(snapshotStore1.getDataStoreId()).thenReturn(201L);
470+
Mockito.when(snapshotStore1.getRole()).thenReturn(DataStoreRole.Image);
471+
472+
SnapshotDataStoreVO snapshotStore2 = Mockito.mock(SnapshotDataStoreVO.class);
473+
Mockito.when(snapshotStore2.getDataStoreId()).thenReturn(202L);
474+
Mockito.when(snapshotStore2.getRole()).thenReturn(DataStoreRole.Image);
475+
476+
SnapshotDataStoreVO snapshotStore3 = Mockito.mock(SnapshotDataStoreVO.class);
477+
478+
Mockito.when(snapshotDataStoreDao.listReadyBySnapshot(1L, DataStoreRole.Image))
479+
.thenReturn(List.of(snapshotStore1, snapshotStore2, snapshotStore3));
480+
481+
Mockito.when(dataStoreManager.getStoreZoneId(201L, DataStoreRole.Image)).thenReturn(111L);
482+
Mockito.when(dataStoreManager.getStoreZoneId(202L, DataStoreRole.Image)).thenReturn(100L);
483+
484+
Assert.assertTrue(defaultSnapshotStrategySpy.isSnapshotStoredOnSecondaryForCLVMVolume(snapshot, volumeVO));
485+
}
486+
487+
@Test
488+
public void testIsSnapshotStoredOnSecondaryForCLVMVolume_CLVMPoolNullZoneIds() {
489+
Snapshot snapshot = Mockito.mock(Snapshot.class);
490+
Mockito.when(snapshot.getId()).thenReturn(1L);
491+
492+
VolumeVO volumeVO = Mockito.mock(VolumeVO.class);
493+
Mockito.when(volumeVO.getPoolId()).thenReturn(10L);
494+
Mockito.when(volumeVO.getDataCenterId()).thenReturn(100L);
495+
496+
StoragePool pool = Mockito.mock(StoragePool.class, Mockito.withSettings().extraInterfaces(DataStore.class));
497+
Mockito.when(pool.getPoolType()).thenReturn(Storage.StoragePoolType.CLVM);
498+
Mockito.when(dataStoreManager.getDataStore(10L, DataStoreRole.Primary)).thenReturn((DataStore) pool);
499+
500+
SnapshotDataStoreVO snapshotStore = Mockito.mock(SnapshotDataStoreVO.class);
501+
Mockito.when(snapshotStore.getDataStoreId()).thenReturn(201L);
502+
Mockito.when(snapshotStore.getRole()).thenReturn(DataStoreRole.Image);
503+
504+
Mockito.when(snapshotDataStoreDao.listReadyBySnapshot(1L, DataStoreRole.Image))
505+
.thenReturn(List.of(snapshotStore));
506+
507+
Mockito.when(dataStoreManager.getStoreZoneId(201L, DataStoreRole.Image)).thenReturn(null);
508+
509+
Assert.assertFalse(defaultSnapshotStrategySpy.isSnapshotStoredOnSecondaryForCLVMVolume(snapshot, volumeVO));
510+
}
511+
512+
@Test
513+
public void testIsSnapshotStoredOnSecondaryForCLVMVolume_CLVMPoolVolumeNullDataCenter() {
514+
Snapshot snapshot = Mockito.mock(Snapshot.class);
515+
Mockito.when(snapshot.getId()).thenReturn(1L);
516+
517+
VolumeVO volumeVO = Mockito.mock(VolumeVO.class);
518+
Mockito.when(volumeVO.getPoolId()).thenReturn(10L);
519+
Mockito.when(volumeVO.getDataCenterId()).thenReturn(1L);
520+
521+
StoragePool pool = Mockito.mock(StoragePool.class, Mockito.withSettings().extraInterfaces(DataStore.class));
522+
Mockito.when(pool.getPoolType()).thenReturn(Storage.StoragePoolType.CLVM);
523+
Mockito.when(dataStoreManager.getDataStore(10L, DataStoreRole.Primary)).thenReturn((DataStore) pool);
524+
525+
SnapshotDataStoreVO snapshotStore = Mockito.mock(SnapshotDataStoreVO.class);
526+
Mockito.when(snapshotStore.getDataStoreId()).thenReturn(201L);
527+
Mockito.when(snapshotStore.getRole()).thenReturn(DataStoreRole.Image);
528+
529+
Mockito.when(snapshotDataStoreDao.listReadyBySnapshot(1L, DataStoreRole.Image))
530+
.thenReturn(List.of(snapshotStore));
531+
532+
Mockito.when(dataStoreManager.getStoreZoneId(201L, DataStoreRole.Image)).thenReturn(100L);
533+
534+
Assert.assertFalse(defaultSnapshotStrategySpy.isSnapshotStoredOnSecondaryForCLVMVolume(snapshot, volumeVO));
535+
}
536+
537+
@Test
538+
public void testIsSnapshotStoredOnSecondaryForCLVMVolume_CLVMPoolMultipleSnapshotsAllInSameZone() {
539+
Snapshot snapshot = Mockito.mock(Snapshot.class);
540+
Mockito.when(snapshot.getId()).thenReturn(1L);
541+
542+
VolumeVO volumeVO = Mockito.mock(VolumeVO.class);
543+
Mockito.when(volumeVO.getPoolId()).thenReturn(10L);
544+
Mockito.when(volumeVO.getDataCenterId()).thenReturn(100L);
545+
546+
StoragePool pool = Mockito.mock(StoragePool.class, Mockito.withSettings().extraInterfaces(DataStore.class));
547+
Mockito.when(pool.getPoolType()).thenReturn(Storage.StoragePoolType.CLVM);
548+
Mockito.when(dataStoreManager.getDataStore(10L, DataStoreRole.Primary)).thenReturn((DataStore) pool);
549+
550+
SnapshotDataStoreVO snapshotStore1 = Mockito.mock(SnapshotDataStoreVO.class);
551+
Mockito.when(snapshotStore1.getDataStoreId()).thenReturn(201L);
552+
Mockito.when(snapshotStore1.getRole()).thenReturn(DataStoreRole.Image);
553+
554+
SnapshotDataStoreVO snapshotStore2 = Mockito.mock(SnapshotDataStoreVO.class);
555+
556+
Mockito.when(snapshotDataStoreDao.listReadyBySnapshot(1L, DataStoreRole.Image))
557+
.thenReturn(List.of(snapshotStore1, snapshotStore2));
558+
559+
Mockito.when(dataStoreManager.getStoreZoneId(201L, DataStoreRole.Image)).thenReturn(100L);
560+
561+
Assert.assertTrue(defaultSnapshotStrategySpy.isSnapshotStoredOnSecondaryForCLVMVolume(snapshot, volumeVO));
562+
}
330563
}

server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,8 @@ public class VolumeApiServiceImplTest {
226226
ClusterDao clusterDao;
227227
@Mock
228228
VolumeOrchestrationService volumeOrchestrationService;
229+
@Mock
230+
ClvmLockManager clvmLockManager;
229231

230232

231233
private DetachVolumeCmd detachCmd = new DetachVolumeCmd();

0 commit comments

Comments
 (0)