Moti Asayag has uploaded a new change for review.

Change subject: engine: Add validation for host provider on update host
......................................................................

engine: Add validation for host provider on update host

When updating a host within a cluster, there is need to verify
the added host provider exists and that its type is Foreman.

Change-Id: I37cdc594c0c119aa5ebfd77e551a002c00eb2df9
Signed-off-by: Moti Asayag <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/UpdateHostValidator.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/UpdateHostValidatorTest.java
2 files changed, 96 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/54/37554/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/UpdateHostValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/UpdateHostValidator.java
index 26ef0bf..8d86ca7 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/UpdateHostValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/UpdateHostValidator.java
@@ -4,21 +4,27 @@
 import org.ovirt.engine.core.bll.ValidationResult;
 import org.ovirt.engine.core.bll.VdsHandler;
 import 
org.ovirt.engine.core.common.action.VdsOperationActionParameters.AuthenticationMethod;
+import org.ovirt.engine.core.common.businessentities.Provider;
+import org.ovirt.engine.core.common.businessentities.ProviderType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import org.ovirt.engine.core.common.businessentities.VDSType;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.dao.provider.ProviderDao;
 
 public class UpdateHostValidator extends HostValidator {
 
     private final VDS oldHost;
     private final boolean installHost;
+    private final ProviderDao providerDao;
+    private Provider<?> provider;
 
     public UpdateHostValidator(DbFacade dbFacade, VDS oldHost, VDS 
updatedHost, boolean installHost) {
         super(dbFacade, updatedHost);
         this.oldHost = oldHost;
         this.installHost = installHost;
+        providerDao = dbFacade.getProviderDao();
     }
 
     public ValidationResult hostExists() {
@@ -93,4 +99,26 @@
                         && oldHost.getStatus() != VDSStatus.Maintenance
                         && oldHost.getStatus() != VDSStatus.InstallingOS);
     }
+
+    public ValidationResult hostProviderExists() {
+        return 
ValidationResult.failWith(VdcBllMessages.ACTION_TYPE_FAILED_PROVIDER_DOESNT_EXIST)
+                .when(hostProviderConfigured() && getProvider() == null);
+    }
+
+    public ValidationResult hostProviderTypeMatches() {
+        return 
ValidationResult.failWith(VdcBllMessages.ACTION_TYPE_FAILED_PROVIDER_TYPE_MISMATCH)
+                .when(getProvider() != null && getProvider().getType() != 
ProviderType.FOREMAN);
+    }
+
+    private boolean hostProviderConfigured() {
+        return oldHost.getHostProviderId() == null && 
getHost().getHostProviderId() != null;
+    }
+
+    private Provider<?> getProvider() {
+        if (getHost().getHostProviderId() != null && provider == null) {
+            provider = providerDao.get(getHost().getHostProviderId());
+        }
+
+        return provider;
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/UpdateHostValidatorTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/UpdateHostValidatorTest.java
index 76c3a41..6112e2e 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/UpdateHostValidatorTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/UpdateHostValidatorTest.java
@@ -18,6 +18,8 @@
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 import 
org.ovirt.engine.core.common.action.VdsOperationActionParameters.AuthenticationMethod;
+import org.ovirt.engine.core.common.businessentities.Provider;
+import org.ovirt.engine.core.common.businessentities.ProviderType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import org.ovirt.engine.core.common.businessentities.VDSType;
@@ -27,6 +29,7 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dao.VdsDAO;
+import org.ovirt.engine.core.dao.provider.ProviderDao;
 import org.ovirt.engine.core.utils.MockConfigRule;
 import org.ovirt.engine.core.utils.RandomUtils;
 
@@ -39,6 +42,9 @@
 
     @Mock
     private VdsDAO hostDao;
+
+    @Mock
+    private ProviderDao providerDao;
 
     @Rule
     public MockConfigRule mockConfigRule = new MockConfigRule();
@@ -299,6 +305,68 @@
         assertThat(validator.changeProtocolAllowed(), 
failsWith(VdcBllMessages.VDS_STATUS_NOT_VALID_FOR_UPDATE));
     }
 
+    @SuppressWarnings("unchecked")
+    @Test
+    public void hostProviderExists() {
+        when(host.getHostProviderId()).thenReturn(Guid.newGuid());
+        
when(providerDao.get(any(Guid.class))).thenReturn(mock(Provider.class));
+        when(dbFacade.getProviderDao()).thenReturn(providerDao);
+        validator = new UpdateHostValidator(dbFacade, oldHost, host, false);
+
+        assertThat(validator.hostProviderExists(), isValid());
+    }
+
+    @Test
+    public void hostProviderDoesNotExist() {
+        when(host.getHostProviderId()).thenReturn(Guid.newGuid());
+        when(providerDao.get(any(Guid.class))).thenReturn(null);
+        when(dbFacade.getProviderDao()).thenReturn(providerDao);
+        validator = new UpdateHostValidator(dbFacade, oldHost, host, false);
+
+        assertThat(validator.hostProviderExists(), 
failsWith(VdcBllMessages.ACTION_TYPE_FAILED_PROVIDER_DOESNT_EXIST));
+    }
+
+    @Test
+    public void hostProviderDoesNotSet() {
+        assertThat(validator.hostProviderExists(), isValid());
+    }
+
+    @Test
+    public void hostProviderNotChanged() {
+        Guid providerId = Guid.newGuid();
+        when(host.getHostProviderId()).thenReturn(providerId);
+        when(oldHost.getHostProviderId()).thenReturn(providerId);
+
+        assertThat(validator.hostProviderExists(), isValid());
+    }
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @Test
+    public void hostProviderTypeMatches() {
+        when(host.getHostProviderId()).thenReturn(Guid.newGuid());
+        Provider provider = mock(Provider.class);
+        when(provider.getType()).thenReturn(ProviderType.FOREMAN);
+        when(providerDao.get(any(Guid.class))).thenReturn(provider);
+        when(dbFacade.getProviderDao()).thenReturn(providerDao);
+        validator = new UpdateHostValidator(dbFacade, oldHost, host, false);
+
+        assertThat(validator.hostProviderTypeMatches(), isValid());
+    }
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @Test
+    public void hostProviderTypeDoesNotMatch() {
+        when(host.getHostProviderId()).thenReturn(Guid.newGuid());
+        Provider provider = mock(Provider.class);
+        when(provider.getType()).thenReturn(ProviderType.OPENSTACK_IMAGE);
+        when(providerDao.get(any(Guid.class))).thenReturn(provider);
+        when(dbFacade.getProviderDao()).thenReturn(providerDao);
+        validator = new UpdateHostValidator(dbFacade, oldHost, host, false);
+
+        assertThat(validator.hostProviderTypeMatches(),
+                
failsWith(VdcBllMessages.ACTION_TYPE_FAILED_PROVIDER_TYPE_MISMATCH));
+    }
+
     private String generateRandomName() {
         return RandomUtils.instance().nextString(HOST_NAME_SIZE);
     }


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

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

Reply via email to