package org.ovirt.engine.core.bll.validator;
import static java.util.Collections.singletonList;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
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 java.util.function.Predicate;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.bll.ValidationResult;
import org.ovirt.engine.core.bll.network.macpool.MacPool;
import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
import org.ovirt.engine.core.common.errors.EngineMessage;
@RunWith(MockitoJUnitRunner.class)
public class VmNicMacsUtilsTest {
private static final Predicate<VmNetworkInterface> ALWAYS_FALSE = x -> false;
private static final Predicate<VmNetworkInterface> ALWAYS_TRUE = x -> true;
@Mock
private VmNetworkInterface vmNetworkInterfaceMock;
@Mock
private MacPool macPoolMock;
private VmNicMacsUtils underTest = new VmNicMacsUtils();
@Test
public void testReplaceInvalidEmptyStringMacAddressesWithNullDoNotTouchSetMacAddresses() {
when(vmNetworkInterfaceMock.getMacAddress()).thenReturn("00:0a:95:9d:68:16");
underTest.replaceInvalidEmptyStringMacAddressesWithNull(singletonList(vmNetworkInterfaceMock));
verify(vmNetworkInterfaceMock, never()).setMacAddress(Mockito.any());
}
@Test
public void testReplaceInvalidEmptyStringMacAddressesWithNullDoReplaceEmptyString() {
when(vmNetworkInterfaceMock.getMacAddress()).thenReturn("");
underTest.replaceInvalidEmptyStringMacAddressesWithNull(singletonList(vmNetworkInterfaceMock));
verify(vmNetworkInterfaceMock).setMacAddress(Mockito.eq(null));
}
@Test
public void testValidateThereIsEnoughOfFreeMacsNoAllocations() {
final ValidationResult actual =
underTest.validateThereIsEnoughOfFreeMacs(singletonList(vmNetworkInterfaceMock),
macPoolMock,
ALWAYS_FALSE);
assertThat(actual, isValid());
}
@Test
public void testValidateThereIsEnoughOfFreeMacsPositive() {
when(macPoolMock.getAvailableMacsCount()).thenReturn(1);
final ValidationResult actual =
underTest.validateThereIsEnoughOfFreeMacs(singletonList(vmNetworkInterfaceMock),
macPoolMock,
ALWAYS_TRUE);
assertThat(actual, isValid());
}
@Test
public void testValidateThereIsEnoughOfFreeMacsNegative() {
when(macPoolMock.getAvailableMacsCount()).thenReturn(0);
final ValidationResult actual =
underTest.validateThereIsEnoughOfFreeMacs(singletonList(vmNetworkInterfaceMock),
macPoolMock,
ALWAYS_TRUE);
assertThat(actual, failsWith(EngineMessage.MAC_POOL_NOT_ENOUGH_MAC_ADDRESSES));
}
}