Tal Nisan has uploaded a new change for review.

Change subject: core: Check attached VMs snapshot status when moving a disk
......................................................................

core: Check attached VMs snapshot status when moving a disk

Change-Id: I80feffc9f11aed1bc8fa7a6f80562d05ce815c56
Bug-Url: https://bugzilla.redhat.com/1211330
Signed-off-by: Tal Nisan <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java
2 files changed, 40 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/80/40080/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
index 33393f5..4936cb4 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
@@ -13,6 +13,7 @@
 import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter;
 import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter;
 import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
+import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.validator.storage.DiskValidator;
 import org.ovirt.engine.core.bll.validator.storage.StorageDomainValidator;
@@ -96,6 +97,7 @@
                 && validateDestStorage()
                 && checkTemplateInDestStorageDomain()
                 && validateSpaceRequirements()
+                && validateVmSnapshotStatus()
                 && checkCanBeMoveInVm()
                 && checkIfNeedToBeOverride()
                 && setAndValidateDiskProfiles();
@@ -180,6 +182,21 @@
         return false;
     }
 
+    private boolean validateVmSnapshotStatus() {
+        SnapshotsValidator snapshotsValidator = getSnapshotsValidator();
+        boolean returnValue = true;
+        for (Pair<VM, VmDevice> pair : getVmsWithVmDeviceInfoForDiskId()) {
+            VM vm = pair.getFirst();
+            returnValue = returnValue && 
validate(snapshotsValidator.vmNotInPreview(vm.getId()))
+                    && 
validate(snapshotsValidator.vmNotDuringSnapshot(vm.getId()));
+        }
+        return returnValue;
+    }
+
+    protected SnapshotsValidator getSnapshotsValidator() {
+        return new SnapshotsValidator();
+    }
+
     protected List<DiskImage> getAllImageSnapshots() {
         return ImagesHandler.getAllImageSnapshots(getImage().getImageId());
     }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java
index c5c666e..d69e1be 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java
@@ -18,6 +18,7 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
+import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.validator.storage.StorageDomainValidator;
 import org.ovirt.engine.core.common.action.MoveOrCopyImageGroupParameters;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
@@ -61,6 +62,8 @@
     private VmDAO vmDao;
     @Mock
     private VmDeviceDAO vmDeviceDao;
+    @Mock
+    private SnapshotsValidator snapshotsValidator;
 
     /**
      * The command under test.
@@ -161,6 +164,7 @@
     @Test
     public void canDoActionVmIsNotDown() throws Exception {
         initializeCommand(ImageOperation.Move);
+        initSnapshotValidator();
         initVmDiskImage(false);
         mockGetVmsListForDisk();
         initSrcStorageDomain();
@@ -221,12 +225,25 @@
     @Test
     public void canDoActionEnoughSpace() throws Exception {
         initializeCommand(ImageOperation.Move);
+        initSnapshotValidator();
         initVmForSpace();
         initVmDiskImage(false);
         initSrcStorageDomain();
         initDestStorageDomain(StorageType.NFS);
         
doReturn(mockStorageDomainValidatorWithSpace()).when(command).createStorageDomainValidator();
         CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command);
+    }
+
+    @Test
+    public void canDoActionVmInPreview() {
+        initializeCommand(ImageOperation.Move);
+        initSnapshotValidator();
+        initVmForSpace();
+        initVmDiskImage(false);
+        initSrcStorageDomain();
+        initDestStorageDomain(StorageType.NFS);
+        
when(snapshotsValidator.vmNotInPreview(any(Guid.class))).thenReturn(new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_VM_IN_PREVIEW));
+        CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, 
VdcBllMessages.ACTION_TYPE_FAILED_VM_IN_PREVIEW);
     }
 
     protected void initVmForSpace() {
@@ -312,6 +329,12 @@
         doReturn(storageDomainDao).when(command).getStorageDomainDAO();
     }
 
+    private void initSnapshotValidator() {
+        
when(snapshotsValidator.vmNotInPreview(any(Guid.class))).thenReturn(ValidationResult.VALID);
+        
when(snapshotsValidator.vmNotDuringSnapshot(any(Guid.class))).thenReturn(ValidationResult.VALID);
+        when(command.getSnapshotsValidator()).thenReturn(snapshotsValidator);
+    }
+
     private void initTemplateDiskImage() {
         DiskImage diskImage = new DiskImage();
         diskImage.setVmEntityType(VmEntityType.TEMPLATE);


-- 
To view, visit https://gerrit.ovirt.org/40080
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I80feffc9f11aed1bc8fa7a6f80562d05ce815c56
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Tal Nisan <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to