Skip to content

Commit 0ebb4f9

Browse files
committed
add more tests
1 parent e45a43d commit 0ebb4f9

File tree

3 files changed

+1083
-7
lines changed

3 files changed

+1083
-7
lines changed

engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategyTest.java

Lines changed: 282 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,4 +369,286 @@ public void validateIsStoragePoolTypeInListReturnsFalse() {
369369

370370
assertFalse(strategy.isStoragePoolTypeInList(StoragePoolType.SharedMountPoint, listTypes));
371371
}
372+
373+
/**
374+
* Test updateMigrateDiskInfoForBlockDevice with CLVM destination pool
375+
* Should set driver type to RAW for CLVM
376+
*/
377+
@Test
378+
public void testUpdateMigrateDiskInfoForBlockDevice_ClvmDestination() {
379+
MigrateCommand.MigrateDiskInfo originalDiskInfo = new MigrateCommand.MigrateDiskInfo(
380+
"serial123",
381+
MigrateCommand.MigrateDiskInfo.DiskType.FILE,
382+
MigrateCommand.MigrateDiskInfo.DriverType.QCOW2,
383+
MigrateCommand.MigrateDiskInfo.Source.FILE,
384+
"/source/path",
385+
null
386+
);
387+
388+
StoragePoolVO destStoragePool = new StoragePoolVO();
389+
destStoragePool.setPoolType(StoragePoolType.CLVM);
390+
391+
MigrateCommand.MigrateDiskInfo updatedDiskInfo = strategy.updateMigrateDiskInfoForBlockDevice(
392+
originalDiskInfo, destStoragePool);
393+
394+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.DiskType.BLOCK, updatedDiskInfo.getDiskType());
395+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.DriverType.RAW, updatedDiskInfo.getDriverType());
396+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.Source.DEV, updatedDiskInfo.getSource());
397+
Assert.assertEquals("serial123", updatedDiskInfo.getSerialNumber());
398+
Assert.assertEquals("/source/path", updatedDiskInfo.getSourceText());
399+
}
400+
401+
/**
402+
* Test updateMigrateDiskInfoForBlockDevice with CLVM_NG destination pool
403+
* Should set driver type to QCOW2 for CLVM_NG
404+
*/
405+
@Test
406+
public void testUpdateMigrateDiskInfoForBlockDevice_ClvmNgDestination() {
407+
MigrateCommand.MigrateDiskInfo originalDiskInfo = new MigrateCommand.MigrateDiskInfo(
408+
"serial456",
409+
MigrateCommand.MigrateDiskInfo.DiskType.FILE,
410+
MigrateCommand.MigrateDiskInfo.DriverType.RAW,
411+
MigrateCommand.MigrateDiskInfo.Source.FILE,
412+
"/source/path",
413+
"/backing/path"
414+
);
415+
416+
StoragePoolVO destStoragePool = new StoragePoolVO();
417+
destStoragePool.setPoolType(StoragePoolType.CLVM_NG);
418+
419+
MigrateCommand.MigrateDiskInfo updatedDiskInfo = strategy.updateMigrateDiskInfoForBlockDevice(
420+
originalDiskInfo, destStoragePool);
421+
422+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.DiskType.BLOCK, updatedDiskInfo.getDiskType());
423+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.DriverType.QCOW2, updatedDiskInfo.getDriverType());
424+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.Source.DEV, updatedDiskInfo.getSource());
425+
Assert.assertEquals("serial456", updatedDiskInfo.getSerialNumber());
426+
Assert.assertEquals("/source/path", updatedDiskInfo.getSourceText());
427+
Assert.assertEquals("/backing/path", updatedDiskInfo.getBackingStoreText());
428+
}
429+
430+
/**
431+
* Test updateMigrateDiskInfoForBlockDevice with non-CLVM destination pool
432+
* Should return original DiskInfo unchanged
433+
*/
434+
@Test
435+
public void testUpdateMigrateDiskInfoForBlockDevice_NonClvmDestination() {
436+
MigrateCommand.MigrateDiskInfo originalDiskInfo = new MigrateCommand.MigrateDiskInfo(
437+
"serial789",
438+
MigrateCommand.MigrateDiskInfo.DiskType.FILE,
439+
MigrateCommand.MigrateDiskInfo.DriverType.QCOW2,
440+
MigrateCommand.MigrateDiskInfo.Source.FILE,
441+
"/source/path",
442+
null
443+
);
444+
445+
StoragePoolVO destStoragePool = new StoragePoolVO();
446+
destStoragePool.setPoolType(StoragePoolType.NetworkFilesystem);
447+
448+
MigrateCommand.MigrateDiskInfo updatedDiskInfo = strategy.updateMigrateDiskInfoForBlockDevice(
449+
originalDiskInfo, destStoragePool);
450+
451+
Assert.assertSame(originalDiskInfo, updatedDiskInfo);
452+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.DiskType.FILE, updatedDiskInfo.getDiskType());
453+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.DriverType.QCOW2, updatedDiskInfo.getDriverType());
454+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.Source.FILE, updatedDiskInfo.getSource());
455+
}
456+
457+
/**
458+
* Test supportStoragePoolType with CLVM and CLVM_NG types
459+
*/
460+
@Test
461+
public void testSupportStoragePoolType_ClvmTypes() {
462+
assertTrue(strategy.supportStoragePoolType(StoragePoolType.CLVM, StoragePoolType.CLVM, StoragePoolType.CLVM_NG));
463+
assertTrue(strategy.supportStoragePoolType(StoragePoolType.CLVM_NG, StoragePoolType.CLVM, StoragePoolType.CLVM_NG));
464+
465+
assertFalse(strategy.supportStoragePoolType(StoragePoolType.CLVM));
466+
assertFalse(strategy.supportStoragePoolType(StoragePoolType.CLVM_NG));
467+
}
468+
469+
/**
470+
* Test configureMigrateDiskInfo with CLVM destination
471+
*/
472+
@Test
473+
public void testConfigureMigrateDiskInfo_ForClvm() {
474+
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
475+
Mockito.doReturn("/dev/vg/volume-path").when(srcVolumeInfo).getPath();
476+
477+
MigrateCommand.MigrateDiskInfo migrateDiskInfo = strategy.configureMigrateDiskInfo(
478+
srcVolumeInfo, "/dev/vg/dest-path", null);
479+
480+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.DiskType.BLOCK, migrateDiskInfo.getDiskType());
481+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.DriverType.RAW, migrateDiskInfo.getDriverType());
482+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.Source.DEV, migrateDiskInfo.getSource());
483+
Assert.assertEquals("/dev/vg/dest-path", migrateDiskInfo.getSourceText());
484+
Assert.assertEquals("/dev/vg/volume-path", migrateDiskInfo.getSerialNumber());
485+
}
486+
487+
/**
488+
* Test configureMigrateDiskInfo with CLVM_NG destination and backing file
489+
*/
490+
@Test
491+
public void testConfigureMigrateDiskInfo_ForClvmNgWithBacking() {
492+
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
493+
Mockito.doReturn("/dev/vg/volume-path").when(srcVolumeInfo).getPath();
494+
495+
MigrateCommand.MigrateDiskInfo migrateDiskInfo = strategy.configureMigrateDiskInfo(
496+
srcVolumeInfo, "/dev/vg/dest-path", "/dev/vg/backing-template");
497+
498+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.DiskType.BLOCK, migrateDiskInfo.getDiskType());
499+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.DriverType.RAW, migrateDiskInfo.getDriverType());
500+
Assert.assertEquals(MigrateCommand.MigrateDiskInfo.Source.DEV, migrateDiskInfo.getSource());
501+
Assert.assertEquals("/dev/vg/dest-path", migrateDiskInfo.getSourceText());
502+
Assert.assertEquals("/dev/vg/backing-template", migrateDiskInfo.getBackingStoreText());
503+
Assert.assertEquals("/dev/vg/volume-path", migrateDiskInfo.getSerialNumber());
504+
}
505+
506+
/**
507+
* Test isStoragePoolTypeInList with CLVM types
508+
*/
509+
@Test
510+
public void testIsStoragePoolTypeInList_WithClvmTypes() {
511+
StoragePoolType[] clvmTypes = new StoragePoolType[] {
512+
StoragePoolType.CLVM,
513+
StoragePoolType.CLVM_NG,
514+
StoragePoolType.Filesystem
515+
};
516+
517+
assertTrue(strategy.isStoragePoolTypeInList(StoragePoolType.CLVM, clvmTypes));
518+
assertTrue(strategy.isStoragePoolTypeInList(StoragePoolType.CLVM_NG, clvmTypes));
519+
assertTrue(strategy.isStoragePoolTypeInList(StoragePoolType.Filesystem, clvmTypes));
520+
assertFalse(strategy.isStoragePoolTypeInList(StoragePoolType.NetworkFilesystem, clvmTypes));
521+
}
522+
523+
/**
524+
* Test supportStoragePoolType with mixed CLVM and NFS types
525+
*/
526+
@Test
527+
public void testSupportStoragePoolType_MixedClvmAndNfs() {
528+
assertTrue(strategy.supportStoragePoolType(
529+
StoragePoolType.CLVM,
530+
StoragePoolType.CLVM,
531+
StoragePoolType.CLVM_NG,
532+
StoragePoolType.NetworkFilesystem
533+
));
534+
535+
assertTrue(strategy.supportStoragePoolType(
536+
StoragePoolType.CLVM_NG,
537+
StoragePoolType.CLVM,
538+
StoragePoolType.CLVM_NG,
539+
StoragePoolType.NetworkFilesystem
540+
));
541+
542+
assertTrue(strategy.supportStoragePoolType(
543+
StoragePoolType.NetworkFilesystem,
544+
StoragePoolType.CLVM,
545+
StoragePoolType.CLVM_NG
546+
));
547+
}
548+
549+
/**
550+
* Test internalCanHandle with CLVM source and managed destination
551+
*/
552+
@Test
553+
public void testInternalCanHandle_ClvmSourceManagedDestination() {
554+
VolumeObject volumeInfo = Mockito.spy(new VolumeObject());
555+
Mockito.doReturn(0L).when(volumeInfo).getPoolId();
556+
557+
DataStore ds = Mockito.spy(new PrimaryDataStoreImpl());
558+
559+
Map<VolumeInfo, DataStore> volumeMap = new HashMap<>();
560+
volumeMap.put(volumeInfo, ds);
561+
562+
StoragePoolVO sourcePool = Mockito.spy(new StoragePoolVO());
563+
Mockito.lenient().doReturn(StoragePoolType.CLVM).when(sourcePool).getPoolType();
564+
Mockito.doReturn(true).when(sourcePool).isManaged();
565+
566+
Mockito.doReturn(sourcePool).when(primaryDataStoreDao).findById(0L);
567+
568+
StrategyPriority result = strategy.internalCanHandle(
569+
volumeMap, new HostVO("srcHostUuid"), new HostVO("destHostUuid"));
570+
571+
Assert.assertEquals(StrategyPriority.HIGHEST, result);
572+
}
573+
574+
/**
575+
* Test internalCanHandle with CLVM_NG source and managed destination
576+
*/
577+
@Test
578+
public void testInternalCanHandle_ClvmNgSourceManagedDestination() {
579+
VolumeObject volumeInfo = Mockito.spy(new VolumeObject());
580+
Mockito.doReturn(0L).when(volumeInfo).getPoolId();
581+
582+
DataStore ds = Mockito.spy(new PrimaryDataStoreImpl());
583+
584+
Map<VolumeInfo, DataStore> volumeMap = new HashMap<>();
585+
volumeMap.put(volumeInfo, ds);
586+
587+
StoragePoolVO sourcePool = Mockito.spy(new StoragePoolVO());
588+
Mockito.lenient().doReturn(StoragePoolType.CLVM_NG).when(sourcePool).getPoolType();
589+
Mockito.doReturn(true).when(sourcePool).isManaged();
590+
591+
Mockito.doReturn(sourcePool).when(primaryDataStoreDao).findById(0L);
592+
593+
StrategyPriority result = strategy.internalCanHandle(
594+
volumeMap, new HostVO("srcHostUuid"), new HostVO("destHostUuid"));
595+
596+
Assert.assertEquals(StrategyPriority.HIGHEST, result);
597+
}
598+
599+
/**
600+
* Test internalCanHandle with both CLVM source and CLVM_NG destination
601+
*/
602+
@Test
603+
public void testInternalCanHandle_ClvmToClvmNg() {
604+
VolumeObject volumeInfo = Mockito.spy(new VolumeObject());
605+
Mockito.doReturn(0L).when(volumeInfo).getPoolId();
606+
607+
DataStore ds = Mockito.spy(new PrimaryDataStoreImpl());
608+
609+
Map<VolumeInfo, DataStore> volumeMap = new HashMap<>();
610+
volumeMap.put(volumeInfo, ds);
611+
612+
StoragePoolVO sourcePool = Mockito.spy(new StoragePoolVO());
613+
Mockito.lenient().doReturn(StoragePoolType.CLVM).when(sourcePool).getPoolType();
614+
Mockito.doReturn(true).when(sourcePool).isManaged();
615+
616+
StoragePoolVO destPool = Mockito.spy(new StoragePoolVO());
617+
Mockito.lenient().doReturn(StoragePoolType.CLVM_NG).when(destPool).getPoolType();
618+
619+
Mockito.doReturn(sourcePool).when(primaryDataStoreDao).findById(0L);
620+
621+
StrategyPriority result = strategy.internalCanHandle(
622+
volumeMap, new HostVO("srcHostUuid"), new HostVO("destHostUuid"));
623+
624+
Assert.assertEquals(StrategyPriority.HIGHEST, result);
625+
}
626+
627+
/**
628+
* Test internalCanHandle with CLVM_NG to CLVM migration
629+
*/
630+
@Test
631+
public void testInternalCanHandle_ClvmNgToClvm() {
632+
VolumeObject volumeInfo = Mockito.spy(new VolumeObject());
633+
Mockito.doReturn(0L).when(volumeInfo).getPoolId();
634+
635+
DataStore ds = Mockito.spy(new PrimaryDataStoreImpl());
636+
637+
Map<VolumeInfo, DataStore> volumeMap = new HashMap<>();
638+
volumeMap.put(volumeInfo, ds);
639+
640+
StoragePoolVO sourcePool = Mockito.spy(new StoragePoolVO());
641+
Mockito.lenient().doReturn(StoragePoolType.CLVM_NG).when(sourcePool).getPoolType();
642+
Mockito.doReturn(true).when(sourcePool).isManaged();
643+
644+
StoragePoolVO destPool = Mockito.spy(new StoragePoolVO());
645+
Mockito.lenient().doReturn(StoragePoolType.CLVM).when(destPool).getPoolType();
646+
647+
Mockito.doReturn(sourcePool).when(primaryDataStoreDao).findById(0L);
648+
649+
StrategyPriority result = strategy.internalCanHandle(
650+
volumeMap, new HostVO("srcHostUuid"), new HostVO("destHostUuid"));
651+
652+
Assert.assertEquals(StrategyPriority.HIGHEST, result);
653+
}
372654
}

0 commit comments

Comments
 (0)