package org.ovirt.engine.core.bll.network.vm.mac; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.empty; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; 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.ReadMacPool; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; @RunWith(MockitoJUnitRunner.class) public class VmMacsInUseFinderTest { private static final String MAC1 = "mac1"; private static final String MAC2 = "mac2"; @Mock private ReadMacPool mockReadMacPool; @Mock private VM mockVm; private VmMacsInUseFinder underTest; @Before public void setUp() { underTest = new VmMacsInUseFinder(mockReadMacPool); when(mockVm.getInterfaces()).thenReturn(createVnics(MAC1, MAC2)); when(mockReadMacPool.isMacInUse(MAC1)).thenReturn(false); when(mockReadMacPool.isMacInUse(MAC2)).thenReturn(true); } @Test public void testFindProblematicMacs() { when(mockReadMacPool.isDuplicateMacAddressesAllowed()).thenReturn(false); final Collection<String> actual = underTest.findProblematicMacs(mockVm); assertThat(actual, contains(MAC2)); } @Test public void testFindProblematicMacsDuplicateMacAddressesAllowed() { when(mockReadMacPool.isDuplicateMacAddressesAllowed()).thenReturn(true); final Collection<String> actual = underTest.findProblematicMacs(mockVm); assertThat(actual, empty()); } private List<VmNetworkInterface> createVnics(String... macs) { return Arrays.stream(macs) .map(mac -> { final VmNetworkInterface vnic = new VmNetworkInterface(); vnic.setMacAddress(mac); return vnic; }) .collect(Collectors.toList()); } }