Federico Simoncelli has uploaded a new change for review. Change subject: core: create ReconstructMasterDomain validators ......................................................................
core: create ReconstructMasterDomain validators Change-Id: I1b8c4727336c5df28f06566f7cb05c1871fcb000 Signed-off-by: Federico Simoncelli <fsimo...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StoragePoolValidator.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/storage/ReconstructMasterDomainCommandTest.java 4 files changed, 107 insertions(+), 28 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/24/28624/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java index 9956278..61a2c30 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java @@ -6,6 +6,7 @@ import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; +import org.ovirt.engine.core.bll.validator.StorageDomainValidator; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; import org.ovirt.engine.core.common.action.ReconstructMasterParameters; @@ -54,13 +55,12 @@ canChooseCurrentMasterAsNewMaster = parameters.isCanChooseCurrentMasterAsNewMaster(); } - private boolean checkIsDomainLocked(StoragePoolIsoMap domainMap) { - if (domainMap.getStatus() != null && domainMap.getStatus().isStorageDomainInProcess()) { - addInvalidSDStatusMessage(StorageDomainStatus.Locked); - return true; - } + protected StorageDomainValidator createStorageDomainValidator() { + return new StorageDomainValidator(getStorageDomain()); + } - return false; + protected StoragePoolValidator createStoragePoolValidator() { + return new StoragePoolValidator(getStoragePool()); } @Override @@ -68,16 +68,12 @@ // This check is done here to handle a race in which the returned domain from // getStorageDomain() is with LOCKED status. Having this domain with LOCKED status might // cause to the command to apply the compensation data and leave the domain as LOCKED. - if (checkIsDomainLocked(getStorageDomain().getStoragePoolIsoMapData())) { + if (!validate(createStorageDomainValidator().isInProcess())) { return false; } - List<StoragePoolIsoMap> poolDomains = DbFacade.getInstance() - .getStoragePoolIsoMapDao().getAllForStoragePool(getStoragePool().getId()); - for (StoragePoolIsoMap poolDomain : poolDomains) { - if (checkIsDomainLocked(poolDomain)) { - return false; - } + if (!validate(createStoragePoolValidator().isAnyDomainInProcess())) { + return false; } return initializeVds(); @@ -88,12 +84,6 @@ addCanDoActionMessage(VdcBllMessages.VAR__ACTION__RECONSTRUCT_MASTER); addCanDoActionMessage(VdcBllMessages.VAR__TYPE__STORAGE__DOMAIN); } - - protected void addInvalidSDStatusMessage(StorageDomainStatus status) { - addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_STATUS_ILLEGAL2); - addCanDoActionMessage(String.format("$status %1$s", status)); - } - protected boolean reconstructMaster() { proceedStorageDomainTreatmentByDomainType(true); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StoragePoolValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StoragePoolValidator.java index a48d560..424f8fa 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StoragePoolValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StoragePoolValidator.java @@ -3,13 +3,16 @@ import java.util.List; import org.ovirt.engine.core.bll.ValidationResult; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dao.StoragePoolIsoMapDAO; import org.ovirt.engine.core.dao.VdsGroupDAO; /** @@ -54,6 +57,10 @@ return DbFacade.getInstance().getVdsGroupDao(); } + protected StoragePoolIsoMapDAO getStoragePoolIsoMapDao() { + return DbFacade.getInstance().getStoragePoolIsoMapDao(); + } + public ValidationResult isNotLocalfsWithDefaultCluster() { if (storagePool.isLocal() && containsDefaultCluster()) { return new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_WITH_DEFAULT_VDS_GROUP_CANNOT_BE_LOCALFS); @@ -81,4 +88,16 @@ return ValidationResult.VALID; } + public ValidationResult isAnyDomainInProcess() { + List<StoragePoolIsoMap> poolIsoMaps = getStoragePoolIsoMapDao().getAllForStoragePool(storagePool.getId()); + + for (StoragePoolIsoMap domainIsoMap : poolIsoMaps) { + if (domainIsoMap.getStatus() != null && domainIsoMap.getStatus().isStorageDomainInProcess()) { + return new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_STATUS_ILLEGAL2, + String.format("$status %1$s", StorageDomainStatus.Locked)); + } + } + + return ValidationResult.VALID; + } } 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 4ee48f2..da2b227 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 @@ -13,6 +13,7 @@ import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainDynamic; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; +import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.VolumeFormat; @@ -246,4 +247,15 @@ return isDomainHasSpaceForRequest(Math.min(maxVirtualSize, sumOfActualSizes), false); } + + public ValidationResult isInProcess() { + StoragePoolIsoMap domainIsoMap = storageDomain.getStoragePoolIsoMapData(); + + if (domainIsoMap.getStatus() != null && domainIsoMap.getStatus().isStorageDomainInProcess()) { + new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_STATUS_ILLEGAL2, + String.format("$status %1$s", StorageDomainStatus.Locked)); + } + + return ValidationResult.VALID; + } } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommandTest.java index 8bd5a50..3594010 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommandTest.java @@ -1,33 +1,91 @@ package org.ovirt.engine.core.bll.storage; import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import java.util.Collections; import java.util.List; +import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import org.ovirt.engine.core.bll.CanDoActionTestUtils; +import org.ovirt.engine.core.bll.lock.InMemoryLockManager; import org.ovirt.engine.core.common.action.ReconstructMasterParameters; +import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; +import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; import org.ovirt.engine.core.common.errors.VdcBllMessages; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.StoragePoolIsoMapDAO; +import org.ovirt.engine.core.utils.MockEJBStrategyRule; +import org.ovirt.engine.core.utils.ejb.BeanType; +import org.ovirt.engine.core.utils.lock.LockManager; + +@RunWith(MockitoJUnitRunner.class) public class ReconstructMasterDomainCommandTest { - public ReconstructMasterDomainCommand<ReconstructMasterParameters> cmd = - new ReconstructMasterDomainCommand(new ReconstructMasterParameters()); + private LockManager lockManager = new InMemoryLockManager(); - private void testAddInvalidSDStatusMessage(StorageDomainStatus status) { - cmd.addInvalidSDStatusMessage(status); + @Rule + public MockEJBStrategyRule ejbRule = new MockEJBStrategyRule(BeanType.LOCK_MANAGER, lockManager); + + private ReconstructMasterDomainCommand<ReconstructMasterParameters> cmd; + + private Guid storagePoolId = Guid.newGuid(); + + private Guid storageDomainId = Guid.newGuid(); + + private StoragePoolIsoMap storagePoolIsoMap; + + @Before + public void setUp() { + cmd = spy(new ReconstructMasterDomainCommand<>(new ReconstructMasterParameters())); + + storagePoolIsoMap = new StoragePoolIsoMap(storageDomainId, storagePoolId, StorageDomainStatus.Active); + + StorageDomain storageDomain = new StorageDomain(); + storageDomain.setStoragePoolIsoMapData(storagePoolIsoMap); + + StoragePoolIsoMapDAO storagePoolIsoMapDao = mock(StoragePoolIsoMapDAO.class); + doReturn(Collections.singletonList(storagePoolIsoMap)).when(storagePoolIsoMapDao).getAllForStoragePool(storagePoolId); + + StoragePool storagePool = new StoragePool(); + storagePool.setId(storagePoolId); + + StoragePoolValidator storagePoolValidator = spy(new StoragePoolValidator(storagePool)); + doReturn(storagePoolIsoMapDao).when(storagePoolValidator).getStoragePoolIsoMapDao(); + + doReturn(storageDomain).when(cmd).getStorageDomain(); + doReturn(storagePool).when(cmd).getStoragePool(); + doReturn(storagePoolValidator).when(cmd).createStoragePoolValidator(); + + } + + public void testCanDoActionDomainInProcess(StorageDomainStatus status) { + storagePoolIsoMap.setStatus(status); + + CanDoActionTestUtils.runAndAssertCanDoActionFailure(cmd, + VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_STATUS_ILLEGAL2); + List<String> messages = cmd.getReturnValue().getCanDoActionMessages(); + assertEquals(messages.get(0), VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_STATUS_ILLEGAL2.toString()); assertEquals(messages.get(1), String.format("$status %1$s", status)); } @Test - public void testAddInvalidSDStatusMessageLocked() { - testAddInvalidSDStatusMessage(StorageDomainStatus.Locked); + public void testCanDoActionDomainLocked() { + testCanDoActionDomainInProcess(StorageDomainStatus.Locked); } - @Test - public void testAddInvalidSDStatusMessagePreparingForMaintenance() { - testAddInvalidSDStatusMessage(StorageDomainStatus.PreparingForMaintenance); + public void testCanDoActionDomainPreparingForMaintenance() { + testCanDoActionDomainInProcess(StorageDomainStatus.PreparingForMaintenance); } } -- To view, visit http://gerrit.ovirt.org/28624 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I1b8c4727336c5df28f06566f7cb05c1871fcb000 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Federico Simoncelli <fsimo...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches