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
