package org.ovirt.engine.core.bll.provider;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.doReturn;
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.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties;
import org.ovirt.engine.core.common.businessentities.Provider;
import org.ovirt.engine.core.common.businessentities.Provider.AdditionalProperties;
import org.ovirt.engine.core.common.businessentities.ProviderType;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.dao.provider.ProviderDao;
import org.ovirt.engine.core.utils.ReplacementUtils;
@RunWith(MockitoJUnitRunner.class)
public class ProviderValidatorTest {
protected Provider<AdditionalProperties> provider = createProvider("provider");
@Mock
private ProviderDao providerDao;
@Spy
private ProviderValidator validator = new ProviderValidator(provider);
@Before
public void setup() {
doReturn(providerDao).when(validator).getProviderDao();
}
@Test
public void providerIsSet() throws Exception {
assertThat(validator.providerIsSet(), isValid());
}
@Test
public void providerIsNotSet() throws Exception {
validator = new ProviderValidator(null);
assertThat(validator.providerIsSet(), failsWith(EngineMessage.ACTION_TYPE_FAILED_PROVIDER_DOESNT_EXIST));
}
@Test
public void nameAvailable() throws Exception {
assertThat(validator.nameAvailable(), isValid());
}
@Test
@SuppressWarnings("unchecked")
public void nameNotAvailable() throws Exception {
Provider<AdditionalProperties> otherProvider = createProvider(provider.getName());
when((Provider<AdditionalProperties>) providerDao.getByName(provider.getName())).thenReturn(otherProvider);
assertThat(validator.nameAvailable(), failsWith(EngineMessage.ACTION_TYPE_FAILED_NAME_ALREADY_USED));
}
@Test
public void testValidateReadOnlyActions() {
String providerName = "providerName";
OpenstackNetworkProviderProperties additionalProperties = new OpenstackNetworkProviderProperties();
additionalProperties.setReadOnly(true);
Provider<AdditionalProperties> provider = new Provider<> ();
provider.setAdditionalProperties(additionalProperties);
provider.setType(ProviderType.EXTERNAL_NETWORK);
provider.setName(providerName);
ProviderValidator validator = new ProviderValidator(provider);
EngineMessage engineMessage = EngineMessage.ACTION_TYPE_FAILED_EXTERNAL_PROVIDER_IS_READ_ONLY;
assertThat(validator.validateReadOnlyActions(), failsWith(engineMessage,
ReplacementUtils.getVariableAssignmentString(engineMessage, providerName)));
additionalProperties.setReadOnly(false);
assertThat(validator.validateReadOnlyActions(), isValid());
provider.setType(ProviderType.OPENSTACK_NETWORK);
assertThat(validator.validateReadOnlyActions(), isValid());
}
@SuppressWarnings("unchecked")
private Provider<AdditionalProperties> createProvider(String name) {
Provider<AdditionalProperties> p = mock(Provider.class);
when(p.getName()).thenReturn(name);
return p;
}
}