package org.ovirt.engine.core.bll.network.host;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.spy;
import static org.ovirt.engine.core.bll.validator.ValidationResultMatchers.failsWith;
import static org.ovirt.engine.core.bll.validator.ValidationResultMatchers.isValid;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.hamcrest.CoreMatchers;
import org.junit.ClassRule;
import org.junit.Test;
import org.ovirt.engine.core.common.businessentities.BusinessEntityMap;
import org.ovirt.engine.core.common.businessentities.network.Network;
import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.utils.MockConfigRule;
import org.ovirt.engine.core.utils.NetworkUtils;
import org.ovirt.engine.core.utils.ReplacementUtils;
public class NetworkMtuValidatorTest {
@ClassRule
public static final MockConfigRule mcr = new MockConfigRule();
@Test
public void testNetworksOnNicMatchMtuWhenNoNetworksAreProvided() throws Exception {
Map<String, List<Network>> networksOnNics =
Collections.singletonMap("nicName", Collections.emptyList());
NetworkMtuValidator networkMtuValidator =
new NetworkMtuValidator(new BusinessEntityMap<>(Collections.emptyList()));
assertThat(networkMtuValidator.validateMtu(networksOnNics), isValid());
}
@Test
public void testNetworksOnNicMatchMtu() throws Exception {
List<Network> networks = Collections.singletonList(createNetwork(1, false, "netA"));
Map<String, List<Network>> networksOnNics = Collections.singletonMap("nicName", networks);
NetworkMtuValidator networkMtuValidator = new NetworkMtuValidator(new BusinessEntityMap<>(networks));
assertThat(networkMtuValidator.validateMtu(networksOnNics), isValid());
}
@Test
public void testNetworksOnNicMatchMtuAllDefault() throws Exception {
Network networkA = createNetwork(0, false, "netA");
networkA.setVlanId(11);
Network networkB = createNetwork(NetworkUtils.getDefaultMtu(), false, "netB");
List<Network> networks = Arrays.asList(networkA, networkB);
Map<String, List<Network>> networksOnNics = Collections.singletonMap("nicName", networks);
NetworkMtuValidator networkMtuValidator = new NetworkMtuValidator(new BusinessEntityMap<>(networks));
assertThat(networkMtuValidator.validateMtu(networksOnNics), isValid());
}
@Test
public void testNetworksOnNicMatchMtuNetworkMtuDoesNotMatch() throws Exception {
Network networkA = createNetwork(1, false, "netA");
networkA.setVlanId(11);
Network networkB = createNetwork(2, false, "netB");
List<Network> networks = Arrays.asList(networkA, networkB);
Map<String, List<Network>> networksOnNics = Collections.singletonMap("nicName", networks);
NetworkMtuValidator networkMtuValidator = new NetworkMtuValidator(new BusinessEntityMap<>(networks));
assertThat(networkMtuValidator.validateMtu(networksOnNics),
failsWith(EngineMessage.NETWORK_MTU_DIFFERENCES,
ReplacementUtils.replaceWith(NetworkMtuValidator.VAR_NETWORK_MTU_DIFFERENCES_LIST,
Arrays.asList("netA(1)", "netB(2)"))));
}
@Test
public void testGetNetworksOnNics() throws Exception {
Network networkA = createNetwork(1, true, "netA");
Network networkB = createNetwork(2, true, "netB");
Network networkC = createNetwork(2, true, "netC");
List<Network> networks = Arrays.asList(networkA, networkB, networkC);
NetworkMtuValidator networkMtuValidatorSpy = spy(new NetworkMtuValidator(new BusinessEntityMap<>(networks)));
String nicAName = "NicA";
String nicCName = "NicC";
NetworkAttachment networkAttachmentA = createNetworkAttachment(networkA, nicAName);
NetworkAttachment networkAttachmentB = createNetworkAttachment(networkB, nicAName);
NetworkAttachment networkAttachmentC = createNetworkAttachment(networkC, nicCName);
List<NetworkAttachment> networkAttachments =
Arrays.asList(networkAttachmentA, networkAttachmentB, networkAttachmentC);
Map<String, List<Network>> networksOnNics = networkMtuValidatorSpy.getNetworksOnNics(networkAttachments);
assertThat(networksOnNics.keySet().size(), is(2));
assertThat(networksOnNics.containsKey(nicAName), is(true));
assertThat(networksOnNics.containsKey(nicCName), is(true));
assertThat(networksOnNics.get(nicAName).size(), is(2));
assertThat(networksOnNics.get(nicAName), CoreMatchers.hasItems(networkA, networkB));
assertThat(networksOnNics.get(nicCName).size(), is(1));
assertThat(networksOnNics.get(nicCName), CoreMatchers.hasItems(networkC));
}
private NetworkAttachment createNetworkAttachment(Network networkA, String nicAName) {
NetworkAttachment networkAttachmentA = new NetworkAttachment();
networkAttachmentA.setId(Guid.newGuid());
networkAttachmentA.setNicName(nicAName);
networkAttachmentA.setNetworkId(networkA.getId());
return networkAttachmentA;
}
private Network createNetwork(int mtu, boolean isVmNetwork, String networkName) {
Network network = new Network();
network.setId(Guid.newGuid());
network.setName(networkName);
network.setMtu(mtu);
network.setVmNetwork(isVmNetwork);
return network;
}
}