package org.ovirt.engine.core.bll.validator.network;
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 static org.ovirt.engine.core.utils.ReplacementUtils.createSetVariableString;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import org.junit.Before;
import org.junit.Test;
import org.ovirt.engine.core.common.businessentities.network.IPv4Address;
import org.ovirt.engine.core.common.businessentities.network.IpConfiguration;
import org.ovirt.engine.core.common.businessentities.network.IpV6Address;
import org.ovirt.engine.core.common.businessentities.network.Ipv4BootProtocol;
import org.ovirt.engine.core.common.businessentities.network.Ipv6BootProtocol;
import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.utils.ReplacementUtils;
public class NetworkAttachmentIpConfigurationValidatorTest {
private static final String NETWORK_NAME = "NETWORK_NAME";
private static final String INTERFACE_NAME = "INTERFACE_NAME";
private static final String ADDRESS = "ADDRESS";
private static final String NETMASK = "NETMASK";
private NetworkAttachmentIpConfigurationValidator underTest = new NetworkAttachmentIpConfigurationValidator();
private List<NetworkAttachment> networkAttachments;
private Random random = new Random();
@Before
public void init() {
NetworkAttachment networkAttachment = new NetworkAttachment();
networkAttachment.setNetworkName(NETWORK_NAME);
networkAttachment.setNicName(INTERFACE_NAME);
networkAttachments = new ArrayList<>();
networkAttachments.add(networkAttachment);
}
@Test
public void checkNullIpConfiguration() {
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments),
failsWith(EngineMessage.NETWORK_ATTACHMENT_MISSING_IP_CONFIGURATION,
ReplacementUtils.createSetVariableString(
NetworkAttachmentIpConfigurationValidator.VAR_NETWORK_NAME, NETWORK_NAME),
createSetVariableString(NetworkAttachmentIpConfigurationValidator.VAR_INTERFACE_NAME,
INTERFACE_NAME)));
}
@Test
public void checkMissingBothAddresses() {
initIpConfiguration();
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments),
failsWith(EngineMessage.NETWORK_ATTACHMENT_MISSING_IP_CONFIGURATION,
ReplacementUtils.createSetVariableString(
NetworkAttachmentIpConfigurationValidator.VAR_NETWORK_NAME, NETWORK_NAME),
createSetVariableString(NetworkAttachmentIpConfigurationValidator.VAR_INTERFACE_NAME,
INTERFACE_NAME)));
}
@Test
public void checkMissingPrimaryIpv4Address() {
initIpConfiguration();
initIpv6ConfigurationDetails(Ipv6BootProtocol.AUTOCONF, false, false);
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments), isValid());
}
@Test
public void checkMissingPrimaryIpv6Address() {
initIpConfiguration();
initIpv4ConfigurationDetails(Ipv4BootProtocol.DHCP, false, false);
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments), isValid());
}
@Test
public void checkMissingV4BootProtocol() {
initIpv4ConfigurationWithPrimaryAddress();
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments),
failsWith(EngineMessage.NETWORK_ATTACHMENT_IP_CONFIGURATION_MISSING_BOOT_PROTOCOL,
ReplacementUtils.createSetVariableString(
NetworkAttachmentIpConfigurationValidator.VAR_NETWORK_NAME, NETWORK_NAME),
createSetVariableString(NetworkAttachmentIpConfigurationValidator.VAR_INTERFACE_NAME,
INTERFACE_NAME)));
}
@Test
public void checkMissingV6BootProtocol() {
initIpv6ConfigurationWithPrimaryAddress();
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments),
failsWith(EngineMessage.NETWORK_ATTACHMENT_IP_CONFIGURATION_MISSING_BOOT_PROTOCOL,
ReplacementUtils.createSetVariableString(
NetworkAttachmentIpConfigurationValidator.VAR_NETWORK_NAME, NETWORK_NAME),
createSetVariableString(NetworkAttachmentIpConfigurationValidator.VAR_INTERFACE_NAME,
INTERFACE_NAME)));
}
@Test
public void checkIncompatibleIpv4AddressDetailsBootProtocolNone() {
checkIncompatibleIpv4AddressDetailsBootProtocol(Ipv4BootProtocol.NONE);
}
@Test
public void checkIncompatibleIpv6AddressDetailsBootProtocolNone() {
checkIncompatibleIpv6AddressDetailsBootProtocol(Ipv6BootProtocol.NONE);
}
@Test
public void checkIncompatibleIpv4AddressDetailsBootProtocolDhcp() {
checkIncompatibleIpv4AddressDetailsBootProtocol(Ipv4BootProtocol.DHCP);
}
@Test
public void checkIncompatibleIpv6AddressDetailsBootProtocolDhcp() {
checkIncompatibleIpv6AddressDetailsBootProtocol(Ipv6BootProtocol.DHCP);
}
@Test
public void checkMissingIpv4AddressDetailsBootProtocolStatic() {
final boolean initAddress = random.nextBoolean();
initIpv4ConfigurationDetails(Ipv4BootProtocol.STATIC_IP, initAddress, !initAddress);
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments),
failsWith(
EngineMessage.NETWORK_ATTACHMENT_IP_CONFIGURATION_STATIC_BOOT_PROTOCOL_MISSING_IP_ADDRESS_DETAILS,
ReplacementUtils.createSetVariableString(
NetworkAttachmentIpConfigurationValidator.VAR_NETWORK_NAME, NETWORK_NAME),
createSetVariableString(NetworkAttachmentIpConfigurationValidator.VAR_INTERFACE_NAME,
INTERFACE_NAME)));
}
@Test
public void checkMissingIpv6AddressDetailsBootProtocolStatic() {
final boolean initAddress = random.nextBoolean();
initIpv6ConfigurationDetails(Ipv6BootProtocol.STATIC_IP, initAddress, !initAddress);
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments),
failsWith(
EngineMessage.NETWORK_ATTACHMENT_IP_CONFIGURATION_STATIC_BOOT_PROTOCOL_MISSING_IP_ADDRESS_DETAILS,
ReplacementUtils.createSetVariableString(
NetworkAttachmentIpConfigurationValidator.VAR_NETWORK_NAME, NETWORK_NAME),
createSetVariableString(NetworkAttachmentIpConfigurationValidator.VAR_INTERFACE_NAME,
INTERFACE_NAME)));
}
@Test
public void checkValidIpv4ConfigurationNoneBootProtocol() {
initIpv4ConfigurationDetails(Ipv4BootProtocol.NONE, false, false);
initIpv6Address();
setIpv6BootProtocol(Ipv6BootProtocol.AUTOCONF);
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments), isValid());
}
@Test
public void checkValidIpv6ConfigurationNoneBootProtocol() {
initIpv6ConfigurationDetails(Ipv6BootProtocol.NONE, false, false);
initIpv4Address();
setIpv4BootProtocol(Ipv4BootProtocol.DHCP);
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments), isValid());
}
@Test
public void checkValidIpv4ConfigurationDHCPBootProtocol() {
initIpv4ConfigurationDetails(Ipv4BootProtocol.DHCP, false, false);
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments), isValid());
}
@Test
public void checkValidIpv6ConfigurationDHCPBootProtocol() {
initIpv6ConfigurationDetails(Ipv6BootProtocol.AUTOCONF, false, false);
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments), isValid());
}
@Test
public void checkValidIpv4ConfigurationStaticBootProtocol() {
initIpv4ConfigurationDetails(Ipv4BootProtocol.STATIC_IP, true, true);
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments), isValid());
}
@Test
public void checkValidIpv6ConfigurationStaticBootProtocol() {
initIpv6ConfigurationDetails(Ipv6BootProtocol.STATIC_IP, true, true);
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments), isValid());
}
private void checkIncompatibleIpv4AddressDetailsBootProtocol(Ipv4BootProtocol ipv4BootProtocol) {
final boolean initAddress = random.nextBoolean();
initIpv4ConfigurationDetails(ipv4BootProtocol, initAddress, !initAddress);
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments),
failsWith(
EngineMessage.NETWORK_ATTACHMENT_IP_CONFIGURATION_INCOMPATIBLE_BOOT_PROTOCOL_AND_IP_ADDRESS_DETAILS,
ReplacementUtils.createSetVariableString(
NetworkAttachmentIpConfigurationValidator.VAR_NETWORK_NAME, NETWORK_NAME),
createSetVariableString(NetworkAttachmentIpConfigurationValidator.VAR_INTERFACE_NAME,
INTERFACE_NAME),
createSetVariableString(NetworkAttachmentIpConfigurationValidator.VAR_BOOT_PROTOCOL,
ipv4BootProtocol.getDisplayName())));
}
private void checkIncompatibleIpv6AddressDetailsBootProtocol(Ipv6BootProtocol ipv6BootProtocol) {
final boolean initAddress = random.nextBoolean();
initIpv6ConfigurationDetails(ipv6BootProtocol, initAddress, !initAddress);
assertThat(underTest.validateNetworkAttachmentIpConfiguration(networkAttachments),
failsWith(
EngineMessage.NETWORK_ATTACHMENT_IP_CONFIGURATION_INCOMPATIBLE_BOOT_PROTOCOL_AND_IP_ADDRESS_DETAILS,
ReplacementUtils.createSetVariableString(
NetworkAttachmentIpConfigurationValidator.VAR_NETWORK_NAME, NETWORK_NAME),
createSetVariableString(NetworkAttachmentIpConfigurationValidator.VAR_INTERFACE_NAME,
INTERFACE_NAME),
createSetVariableString(NetworkAttachmentIpConfigurationValidator.VAR_BOOT_PROTOCOL,
ipv6BootProtocol.getDisplayName())));
}
private void initIpv4ConfigurationDetails(Ipv4BootProtocol ipv4BootProtocol,
boolean initAddress,
boolean initNetmask) {
initIpv4ConfigurationWithBootProtocol(ipv4BootProtocol);
if (initAddress) {
initIpv4ConfigurationAddress();
}
if (initNetmask) {
initIpv4ConfigurationNetmask();
}
}
private void initIpv6ConfigurationDetails(Ipv6BootProtocol ipv6BootProtocol,
boolean initAddress,
boolean initNetmask) {
initIpv6ConfigurationWithBootProtocol(ipv6BootProtocol);
if (initAddress) {
initIpv6ConfigurationAddress();
}
if (initNetmask) {
initIpv6ConfigurationPrefix();
}
}
private NetworkAttachment getTestedNetworkAttachment() {
return networkAttachments.get(0);
}
private void initIpConfiguration() {
IpConfiguration ipConfiguration = new IpConfiguration();
getTestedNetworkAttachment().setIpConfiguration(ipConfiguration);
}
private void initIpv4ConfigurationWithPrimaryAddress() {
initIpConfiguration();
initIpv4Address();
}
private void initIpv6ConfigurationWithPrimaryAddress() {
initIpConfiguration();
initIpv6Address();
}
private void initIpv4ConfigurationWithBootProtocol(Ipv4BootProtocol ipv4BootProtocol) {
initIpv4ConfigurationWithPrimaryAddress();
setIpv4BootProtocol(ipv4BootProtocol);
}
private void setIpv4BootProtocol(Ipv4BootProtocol ipv4BootProtocol) {
getTestedNetworkAttachment().getIpConfiguration().getIpv4PrimaryAddress().setBootProtocol(ipv4BootProtocol);
}
private void initIpv6ConfigurationWithBootProtocol(Ipv6BootProtocol ipv6BootProtocol) {
initIpv6ConfigurationWithPrimaryAddress();
setIpv6BootProtocol(ipv6BootProtocol);
}
private void setIpv6BootProtocol(Ipv6BootProtocol ipv6BootProtocol) {
getTestedNetworkAttachment().getIpConfiguration().getIpv6PrimaryAddress().setBootProtocol(ipv6BootProtocol);
}
private void initIpv4ConfigurationAddress() {
getTestedNetworkAttachment().getIpConfiguration().getIpv4PrimaryAddress().setAddress(ADDRESS);
}
private void initIpv4ConfigurationNetmask() {
getTestedNetworkAttachment().getIpConfiguration().getIpv4PrimaryAddress().setNetmask(NETMASK);
}
private void initIpv6ConfigurationAddress() {
getTestedNetworkAttachment().getIpConfiguration().getIpv6PrimaryAddress().setAddress(ADDRESS);
}
private void initIpv6ConfigurationPrefix() {
getTestedNetworkAttachment().getIpConfiguration().getIpv6PrimaryAddress().setPrefix(666);
}
private void initIpv4Address() {
getTestedNetworkAttachment().getIpConfiguration().setIPv4Addresses(Collections.singletonList(new IPv4Address()));
}
private void initIpv6Address() {
getTestedNetworkAttachment().getIpConfiguration().setIpV6Addresses(Collections.singletonList(new IpV6Address()));
}
}