package org.ovirt.engine.core.bll.network.predicate;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.when;
import org.hamcrest.Matchers;
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.macpool.MacPool;
import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
@RunWith(MockitoJUnitRunner.class)
public class VnicWithBadMacPredicateTest {
private static final String MAC_ADDRESS = "mac address";
private VnicWithBadMacPredicate underTest;
@Mock
private MacPool mockMacPool;
private VmNetworkInterface vnic;
@Before
public void setUp() {
vnic = new VmNetworkInterface();
vnic.setMacAddress(MAC_ADDRESS);
underTest = new VnicWithBadMacPredicate(mockMacPool);
}
@Test
public void emptyMacIsNotBad() {
vnic.setMacAddress(null);
assertFalse(underTest.test(vnic));
}
@Test
public void validMac() {
doTest(false, false, true, false);
}
@Test
public void macInUse() {
doTest(false, true, true, true);
}
@Test
public void macInUseAndDuplicatesAllowed() {
doTest(true, true, true, false);
}
@Test
public void macOutOfRange() {
doTest(true, true, false, true);
}
private void doTest(boolean duplicatesAllowed, boolean macInUse, boolean macInRange, boolean result) {
prepareMacPool(duplicatesAllowed, macInUse, macInRange);
assertThat(underTest.test(vnic), Matchers.is(result));
}
private void prepareMacPool(boolean duplicatesAllowed, boolean macInUse, boolean macInRange) {
when(mockMacPool.isDuplicateMacAddressesAllowed()).thenReturn(duplicatesAllowed);
when(mockMacPool.isMacInUse(MAC_ADDRESS)).thenReturn(macInUse);
when(mockMacPool.isMacInRange(MAC_ADDRESS)).thenReturn(macInRange);
}
}