@@ -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