package org.ovirt.engine.core.bll.network.dc;
import static org.junit.Assert.assertThat;
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.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.bll.network.dc.UpdateNetworkCommand.UpdateNetworkValidator;
import org.ovirt.engine.core.common.businessentities.network.Network;
import org.ovirt.engine.core.common.businessentities.network.ProviderNetwork;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.VmDao;
import org.ovirt.engine.core.dao.network.InterfaceDao;
@RunWith(MockitoJUnitRunner.class)
public class UpdateNetworkValidatorTest {
@Mock
private VmDao vmDao;
@Mock
private InterfaceDao interfaceDao;
private Network network;
private UpdateNetworkValidator validator;
@Before
public void setup() {
network = new Network();
validator = new UpdateNetworkValidator(network, vmDao, interfaceDao);
}
private Network createExternalNetwork() {
Network externalNetwork = new Network();
ProviderNetwork providerNetwork = createProviderNetwork(Guid.newGuid());
network.setProvidedBy(providerNetwork);
externalNetwork.setProvidedBy(providerNetwork);
return externalNetwork;
}
@Test
public void externalNetworkNameChanged() {
Network externalNetwork = createExternalNetwork();
externalNetwork.setName("aaa");
network.setName("bbb");
assertThat(validator.externalNetworkDetailsUnchanged(externalNetwork), isValid());
}
@Test
public void externalNetworkDescriptionChanged() {
Network externalNetwork = createExternalNetwork();
externalNetwork.setDescription("aaa");
network.setDescription("bbb");
assertThat(validator.externalNetworkDetailsUnchanged(externalNetwork), isValid());
}
private void assertThatExternalNetworkDetailsUnchangedFails(Network externalNetwork) {
assertThat(validator.externalNetworkDetailsUnchanged(externalNetwork),
failsWith(EngineMessage.ACTION_TYPE_FAILED_EXTERNAL_NETWORK_DETAILS_CANNOT_BE_EDITED));
}
@Test
public void externalNetworkMtuChanged() {
Network externalNetwork = createExternalNetwork();
externalNetwork.setMtu(0);
network.setMtu(1);
assertThatExternalNetworkDetailsUnchangedFails(externalNetwork);
}
@Test
public void externalNetworkStpChanged() {
Network externalNetwork = createExternalNetwork();
externalNetwork.setStp(true);
network.setStp(false);
assertThatExternalNetworkDetailsUnchangedFails(externalNetwork);
}
@Test
public void externalNetworkVlanIdChanged() {
Network externalNetwork = createExternalNetwork();
externalNetwork.setVlanId(0);
network.setVlanId(1);
assertThatExternalNetworkDetailsUnchangedFails(externalNetwork);
}
@Test
public void externalNetworkVmNetworkChanged() {
Network externalNetwork = createExternalNetwork();
externalNetwork.setVmNetwork(true);
network.setVmNetwork(false);
assertThatExternalNetworkDetailsUnchangedFails(externalNetwork);
}
@Test
public void externalNetworkProvidedByChanged() {
Network externalNetwork = createExternalNetwork();
externalNetwork.setProvidedBy(createProviderNetwork(Guid.newGuid()));
assertThatExternalNetworkDetailsUnchangedFails(externalNetwork);
}
@Test
public void internalNetworkProvidedByChanged() {
Network externalNetwork = createExternalNetwork();
network.setProvidedBy(null);
assertThatExternalNetworkDetailsUnchangedFails(externalNetwork);
}
private ProviderNetwork createProviderNetwork(Guid providerId) {
final ProviderNetwork result = new ProviderNetwork();
result.setProviderId(providerId);
return result;
}
}