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

Reply via email to