package org.ovirt.engine.core.vdsbroker;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import java.util.Collections;
import java.util.Map;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.network.InterfaceDao;
@RunWith(MockitoJUnitRunner.class)
public class CalculateBaseNicTest {
@Mock
private InterfaceDao interfaceDao;
@InjectMocks
private CalculateBaseNic calculateBaseNic;
private VdsNetworkInterface baseNic = createNic("baseNic");
private VdsNetworkInterface vlanNic = createVlanNic(baseNic);
@Test(expected = NullPointerException.class)
public void testGetBaseNicWithNullNic() throws Exception {
calculateBaseNic.getBaseNic(null);
}
@Test
public void testGetBaseNicBaseNicIsSimplyReturned() throws Exception {
verifyNoMoreInteractions(interfaceDao);
assertThat(calculateBaseNic.getBaseNic(baseNic, null), is(baseNic));
}
@Test
public void testGetBaseNicVerifyDelegation() throws Exception {
CalculateBaseNic spy = spy(calculateBaseNic);
spy.getBaseNic(baseNic);
verify(spy).getBaseNic(any(VdsNetworkInterface.class), isNull());
}
@Test
public void testGetBaseNicWhenCacheIsNotProvided() throws Exception {
when(interfaceDao.get(baseNic.getVdsId(), baseNic.getName())).thenReturn(baseNic);
assertThat(calculateBaseNic.getBaseNic(vlanNic, null), is(baseNic));
verify(interfaceDao).get(eq(baseNic.getVdsId()), eq(baseNic.getName()));
verifyNoMoreInteractions(interfaceDao);
}
@Test
public void testGetBaseNicUsingCacheNotHavingRequiredRecord() throws Exception {
when(interfaceDao.get(baseNic.getVdsId(), baseNic.getName())).thenReturn(baseNic);
Map<String, VdsNetworkInterface> cachedExistingInterfaces =
Collections.singletonMap("unrelatedNicName", new VdsNetworkInterface());
assertThat(calculateBaseNic.getBaseNic(vlanNic, cachedExistingInterfaces), is(baseNic));
verify(interfaceDao).get(eq(baseNic.getVdsId()), eq(baseNic.getName()));
verifyNoMoreInteractions(interfaceDao);
}
@Test
public void testGetBaseNicUsingCache() throws Exception {
Map<String, VdsNetworkInterface> cachedExistingInterfaces =
Collections.singletonMap(baseNic.getName(), baseNic);
assertThat(calculateBaseNic.getBaseNic(vlanNic, cachedExistingInterfaces), is(baseNic));
verifyNoMoreInteractions(interfaceDao);
}
private VdsNetworkInterface createVlanNic(VdsNetworkInterface baseNic) {
VdsNetworkInterface vlanNic = createNic("vlanNic");
vlanNic.setBaseInterface(baseNic.getName());
vlanNic.setVlanId(100);
vlanNic.setVdsId(baseNic.getVdsId());
return vlanNic;
}
private VdsNetworkInterface createNic(String nicName) {
VdsNetworkInterface nic = new VdsNetworkInterface();
nic.setName(nicName);
nic.setVdsId(Guid.newGuid());
return nic;
}
}