Allon Mureinik has uploaded a new change for review.

Change subject: core: AddDisk preview validation
......................................................................

core: AddDisk preview validation

In AddDiskCommand, moved the validation that the VM is not in preview
from ImagesHandler to SnapshotValidator, which is a more logical place
for it.

This patch contains the following:
* A new method in SnapshotValidator, vmNotInPreview(vmId)
* Tests for the aforementioned method in SnapshotValidatorTest.
* The usage of the aforementioned method in AddDiskCommand
* Minor amendments to AddDiskToVmCommandTest's mocking in light of the
  previous change.

Note: This patch is part of a series of patches aimed at removing the
preview validation from ImagesHandler altogether.

Change-Id: Ib282279a4b938d6fb3b08e9b2d127af4653bd51c
Signed-off-by: Allon Mureinik <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsValidator.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/snapshots/SnapshotsValidatorTest.java
4 files changed, 48 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/79/11179/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
index 7dc6005..32e65b8 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
@@ -141,7 +141,8 @@
         if (returnValue && vm != null) {
             returnValue = isStoragePoolMatching(vm) &&
                     performImagesChecks(vm) &&
-                    
validate(getSnapshotValidator().vmNotDuringSnapshot(vm.getId()));
+                    
validate(getSnapshotValidator().vmNotDuringSnapshot(vm.getId())) &&
+                    
validate(getSnapshotValidator().vmNotInPreview(vm.getId()));
         }
 
         return returnValue;
@@ -205,7 +206,7 @@
                 true,
                 false,
                 false,
-                true,
+                false,
                 false,
                 true,
                 Collections.<Disk> emptyList());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsValidator.java
index 022148b..8c4219a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsValidator.java
@@ -21,8 +21,35 @@
      * @return Is the VM during a snapshot operation or not.
      */
     public ValidationResult vmNotDuringSnapshot(Guid vmId) {
-        if (getSnapshotDao().exists(vmId, SnapshotStatus.LOCKED)) {
-            return new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_DURING_SNAPSHOT);
+        return vmNotInState(vmId, SnapshotStatus.LOCKED, 
VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_DURING_SNAPSHOT);
+    }
+
+    /**
+     * Return if the VM is in preview (running currently on a snapshot other 
than the active one).
+     *
+     * @param vmId
+     *            The VM to check for.
+     * @return Is the VM during a snapshot operation or not.
+     */
+    public ValidationResult vmNotInPreview(Guid vmId) {
+        return vmNotInState(vmId, SnapshotStatus.IN_PREVIEW, 
VdcBllMessages.ACTION_TYPE_FAILED_VM_IN_PREVIEW);
+    }
+
+    /**
+     * Return if the VM has a snapshot in the given status.
+     *
+     * @param vmId
+     *            The VM to check for.
+     * @param status
+     *            The status of a snapshot to look for
+     * @param msg
+     *            The validation error to return if the snapshot exists
+     *
+     * @return Is the VM during a snapshot operation or not.
+     */
+    private ValidationResult vmNotInState(Guid vmId, SnapshotStatus status, 
VdcBllMessages msg) {
+        if (getSnapshotDao().exists(vmId, status)) {
+            return new ValidationResult(msg);
         }
 
         return ValidationResult.VALID;
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
index 92eef4f..cc764b9 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
@@ -29,7 +29,9 @@
 import org.ovirt.engine.core.common.businessentities.LUNs;
 import org.ovirt.engine.core.common.businessentities.LunDisk;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
+import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
 import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMapId;
+import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
 import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
@@ -37,8 +39,6 @@
 import org.ovirt.engine.core.common.businessentities.VolumeType;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
-import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
-import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
@@ -410,6 +410,7 @@
     private SnapshotsValidator mockSnapshotValidator() {
         SnapshotsValidator snapshotsValidator = mock(SnapshotsValidator.class);
         
when(snapshotsValidator.vmNotDuringSnapshot(any(Guid.class))).thenReturn(ValidationResult.VALID);
+        
when(snapshotsValidator.vmNotInPreview(any(Guid.class))).thenReturn(ValidationResult.VALID);
         return snapshotsValidator;
     }
 
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/snapshots/SnapshotsValidatorTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/snapshots/SnapshotsValidatorTest.java
index a690f0c..b933b2d 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/snapshots/SnapshotsValidatorTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/snapshots/SnapshotsValidatorTest.java
@@ -52,6 +52,19 @@
     }
 
     @Test
+    public void vmNotInPreviewReturnsInvalidResultWhenInSnapshot() throws 
Exception {
+        when(snapshotDao.exists(vmId, 
SnapshotStatus.IN_PREVIEW)).thenReturn(true);
+        validateInvalidResult(validator.vmNotInPreview(vmId),
+                VdcBllMessages.ACTION_TYPE_FAILED_VM_IN_PREVIEW);
+    }
+
+    @Test
+    public void vmNotInPreviewReturnsValidForNoSnapshotInProgress() throws 
Exception {
+        when(snapshotDao.exists(vmId, 
SnapshotStatus.IN_PREVIEW)).thenReturn(false);
+        validateValidResult(validator.vmNotInPreview(vmId));
+    }
+
+    @Test
     public void snapshotExistsByGuidReturnsInvalidResultWhenNoSnapshot() 
throws Exception {
         when(snapshotDao.exists(vmId, snapshotId)).thenReturn(false);
         validateInvalidResult(validator.snapshotExists(vmId, snapshotId),


--
To view, visit http://gerrit.ovirt.org/11179
To unsubscribe, visit http://gerrit.ovirt.org/settings

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

Reply via email to