package org.ovirt.engine.core.bll.provider; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.ovirt.engine.core.bll.validator.ValidationResultMatchers.failsWith; import static org.ovirt.engine.core.bll.validator.ValidationResultMatchers.isValid; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.ovirt.engine.core.common.businessentities.OpenstackNetworkPluginType; import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties; import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties.AgentConfiguration; import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties.MessagingConfiguration; import org.ovirt.engine.core.common.businessentities.ProviderType; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.utils.RandomUtils; @RunWith(MockitoJUnitRunner.class) public class NetworkProviderValidatorTest extends ProviderValidatorTest { private static final ProviderType NON_NETWORK_PROVIDER_TYPE = ProviderType.FOREMAN; private NetworkProviderValidator validator = new NetworkProviderValidator(provider); @Mock private OpenstackNetworkProviderProperties properties; @Test public void validProviderType() { when(provider.getType()).thenReturn(ProviderType.OPENSTACK_NETWORK); assertThat(validator.providerTypeValid(), isValid()); } @Test public void invalidProviderType() { when(provider.getType()).thenReturn(NON_NETWORK_PROVIDER_TYPE); assertThat(validator.providerTypeValid(), failsWith(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_TYPE_MISMATCH)); } @Test public void networkMappingsProvidedByParameters() throws Exception { assertThat(validator.networkMappingsProvided(RandomUtils.instance().nextString(10)), isValid()); } @Test public void networkMappingsProvidedByProvider() throws Exception { mockProviderAdditionalProperties(); when(getProviderAgentConfiguration().getNetworkMappings()).thenReturn(RandomUtils.instance().nextString(10)); assertThat(validator.networkMappingsProvided(null), isValid()); } @Test public void missingNetworkMappings() throws Exception { assertThat(validator.networkMappingsProvided(null), failsWith(EngineMessage.ACTION_TYPE_FAILED_MISSING_NETWORK_MAPPINGS)); } @Test public void messagingBrokerProvided() throws Exception { mockMessagingBrokerAddress("1.1.1.1"); assertThat(validator.messagingBrokerProvided(), isValid()); } @Test public void missingAgentConfigurationForMessagingBrokerValidation() throws Exception { mockProviderAdditionalProperties(); assertThat(validator.messagingBrokerProvided(), failsWith(EngineMessage.ACTION_TYPE_FAILED_MISSING_MESSAGING_BROKER_PROPERTIES)); } @Test public void missingMessagingConfigurationForMessagingBrokerValidation() throws Exception { mockMessagingConfiguration(); assertThat(validator.messagingBrokerProvided(), failsWith(EngineMessage.ACTION_TYPE_FAILED_MISSING_MESSAGING_BROKER_PROPERTIES)); } private void mockProviderAdditionalProperties() { AgentConfiguration agentConfiguration = mock(AgentConfiguration.class); OpenstackNetworkProviderProperties properties = mock(OpenstackNetworkProviderProperties.class); when(properties.getAgentConfiguration()).thenReturn(agentConfiguration); when(provider.getAdditionalProperties()).thenReturn(properties); } private void mockMessagingConfiguration() { mockProviderAdditionalProperties(); MessagingConfiguration messagingConfiguration = mock(MessagingConfiguration.class); when(getProviderAgentConfiguration().getMessagingConfiguration()).thenReturn(messagingConfiguration); } private void mockMessagingBrokerAddress(String address) { mockMessagingConfiguration(); when(getProviderAgentConfiguration().getMessagingConfiguration().getAddress()).thenReturn(address); } private AgentConfiguration getProviderAgentConfiguration() { return ((OpenstackNetworkProviderProperties) provider.getAdditionalProperties()).getAgentConfiguration(); } @Test public void validPluginType() { when(provider.getAdditionalProperties()).thenReturn(properties); when(properties.getPluginType()).thenReturn(OpenstackNetworkPluginType.OPEN_VSWITCH.name()); assertThat(validator.validateAddProvider(), isValid()); } @Test public void invalidPluginType() { when(provider.getAdditionalProperties()).thenReturn(properties); assertThat(validator.validatePluginType(), failsWith(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_NO_PLUGIN_TYPE)); } @Test public void validAuthentication() { when(provider.isRequiringAuthentication()).thenReturn(true); when(provider.getUsername()).thenReturn("user"); when(provider.getPassword()).thenReturn("pass"); when(provider.getAuthUrl()).thenReturn("url"); when(provider.getAdditionalProperties()).thenReturn(properties); when(properties.getTenantName()).thenReturn("tenant"); assertThat(validator.validateAuthentication(), isValid()); } @Test public void validAuthenticationNotRequired() { when(provider.isRequiringAuthentication()).thenReturn(false); assertThat(validator.validateAuthentication(), isValid()); } @Test public void invalidAuthenticationUserName() { when(provider.isRequiringAuthentication()).thenReturn(true); assertThat(validator.validateAuthentication(), failsWith(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_NO_USER)); } @Test public void invalidAuthenticationPassword() { when(provider.isRequiringAuthentication()).thenReturn(true); when(provider.getUsername()).thenReturn("user"); assertThat(validator.validateAuthentication(), failsWith(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_NO_PASSWORD)); } @Test public void invalidAuthenticationUrl() { when(provider.isRequiringAuthentication()).thenReturn(true); when(provider.getUsername()).thenReturn("user"); when(provider.getPassword()).thenReturn("pass"); assertThat(validator.validateAuthentication(), failsWith(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_NO_AUTH_URL)); } @Test public void invalidAuthenticationTenant() { when(provider.isRequiringAuthentication()).thenReturn(true); when(provider.getUsername()).thenReturn("user"); when(provider.getPassword()).thenReturn("pass"); when(provider.getAuthUrl()).thenReturn("url"); when(provider.getAdditionalProperties()).thenReturn(properties); assertThat(validator.validateAuthentication(), failsWith(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_NO_TENANT_NAME)); } }