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
