package org.ovirt.engine.core.common.validation;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import org.junit.Before;
import org.junit.Test;
import org.ovirt.engine.core.common.businessentities.network.Ipv4BootProtocol;
import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
import org.ovirt.engine.core.common.utils.ValidationUtils;
import org.ovirt.engine.core.common.validation.annotation.NoRepetitiveStaticIpInList;
public class NoRepetitiveStaticIpInListConstraintTest {
private static final String IP_1 = "10.10.10.10";
private static final String IP_2 = "11.11.11.11";
private Validator validator;
@Before
public void initValidator() {
validator = ValidationUtils.getValidator();
}
@Test
public void twoNetworkInterfacesWithSameIp() {
List<VdsNetworkInterface> listOfInterfaces = new ArrayList<>();
listOfInterfaces.add(createVdsNetworkInterfaceWithStaticIp(IP_1));
listOfInterfaces.add(createVdsNetworkInterfaceWithStaticIp(IP_1));
validateAndAssertResult(listOfInterfaces, false);
}
@Test
public void twoNetworkInterfacesWithDifferentIp() {
List<VdsNetworkInterface> listOfInterfaces = new ArrayList<>();
listOfInterfaces.add(createVdsNetworkInterfaceWithStaticIp(IP_1));
listOfInterfaces.add(createVdsNetworkInterfaceWithStaticIp(IP_2));
validateAndAssertResult(listOfInterfaces, true);
}
@Test
public void twoNetworkInterfacesWithEmptyIp() {
List<VdsNetworkInterface> listOfInterfaces = new ArrayList<>();
listOfInterfaces.add(createVdsNetworkInterfaceWithStaticIp(""));
listOfInterfaces.add(createVdsNetworkInterfaceWithStaticIp(""));
validateAndAssertResult(listOfInterfaces, true);
}
@Test
public void twoNetworkInterfacesWithNullIp() {
List<VdsNetworkInterface> listOfInterfaces = new ArrayList<>();
listOfInterfaces.add(createVdsNetworkInterfaceWithStaticIp(null));
listOfInterfaces.add(createVdsNetworkInterfaceWithStaticIp(null));
validateAndAssertResult(listOfInterfaces, true);
}
private void validateAndAssertResult(List<VdsNetworkInterface> listOfInterfaces, boolean isValid) {
NoRepetitiveStaticIpInListContainer container = new NoRepetitiveStaticIpInListContainer(listOfInterfaces);
Set<ConstraintViolation<NoRepetitiveStaticIpInListContainer>> validate = validator.validate(container);
assertEquals(isValid, validate.isEmpty());
}
private static VdsNetworkInterface createVdsNetworkInterfaceWithStaticIp(String ip) {
VdsNetworkInterface networkInterface = new VdsNetworkInterface();
networkInterface.setIpv4Address(ip);
networkInterface.setIpv4BootProtocol(Ipv4BootProtocol.STATIC_IP);
return networkInterface;
}
private static class NoRepetitiveStaticIpInListContainer {
@NoRepetitiveStaticIpInList
private List<VdsNetworkInterface> value;
public NoRepetitiveStaticIpInListContainer(List<VdsNetworkInterface> value) {
this.value = value;
}
}
}