@@ -3907,4 +3907,129 @@ public void createVirtualMachineWithExistingSnapshot() throws ResourceUnavailabl
39073907
39083908 userVmManagerImpl .createVirtualMachine (deployVMCmd );
39093909 }
3910+
3911+ @ Test
3912+ public void testAllocateVMFromBackupWithVmSettingsRestoration () throws InsufficientCapacityException , ResourceAllocationException , ResourceUnavailableException {
3913+ Long backupId = 10L ;
3914+ Long vmId = 1L ;
3915+
3916+ CreateVMFromBackupCmd cmd = new CreateVMFromBackupCmd ();
3917+ cmd ._accountService = accountService ;
3918+ cmd ._entityMgr = entityManager ;
3919+ when (accountService .finalyzeAccountId (nullable (String .class ), nullable (Long .class ), nullable (Long .class ), eq (true ))).thenReturn (accountId );
3920+ when (accountService .getActiveAccountById (accountId )).thenReturn (account );
3921+
3922+ ReflectionTestUtils .setField (cmd , "serviceOfferingId" , serviceOfferingId );
3923+ ReflectionTestUtils .setField (cmd , "templateId" , templateId );
3924+ ReflectionTestUtils .setField (cmd , "backupId" , backupId );
3925+ ReflectionTestUtils .setField (cmd , "zoneId" , zoneId );
3926+
3927+ ServiceOfferingVO serviceOffering = mock (ServiceOfferingVO .class );
3928+ when (_serviceOfferingDao .findById (serviceOfferingId )).thenReturn (serviceOffering );
3929+
3930+ DataCenterVO zone = mock (DataCenterVO .class );
3931+ when (_dcDao .findById (zoneId )).thenReturn (zone );
3932+
3933+ BackupVO backup = mock (BackupVO .class );
3934+ when (backup .getZoneId ()).thenReturn (zoneId );
3935+ when (backup .getVmId ()).thenReturn (vmId );
3936+ when (backupDao .findById (backupId )).thenReturn (backup );
3937+
3938+ String vmSettingsJson = "{\" key1\" :\" value1\" ,\" key2\" :\" value2\" ,\" existingKey\" :\" backupValue\" }" ;
3939+ when (backup .getDetail (ApiConstants .VM_SETTINGS )).thenReturn (vmSettingsJson );
3940+
3941+ UserVmVO userVmVO = new UserVmVO ();
3942+ when (userVmDao .findByIdIncludingRemoved (vmId )).thenReturn (userVmVO );
3943+ VMTemplateVO template = mock (VMTemplateVO .class );
3944+ when (template .getFormat ()).thenReturn (Storage .ImageFormat .QCOW2 );
3945+ when (templateDao .findById (templateId )).thenReturn (template );
3946+
3947+ DiskOfferingVO diskOffering = mock (DiskOfferingVO .class );
3948+ VmDiskInfo rootVmDiskInfo = new VmDiskInfo (diskOffering , 10L , 1000L , 2000L );
3949+ when (backupManager .getRootDiskInfoFromBackup (backup )).thenReturn (rootVmDiskInfo );
3950+ when (backupManager .canCreateInstanceFromBackup (backupId )).thenReturn (true );
3951+
3952+ UserVmVO createdVm = mock (UserVmVO .class );
3953+ when (createdVm .getId ()).thenReturn (2L );
3954+ Mockito .doReturn (createdVm ).when (userVmManagerImpl ).createAdvancedVirtualMachine (any (), any (), any (), any (), any (), any (), any (),
3955+ any (), any (), any (), any (), any (), any (), any (), any (), any (), any (), any (), any (), nullable (Boolean .class ), any (), any (), any (),
3956+ any (), any (), any (), any (), eq (true ), any (), any (), any (), any ());
3957+
3958+ Map <String , String > existingDetails = new HashMap <>();
3959+ existingDetails .put ("existingKey" , "existingValue" );
3960+ when (vmInstanceDetailsDao .listDetailsKeyPairs (2L )).thenReturn (existingDetails );
3961+
3962+ UserVmVO vmVO = mock (UserVmVO .class );
3963+ when (userVmDao .findById (2L )).thenReturn (vmVO );
3964+
3965+ UserVm result = userVmManagerImpl .allocateVMFromBackup (cmd );
3966+
3967+ assertNotNull (result );
3968+ assertEquals (2L , result .getId ());
3969+
3970+ verify (backup ).getDetail (ApiConstants .VM_SETTINGS );
3971+ verify (vmInstanceDetailsDao ).listDetailsKeyPairs (2L );
3972+ verify (userVmDao ).findById (2L );
3973+ verify (userVmDao ).saveDetails (any (UserVmVO .class ));
3974+ }
3975+
3976+ @ Test
3977+ public void testAllocateVMFromBackupWithOverrideDiskOfferingComputeOnly () throws InsufficientCapacityException , ResourceAllocationException , ResourceUnavailableException {
3978+ Long backupId = 11L ;
3979+ Long vmId = 1L ;
3980+ Long overrideDiskOfferingId = 5L ;
3981+
3982+ CreateVMFromBackupCmd cmd = new CreateVMFromBackupCmd ();
3983+ cmd ._accountService = accountService ;
3984+ cmd ._entityMgr = entityManager ;
3985+ when (accountService .finalyzeAccountId (nullable (String .class ), nullable (Long .class ), nullable (Long .class ), eq (true ))).thenReturn (accountId );
3986+ when (accountService .getActiveAccountById (accountId )).thenReturn (account );
3987+
3988+ ReflectionTestUtils .setField (cmd , "serviceOfferingId" , serviceOfferingId );
3989+ ReflectionTestUtils .setField (cmd , "templateId" , templateId );
3990+ ReflectionTestUtils .setField (cmd , "backupId" , backupId );
3991+ ReflectionTestUtils .setField (cmd , "zoneId" , zoneId );
3992+ ReflectionTestUtils .setField (cmd , "overrideDiskOfferingId" , overrideDiskOfferingId );
3993+
3994+ ServiceOfferingVO serviceOffering = mock (ServiceOfferingVO .class );
3995+ when (_serviceOfferingDao .findById (serviceOfferingId )).thenReturn (serviceOffering );
3996+
3997+ DataCenterVO zone = mock (DataCenterVO .class );
3998+ when (_dcDao .findById (zoneId )).thenReturn (zone );
3999+
4000+ BackupVO backup = mock (BackupVO .class );
4001+ when (backup .getZoneId ()).thenReturn (zoneId );
4002+ when (backup .getVmId ()).thenReturn (vmId );
4003+ when (backupDao .findById (backupId )).thenReturn (backup );
4004+
4005+ UserVmVO userVmVO = new UserVmVO ();
4006+ when (userVmDao .findByIdIncludingRemoved (vmId )).thenReturn (userVmVO );
4007+ VMTemplateVO template = mock (VMTemplateVO .class );
4008+ when (template .getFormat ()).thenReturn (Storage .ImageFormat .QCOW2 );
4009+ when (templateDao .findById (templateId )).thenReturn (template );
4010+
4011+ DiskOfferingVO overrideDiskOffering = mock (DiskOfferingVO .class );
4012+ when (overrideDiskOffering .isComputeOnly ()).thenReturn (true );
4013+ when (diskOfferingDao .findById (overrideDiskOfferingId )).thenReturn (overrideDiskOffering );
4014+
4015+ DiskOfferingVO diskOffering = mock (DiskOfferingVO .class );
4016+ VmDiskInfo rootVmDiskInfo = new VmDiskInfo (diskOffering , 10L , 1000L , 2000L );
4017+ when (backupManager .getRootDiskInfoFromBackup (backup )).thenReturn (rootVmDiskInfo );
4018+ when (backupManager .canCreateInstanceFromBackup (backupId )).thenReturn (true );
4019+
4020+ UserVmVO createdVm = mock (UserVmVO .class );
4021+ when (createdVm .getId ()).thenReturn (2L );
4022+ Mockito .doReturn (createdVm ).when (userVmManagerImpl ).createAdvancedVirtualMachine (any (), any (), any (), any (), any (), any (), any (),
4023+ any (), any (), any (), any (), any (), any (), any (), any (), any (), any (), any (), any (), nullable (Boolean .class ), any (), any (), any (),
4024+ any (), any (), any (), any (), eq (true ), any (), any (), any (), any ());
4025+
4026+ UserVm result = userVmManagerImpl .allocateVMFromBackup (cmd );
4027+
4028+ assertNotNull (result );
4029+ assertEquals (2L , result .getId ());
4030+
4031+ verify (diskOfferingDao ).findById (overrideDiskOfferingId );
4032+ verify (overrideDiskOffering ).isComputeOnly ();
4033+ }
4034+
39104035}
0 commit comments