Vered Volansky has uploaded a new change for review.

Change subject: core: Added VM memory validation on snapshot
......................................................................

core: Added VM memory validation on snapshot

Up till now there was no storage allocation validation When creating a snapshot
of a running VM with the VM's memory. This test is now added to the storage
allocation validation in the relevant command and validators.
Relevant tests were amended accordingly.

Change-Id: I8fc127147bdea8737fecb034c88079521b8a8bd6
Bug-Url: https://bugzilla.redhat.com/1119022
Signed-off-by: Vered Volansky <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageBuilder.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/NullableMemoryImageBuilder.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/StatelessSnapshotMemoryImageBuilder.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidator.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageDomainValidator.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidatorTest.java
9 files changed, 166 insertions(+), 63 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/40/30040/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 a1a27ab..4dd57d8 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
@@ -71,6 +71,7 @@
     private Guid cachedStorageDomainId = Guid.Empty;
     private String cachedSnapshotIsBeingTakenMessage;
     private Guid newActiveSnapshotId = Guid.newGuid();
+    private MemoryImageBuilder memoryBuilder = null;
 
     protected CreateAllSnapshotsFromVmCommand(Guid commandId) {
         super(commandId);
@@ -144,6 +145,21 @@
         return toReturn;
     }
 
+    private boolean validateSpaceRequirements(MultipleStorageDomainsValidator 
sdValidator, List<DiskImage> newDisksList) {
+        if (!validate(sdValidator.allDomainsWithinThresholds())) {
+            return false;
+        }
+        List<DiskImage> clonedDisksList = 
getMemoryImageBuilder().getDisksToBeCreated();
+        return 
validate(sdValidator.allDomainsHaveSpaceForAllDisks(newDisksList, 
clonedDisksList));
+    }
+
+    protected MemoryImageBuilder getMemoryImageBuilder(){
+        if (null == memoryBuilder) {
+            memoryBuilder = createMemoryImageBuilder();
+        }
+        return memoryBuilder;
+    }
+
     private void incrementVmGeneration() {
         getVmStaticDAO().incrementDbGeneration(getVm().getId());
     }
@@ -166,7 +182,7 @@
 
         setActionReturnValue(createdSnapshotId);
 
-        MemoryImageBuilder memoryImageBuilder = createMemoryImageBuilder();
+        MemoryImageBuilder memoryImageBuilder = getMemoryImageBuilder();
         addSnapshotToDB(createdSnapshotId, memoryImageBuilder);
         createSnapshotsForDisks();
         fastForwardDisksToActiveSnapshot();
@@ -479,17 +495,18 @@
         }
 
         List<DiskImage> disksList = getDisksListForChecks();
+        MultipleStorageDomainsValidator sdValidator = 
createMultipleStorageDomainsValidator(disksList);
         if (disksList.size() > 0) {
-            MultipleStorageDomainsValidator sdValidator = 
createMultipleStorageDomainsValidator(disksList);
             DiskImagesValidator diskImagesValidator = 
createDiskImageValidator(disksList);
             if (!(validate(diskImagesValidator.diskImagesNotLocked())
                     && validate(diskImagesValidator.diskImagesNotIllegal())
-                    && validate(sdValidator.allDomainsExistAndActive())
-                    && validate(sdValidator.allDomainsWithinThresholds())
-                    && 
validate(sdValidator.allDomainsHaveSpaceForNewDisks(disksList)))) {
+                    && validate(sdValidator.allDomainsExistAndActive()))) {
                 return false;
             }
         }
+        if (!validateSpaceRequirements(sdValidator, disksList)) {
+            return false;
+        }
 
         if (getParameters().isSaveMemory() && 
Guid.Empty.equals(getStorageDomainIdForVmMemory())) {
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_NO_SUITABLE_DOMAIN_FOUND);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java
index cd50965..c1b01f6 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/LiveSnapshotMemoryImageBuilder.java
@@ -4,6 +4,7 @@
 import org.ovirt.engine.core.bll.HibernateVmCommand;
 import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand;
 import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.VM;
@@ -16,6 +17,11 @@
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
 
 /**
  * This builder creates the memory images for live snapshots with memory 
operation
@@ -32,6 +38,7 @@
     private VM vm;
     private TaskHandlerCommand<?> enclosingCommand;
     private StoragePool storagePool;
+    private VolumeType volumeTypeForDomain;
 
     public LiveSnapshotMemoryImageBuilder(VM vm, Guid storageDomainId,
             StoragePool storagePool, TaskHandlerCommand<?> enclosingCommand) {
@@ -81,7 +88,6 @@
     }
 
     private void createImageForMemoryDump() {
-        StorageDomainStatic storageDomainStatic = 
DbFacade.getInstance().getStorageDomainStaticDao().get(storageDomainId);
         VDSReturnValue retVal =
                 Backend
                 .getInstance()
@@ -93,7 +99,7 @@
                                 storageDomainId,
                                 memoryDumpImageGroupId,
                                 vm.getTotalMemorySizeInBytes(),
-                                
HibernateVmCommand.getMemoryVolumeTypeForStorageDomain(storageDomainStatic.getStorageType()),
+                                getVolumeTypeForDomain(),
                                 VolumeFormat.RAW,
                                 memoryDumpVolumeId,
                                 ""));
@@ -113,6 +119,15 @@
         enclosingCommand.getTaskIdList().add(guid);
     }
 
+    private VolumeType getVolumeTypeForDomain() {
+        if (null == volumeTypeForDomain) {
+            StorageDomainStatic sdStatic = 
DbFacade.getInstance().getStorageDomainStaticDao().get(storageDomainId);
+            volumeTypeForDomain = 
HibernateVmCommand.getMemoryVolumeTypeForStorageDomain(sdStatic.getStorageType());
+        }
+        return volumeTypeForDomain;
+    }
+
+
     public String getVolumeStringRepresentation() {
         return MemoryUtils.createMemoryStateString(
                 storageDomainId,
@@ -126,4 +141,19 @@
     public boolean isCreateTasks() {
         return true;
     }
+
+    public List<DiskImage> getDisksToBeCreated() {
+        DiskImage imageForMemory = new DiskImage();
+        imageForMemory.setStorageIds(new 
ArrayList<Guid>(Collections.singletonList(storageDomainId)));
+        imageForMemory.setStoragePoolId(storagePool.getId());
+        imageForMemory.setSize(vm.getTotalMemorySizeInBytes());
+        imageForMemory.setVolumeType(getVolumeTypeForDomain());
+        imageForMemory.setvolumeFormat(VolumeFormat.RAW);
+
+        DiskImage imageForMetadata = DiskImage.copyOf(imageForMemory);
+        imageForMetadata.setSize(HibernateVmCommand.META_DATA_SIZE_IN_BYTES);
+        imageForMetadata.setVolumeType(VolumeType.Sparse);
+        imageForMetadata.setvolumeFormat(VolumeFormat.COW);
+        return Arrays.asList(imageForMemory, imageForMetadata);
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageBuilder.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageBuilder.java
index d5b7da5..1b37130 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageBuilder.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/MemoryImageBuilder.java
@@ -1,5 +1,9 @@
 package org.ovirt.engine.core.bll.memory;
 
+import org.ovirt.engine.core.common.businessentities.DiskImage;
+
+import java.util.List;
+
 public interface MemoryImageBuilder {
     /**
      * Create the images
@@ -17,4 +21,6 @@
      * @return true if tasks are created in {@link #build()}, false otherwise
      */
     boolean isCreateTasks();
+
+    List<DiskImage> getDisksToBeCreated();
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/NullableMemoryImageBuilder.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/NullableMemoryImageBuilder.java
index 929c729..b74f391 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/NullableMemoryImageBuilder.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/NullableMemoryImageBuilder.java
@@ -1,6 +1,10 @@
 package org.ovirt.engine.core.bll.memory;
 
 import org.apache.commons.lang.StringUtils;
+import org.ovirt.engine.core.common.businessentities.DiskImage;
+
+import java.util.Collections;
+import java.util.List;
 
 /**
  * This builder is used when no memory image should be created
@@ -18,4 +22,6 @@
     public boolean isCreateTasks() {
         return false;
     }
+
+    public List<DiskImage> getDisksToBeCreated() { return 
Collections.emptyList(); }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/StatelessSnapshotMemoryImageBuilder.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/StatelessSnapshotMemoryImageBuilder.java
index 76ee9a4..6cf266f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/StatelessSnapshotMemoryImageBuilder.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/memory/StatelessSnapshotMemoryImageBuilder.java
@@ -1,8 +1,12 @@
 package org.ovirt.engine.core.bll.memory;
 
+import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+
+import java.util.Collections;
+import java.util.List;
 
 /**
  * This builder is responsible to create the memory volumes for stateless 
snapshot -
@@ -29,4 +33,7 @@
     public boolean isCreateTasks() {
         return false;
     }
+
+    public List<DiskImage> getDisksToBeCreated() { return 
Collections.emptyList(); }
+
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidator.java
index f3988b5..a937e04 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidator.java
@@ -83,14 +83,17 @@
      * Validates that all the domains have enough space for the request
      * @return {@link ValidationResult#VALID} if all the domains have enough 
free space, or a {@link ValidationResult} with the first low-on-space domain 
encountered.
      */
-    public ValidationResult allDomainsHaveSpaceForNewDisks(final 
List<DiskImage> disksList) {
-        final Map<Guid, List<DiskImage>> domainsDisksMap = 
getDomainsDisksMap(disksList);
+    public ValidationResult allDomainsHaveSpaceForAllDisks(List<DiskImage> 
newDisksList, final List<DiskImage> clonedDisksList) {
+        final Map<Guid, List<DiskImage>> domainsNewDisksMap = 
getDomainsDisksMap(newDisksList);
+        final Map<Guid, List<DiskImage>> domainsClonedDisksMap = 
getDomainsDisksMap(clonedDisksList);
+
         return validOrFirstFailure(new ValidatorPredicate() {
             @Override
             public ValidationResult evaluate(Map.Entry<Guid, 
StorageDomainValidator> entry) {
                 Guid sdId = entry.getKey();
-                List disksForDomain = domainsDisksMap.get(sdId);
-                return 
getStorageDomainValidator(entry).hasSpaceForNewDisks(disksForDomain);
+                List<DiskImage> newDisksForDomain = 
domainsNewDisksMap.get(sdId);
+                List<DiskImage> clonedDisksForDomain = 
domainsClonedDisksMap.get(sdId);
+                return 
getStorageDomainValidator(entry).hasSpaceForAllDisks(newDisksForDomain, 
clonedDisksForDomain);
             }
         });
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageDomainValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageDomainValidator.java
index 84c70e1..e38a4b3 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageDomainValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageDomainValidator.java
@@ -108,47 +108,68 @@
         return Config.<Integer> 
getValue(ConfigValues.FreeSpaceCriticalLowInGB);
     }
 
+    private double getTotalSizeForNewDisks(Collection<DiskImage> diskImages) {
+        double totalSizeForDisks = 0.0;
+        if (null != diskImages) {
+            for (DiskImage diskImage : diskImages) {
+                double sizeForDisk = diskImage.getSize();
+
+                if (diskImage.getVolumeFormat() == VolumeFormat.COW) {
+                    if (storageDomain.getStorageType().isFileDomain()) {
+                        sizeForDisk = EMPTY_QCOW_HEADER_SIZE;
+                    } else {
+                        sizeForDisk = INITIAL_BLOCK_ALLOCATION_SIZE;
+                    }
+                } else if (diskImage.getVolumeType() == VolumeType.Sparse) {
+                    sizeForDisk = EMPTY_QCOW_HEADER_SIZE;
+                }
+                totalSizeForDisks += sizeForDisk;
+            }
+        }
+        return totalSizeForDisks;
+    }
+
+    private double getTotalSizeForClonedDisks(Collection<DiskImage> 
diskImages) {
+        double totalSizeForDisks = 0.0;
+        if (null != diskImages) {
+            for (DiskImage diskImage : diskImages) {
+                double diskCapacity = diskImage.getSize();
+                double sizeForDisk = diskCapacity;
+
+                if ((storageDomain.getStorageType().isFileDomain() && 
diskImage.getVolumeType() == VolumeType.Sparse) ||
+                        storageDomain.getStorageType().isBlockDomain() && 
diskImage.getVolumeFormat() == VolumeFormat.COW) {
+                    double usedSapce = 
diskImage.getActualDiskWithSnapshotsSizeInBytes();
+                    sizeForDisk = Math.min(diskCapacity, usedSapce);
+                }
+
+                if (diskImage.getVolumeFormat() == VolumeFormat.COW) {
+                    sizeForDisk = Math.ceil(QCOW_OVERHEAD_FACTOR * 
sizeForDisk);
+                }
+                totalSizeForDisks += sizeForDisk;
+            }
+        }
+        return totalSizeForDisks;
+    }
+
     public ValidationResult hasSpaceForNewDisks(Collection<DiskImage> 
diskImages) {
         double availableSize = storageDomain.getAvailableDiskSizeInBytes();
-        double totalSizeForDisks = 0.0;
-
-        for (DiskImage diskImage : diskImages) {
-            double sizeForDisk = diskImage.getSize();
-
-            if (diskImage.getVolumeFormat() == VolumeFormat.COW) {
-                if (storageDomain.getStorageType().isFileDomain()) {
-                    sizeForDisk = EMPTY_QCOW_HEADER_SIZE;
-                } else {
-                    sizeForDisk = INITIAL_BLOCK_ALLOCATION_SIZE;
-                }
-            } else if (diskImage.getVolumeType() == VolumeType.Sparse) {
-                sizeForDisk = EMPTY_QCOW_HEADER_SIZE;
-            }
-            totalSizeForDisks += sizeForDisk;
-        }
+        double totalSizeForDisks = getTotalSizeForNewDisks(diskImages);
 
         return validateRequiredSpace(availableSize, totalSizeForDisks);
     }
 
     public ValidationResult hasSpaceForClonedDisks(Collection<DiskImage> 
diskImages) {
         double availableSize = storageDomain.getAvailableDiskSizeInBytes();
-        double totalSizeForDisks = 0.0;
+        double totalSizeForDisks = getTotalSizeForClonedDisks(diskImages);
 
-        for (DiskImage diskImage : diskImages) {
-            double diskCapacity = diskImage.getSize();
-            double sizeForDisk = diskCapacity;
+        return validateRequiredSpace(availableSize, totalSizeForDisks);
+    }
 
-            if ((storageDomain.getStorageType().isFileDomain() && 
diskImage.getVolumeType() == VolumeType.Sparse) ||
-                    storageDomain.getStorageType().isBlockDomain() && 
diskImage.getVolumeFormat() == VolumeFormat.COW) {
-                double usedSapce = 
diskImage.getActualDiskWithSnapshotsSizeInBytes();
-                sizeForDisk = Math.min(diskCapacity, usedSapce);
-            }
-
-            if (diskImage.getVolumeFormat() == VolumeFormat.COW) {
-                sizeForDisk = Math.ceil(QCOW_OVERHEAD_FACTOR * sizeForDisk);
-            }
-            totalSizeForDisks += sizeForDisk;
-        }
+    public ValidationResult hasSpaceForAllDisks(Collection<DiskImage> 
newDiskImages, Collection<DiskImage> clonedDiskImages) {
+        double availableSize = storageDomain.getAvailableDiskSizeInBytes();
+        double totalSizeForNewDisks = getTotalSizeForNewDisks(newDiskImages);
+        double totalSizeForClonedDisks = 
getTotalSizeForNewDisks(clonedDiskImages);
+        double totalSizeForDisks = totalSizeForNewDisks + 
totalSizeForClonedDisks;
 
         return validateRequiredSpace(availableSize, totalSizeForDisks);
     }
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 a32bef0..d7d2c68 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
@@ -10,6 +10,7 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.junit.Before;
@@ -17,6 +18,7 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
+import org.ovirt.engine.core.bll.memory.MemoryImageBuilder;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.bll.validator.DiskImagesValidator;
@@ -59,6 +61,9 @@
     @Mock
     private StoragePoolValidator storagePoolValidator;
 
+    @Mock
+    private MemoryImageBuilder memoryImageBuilder;
+
     @SuppressWarnings("unchecked")
     @Before
     public void setUp() {
@@ -72,11 +77,13 @@
         
doReturn(diskImagesValidator).when(cmd).createDiskImageValidator(any(List.class));
         
doReturn(multipleStorageDomainsValidator).when(cmd).createMultipleStorageDomainsValidator(any(List.class));
         doReturn(vmValidator).when(cmd).createVmValidator();
+        doReturn(memoryImageBuilder).when(cmd).getMemoryImageBuilder();
     }
 
     @Test
     public void testPositiveCanDoActionWithNoDisks() {
         setUpGeneralValidations();
+        setUpDiskValidations();
         doReturn(getEmptyDiskList()).when(cmd).getDisksList();
         doReturn(Guid.newGuid()).when(cmd).getStorageDomainId();
         assertTrue(cmd.canDoAction());
@@ -154,6 +161,7 @@
     @Test
     public void testLiveSnapshotWhenNoPluggedDiskSnapshot() {
         setUpGeneralValidations();
+        setUpDiskValidations();
         doReturn(true).when(cmd).isLiveSnapshotApplicable();
         doReturn(getEmptyDiskList()).when(cmd).getDisksList();
         assertTrue(cmd.canDoAction());
@@ -267,26 +275,26 @@
     }
 
     @Test
-    public void testAllDomainsHaveSpaceForNewDisksFailure() {
+    public void testAllDomainsHaveSpaceForAllDisksFailure() {
         setUpGeneralValidations();
         setUpDiskValidations();
         List<DiskImage> disksList = getNonEmptyDiskList();
         doReturn(disksList).when(cmd).getDisksList();
         doReturn(new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW_ON_STORAGE_DOMAIN)).when(multipleStorageDomainsValidator)
-                .allDomainsHaveSpaceForNewDisks(disksList);
+                .allDomainsHaveSpaceForAllDisks(disksList, 
Collections.EMPTY_LIST);
         CanDoActionTestUtils.runAndAssertCanDoActionFailure(cmd, 
VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW_ON_STORAGE_DOMAIN);
-        
verify(multipleStorageDomainsValidator).allDomainsHaveSpaceForNewDisks(disksList);
+        
verify(multipleStorageDomainsValidator).allDomainsHaveSpaceForAllDisks(disksList,
 Collections.EMPTY_LIST);
     }
 
     @Test
-    public void testAllDomainsHaveSpaceForNewDisksSuccess() {
+    public void testAllDomainsHaveSpaceForAllDisksSuccess() {
         setUpGeneralValidations();
         setUpDiskValidations();
         List<DiskImage> disksList = getNonEmptyDiskList();
         doReturn(disksList).when(cmd).getDisksList();
-        
doReturn(ValidationResult.VALID).when(multipleStorageDomainsValidator).allDomainsHaveSpaceForNewDisks(disksList);
+        
doReturn(ValidationResult.VALID).when(multipleStorageDomainsValidator).allDomainsHaveSpaceForAllDisks(disksList,
 Collections.EMPTY_LIST);
         CanDoActionTestUtils.runAndAssertCanDoActionSuccess(cmd);
-        
verify(multipleStorageDomainsValidator).allDomainsHaveSpaceForNewDisks(disksList);
+        
verify(multipleStorageDomainsValidator).allDomainsHaveSpaceForAllDisks(disksList,
 Collections.EMPTY_LIST);
     }
 
     private void setUpDiskValidations() {
@@ -294,7 +302,7 @@
         
doReturn(ValidationResult.VALID).when(diskImagesValidator).diskImagesNotIllegal();
         
doReturn(ValidationResult.VALID).when(multipleStorageDomainsValidator).allDomainsExistAndActive();
         
doReturn(ValidationResult.VALID).when(multipleStorageDomainsValidator).allDomainsWithinThresholds();
-        
doReturn(ValidationResult.VALID).when(multipleStorageDomainsValidator).allDomainsHaveSpaceForNewDisks(anyList());
+        
doReturn(ValidationResult.VALID).when(multipleStorageDomainsValidator).allDomainsHaveSpaceForAllDisks(anyList(),
 anyList());
     }
 
     private void setUpGeneralValidations() {
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidatorTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidatorTest.java
index a161279..75dd48e 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidatorTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/MultipleStorageDomainsValidatorTest.java
@@ -48,6 +48,7 @@
 
     private Guid sdId1;
     private Guid sdId2;
+    private Guid sdId3;
 
     private StorageDomain domain1;
     private StorageDomain domain2;
@@ -114,41 +115,45 @@
     }
 
     @Test
-    public void testAllDomainsHaveSpaceForNewDisksSuccess(){
-        List<DiskImage> disksList = generateDisksList(NUM_DISKS);
+    public void testAllDomainsHaveSpaceForAllDisksSuccess(){
+        List<Guid> sdIdsForNew = Arrays.asList(sdId1, sdId2);
+        List<Guid> sdIdsForCloned = Arrays.asList(sdId2, sdId3);
+        List<DiskImage> disksListForNew = generateDisksList(NUM_DISKS, 
sdIdsForNew);
+        List<DiskImage> disksListForCloned = generateDisksList(NUM_DISKS, 
sdIdsForCloned);
 
         StorageDomainValidator storageDomainValidator = 
mock(StorageDomainValidator.class);
-        
doReturn(ValidationResult.VALID).when(storageDomainValidator).hasSpaceForNewDisks(anyList());
+        
doReturn(ValidationResult.VALID).when(storageDomainValidator).hasSpaceForAllDisks(anyList(),
 anyList());
         
doReturn(storageDomainValidator).when(validator).getStorageDomainValidator(any(Map.Entry.class));
 
-        
assertTrue(validator.allDomainsHaveSpaceForNewDisks(disksList).isValid());
-        verify(storageDomainValidator, 
times(NUM_DOMAINS)).hasSpaceForNewDisks(anyList());
+        assertTrue(validator.allDomainsHaveSpaceForAllDisks(disksListForNew, 
disksListForCloned).isValid());
+        verify(storageDomainValidator, 
times(NUM_DOMAINS)).hasSpaceForAllDisks(anyList(), anyList());
     }
 
     @Test
-    public void testAllDomainsHaveSpaceForNewDisksFail(){
-        List<DiskImage> disksList = generateDisksList(NUM_DISKS);
+    public void testAllDomainsHaveSpaceForAllDisksFail(){
+        List<Guid> sdIdsForNew = Arrays.asList(sdId1, sdId2);
+        List<Guid> sdIdsForCloned = Arrays.asList(sdId2, sdId3);
+        List<DiskImage> disksListForNew = generateDisksList(NUM_DISKS, 
sdIdsForNew);
+        List<DiskImage> disksListForCloned = generateDisksList(NUM_DISKS, 
sdIdsForCloned);
 
         StorageDomainValidator storageDomainValidator = 
mock(StorageDomainValidator.class);
         doReturn(new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW_ON_STORAGE_DOMAIN)).
-                when(storageDomainValidator).hasSpaceForNewDisks(anyList());
+                when(storageDomainValidator).hasSpaceForAllDisks(anyList(), 
anyList());
 
-        ValidationResult result = 
validator.allDomainsHaveSpaceForNewDisks(disksList);
+        ValidationResult result = 
validator.allDomainsHaveSpaceForAllDisks(disksListForNew, disksListForCloned);
         assertFalse(result.isValid());
         assertEquals("Wrong validation error",
                 
VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW_ON_STORAGE_DOMAIN,
                 result.getMessage());
     }
 
-    private List<DiskImage> generateDisksList(int size) {
+    private List<DiskImage> generateDisksList(int size, List<Guid> sdIds) {
         List<DiskImage> disksList = new ArrayList<>();
-        ArrayList<Guid> sdIds = new ArrayList<>();
-        sdIds.add(sdId1);
-        sdIds.add(sdId2);
+        ArrayList<Guid> _sdIds = new ArrayList<>(sdIds);
         for (int i = 0; i < size; ++i) {
             DiskImage diskImage = new DiskImage();
             diskImage.setImageId(Guid.newGuid());
-            diskImage.setStorageIds(sdIds);
+            diskImage.setStorageIds(_sdIds);
             disksList.add(diskImage);
         }
         return disksList;


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

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

Reply via email to