Daniel Erez has uploaded a new change for review.

Change subject: core: validate disks existence on create snapshot
......................................................................

core: validate disks existence on create snapshot

CreateAllSnapshotsFromVmCommand:
Added validation for specified disks existence.
* Included disks IDs in CanDo message.
* Updated tests accordingly.

Change-Id: I4d75ad139d048f83b08d9289e43d909b29f89695
Bug-Url: https://bugzilla.redhat.com/1057143
Signed-off-by: Daniel Erez <de...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
M 
frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
7 files changed, 57 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/06/23706/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
index fa9f0e0..acfd5a3 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
@@ -7,6 +7,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.ovirt.engine.core.bll.job.ExecutionContext;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
@@ -117,8 +118,7 @@
     }
 
     protected List<DiskImage> getDisksListForChecks() {
-        List<DiskImage> disksListForChecks = getParameters().getDisks() == 
null ?
-                getDisksList() : getParameters().getDisks();
+        List<DiskImage> disksListForChecks = getDisksList();
         if (getParameters().getDiskIdsToIgnoreInChecks().isEmpty()) {
             return disksListForChecks;
         }
@@ -441,6 +441,10 @@
             return false;
         }
 
+        if (!isSpecifiedDisksExist(getParameters().getDisks())) {
+            return false;
+        }
+
         // Initialize validators.
         VmValidator vmValidator = createVmValidator();
         SnapshotsValidator snapshotValidator = createSnapshotValidator();
@@ -501,6 +505,23 @@
                 validate(vmValidator.vmNotSavingRestoring());
     }
 
+    private boolean isSpecifiedDisksExist(List<DiskImage> disks) {
+        if (disks != null) {
+            List<DiskImage> disksNotExistsInDb = 
ImagesHandler.imagesSubtract(getParameters().getDisks(), getDisksList());
+            if (!disksNotExistsInDb.isEmpty()) {
+                List<String> disksNotExistsInDbIds = new 
ArrayList<>(disksNotExistsInDb.size());
+                for (DiskImage diskImage : disksNotExistsInDb) {
+                    disksNotExistsInDbIds.add(diskImage.getId().toString());
+                }
+
+                return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_DISKS_NOT_EXIST,
+                        String.format("$%1$s %2$s", "diskIds", 
StringUtils.join(disksNotExistsInDbIds, ",")));
+            }
+        }
+
+        return true;
+    }
+
     @Override
     protected void setActionMessageParameters() {
         addCanDoActionMessage(VdcBllMessages.VAR__ACTION__CREATE);
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java
index 76e8c6c..8c44c80 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java
@@ -7,6 +7,7 @@
 import static org.mockito.Mockito.spy;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.junit.Before;
@@ -220,6 +221,26 @@
     }
 
     @Test
+    public void testImagesDoesNotExist() {
+        setUpGeneralValidations();
+        setUpDiskValidations();
+
+        DiskImage diskImage1 = getNewDiskImage();
+        DiskImage diskImage2 = getNewDiskImage();
+        DiskImage diskImage3 = getNewDiskImage();
+
+        List<DiskImage> diskImagesFromVm = new ArrayList<>();
+        diskImagesFromVm.addAll(Arrays.asList(diskImage1, diskImage2));
+        doReturn(diskImagesFromVm).when(cmd).getDisksList();
+
+        List<DiskImage> diskImagesFromParams = new ArrayList<>();
+        diskImagesFromParams.addAll(Arrays.asList(diskImage1, diskImage3));
+        cmd.getParameters().setDisks(diskImagesFromParams);
+
+        CanDoActionTestUtils.runAndAssertCanDoActionFailure(cmd, 
VdcBllMessages.ACTION_TYPE_FAILED_DISKS_NOT_EXIST);
+    }
+
+    @Test
     public void testAllDomainsExistAndActive() {
         setUpGeneralValidations();
         setUpDiskValidations();
@@ -274,4 +295,10 @@
         diskList.add(newDiskImage);
         return diskList;
     }
+
+    private static DiskImage getNewDiskImage() {
+        DiskImage diskImage = new DiskImage();
+        diskImage.setId(Guid.newGuid());
+        return diskImage;
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
index 43a16b7..47c3bed 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
@@ -746,6 +746,7 @@
     ACTION_TYPE_FAILED_DISK_IS_NOT_VM_DISK(ErrorType.BAD_PARAMETERS),
     ACTION_TYPE_FAILED_DISK_IS_NOT_TEMPLATE_DISK(ErrorType.BAD_PARAMETERS),
     ACTION_TYPE_FAILED_DISK_NOT_EXIST(ErrorType.BAD_PARAMETERS),
+    ACTION_TYPE_FAILED_DISKS_NOT_EXIST(ErrorType.BAD_PARAMETERS),
     ACTION_TYPE_FAILED_NO_DISKS_SPECIFIED(ErrorType.BAD_PARAMETERS),
     ACTION_TYPE_FAILED_SOURCE_AND_TARGET_SAME(ErrorType.BAD_PARAMETERS),
     
ACTION_TYPE_FAILED_REQUESTED_DISK_SIZE_IS_TOO_SMALL(ErrorType.BAD_PARAMETERS),
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
index 3df97e7..c300b2d 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -939,6 +939,7 @@
 ACTION_TYPE_FAILED_VM_SNAPSHOT_NOT_IN_PREVIEW=Cannot ${action} ${type} to a 
Snapshot that is not being previewed. Please select the correct Snapshot to 
restore to: Either the one being previewed, or the one before the preview.
 ACTION_TYPE_FAILED_SHAREABLE_DISK_NOT_SUPPORTED=Cannot ${action} a shareable 
${type} (${diskAliases}). This operation is not supported.
 ACTION_TYPE_FAILED_DISK_NOT_EXIST=Cannot ${action} ${type}. The specified disk 
does not exist.
+ACTION_TYPE_FAILED_DISKS_NOT_EXIST=Cannot ${action} ${type}. The following 
disk(s) does not exist: ${diskIds}.
 ACTION_TYPE_FAILED_NO_DISKS_SPECIFIED=Cannot ${action} ${type}. No disks have 
been specified.
 ACTION_TYPE_FAILED_DISK_IS_NOT_VM_DISK=Cannot ${action} ${type}. The following 
disk(s) are not attached to any VM: ${diskAliases}.
 ACTION_TYPE_FAILED_DISK_IS_NOT_TEMPLATE_DISK=Cannot ${action} ${type}. The 
selected disk is not a template disk. Only template disks can be copied.
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
index 2fd13f8..cf723c6 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
@@ -2538,6 +2538,9 @@
     @DefaultStringValue("Cannot ${action} ${type}. The specified disk does not 
exist.")
     String ACTION_TYPE_FAILED_DISK_NOT_EXIST();
 
+    @DefaultStringValue("Cannot ${action} ${type}. The following disk(s) does 
not exist: ${diskIds}.")
+    String ACTION_TYPE_FAILED_DISKS_NOT_EXIST();
+
     @DefaultStringValue("Cannot ${action} ${type}. No disks have been 
specified.")
     String ACTION_TYPE_FAILED_NO_DISKS_SPECIFIED();
 
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
index 0bfd487..5a140de 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
@@ -908,6 +908,7 @@
 ACTION_TYPE_FAILED_VM_SNAPSHOT_NOT_IN_PREVIEW=Cannot ${action} ${type} to a 
Snapshot that is not being previewed. Please select the correct Snapshot to 
restore to: Either the one being previewed, or the one before the preview.
 ACTION_TYPE_FAILED_SHAREABLE_DISK_NOT_SUPPORTED=Cannot ${action} a shareable 
${type}. This operation is not supported.
 ACTION_TYPE_FAILED_DISK_NOT_EXIST=Cannot ${action} ${type}. The specified disk 
does not exist.
+ACTION_TYPE_FAILED_DISKS_NOT_EXIST=Cannot ${action} ${type}. The following 
disk(s) does not exist: ${diskIds}.
 ACTION_TYPE_FAILED_NO_DISKS_SPECIFIED=Cannot ${action} ${type}. No disks have 
been specified.
 ACTION_TYPE_FAILED_DISK_IS_NOT_VM_DISK=Cannot ${action} ${type}. The following 
disk(s) are not attached to any VM: ${diskAliases}.
 ACTION_TYPE_FAILED_DISK_IS_NOT_TEMPLATE_DISK=Cannot ${action} ${type}. The 
selected disk is not a template disk. Only template disks can be copied.
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
 
b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
index 96a5a2e..74ac9c7 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
+++ 
b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
@@ -935,6 +935,7 @@
 ACTION_TYPE_FAILED_VM_SNAPSHOT_NOT_IN_PREVIEW=Cannot ${action} ${type} to a 
Snapshot that is not being previewed. Please select the correct Snapshot to 
restore to: Either the one being previewed, or the one before the preview.
 ACTION_TYPE_FAILED_SHAREABLE_DISK_NOT_SUPPORTED=Cannot ${action} a shareable 
${type} (${diskAliases}). This operation is not supported.
 ACTION_TYPE_FAILED_DISK_NOT_EXIST=Cannot ${action} ${type}. The specified disk 
does not exist.
+ACTION_TYPE_FAILED_DISKS_NOT_EXIST=Cannot ${action} ${type}. The following 
disk(s) does not exist: ${diskIds}.
 ACTION_TYPE_FAILED_NO_DISKS_SPECIFIED=Cannot ${action} ${type}. No disks have 
been specified.
 ACTION_TYPE_FAILED_DISK_IS_NOT_VM_DISK=Cannot ${action} ${type}. The following 
disk(s) are not attached to any VM: ${diskAliases}.
 ACTION_TYPE_FAILED_DISK_IS_NOT_TEMPLATE_DISK=Cannot ${action} ${type}. The 
selected disk is not a template disk. Only template disks can be copied.


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4d75ad139d048f83b08d9289e43d909b29f89695
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Daniel Erez <de...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to