package org.ovirt.engine.core.bll.exportimport;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.junit.Before;
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.ExternalVnicProfileMapping;
import org.ovirt.engine.core.common.businessentities.network.Network;
import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
import org.ovirt.engine.core.common.businessentities.network.VnicProfile;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.network.NetworkDao;
import org.ovirt.engine.core.dao.network.VnicProfileDao;
@RunWith(MockitoJUnitRunner.class)
public class ImportedNetworkInfoUpdaterTest {
private static final String EXTERNAL_NETWORK_NAME = "external network name";
private static final String TARGET_NETWORK_NAME = "target network name";
private static final String VNIC_PROFILE_NAME = "vnic profile name";
private static final Guid VNIC_PROFILE_ID = Guid.newGuid();
private static final Guid TARGET_NETWORK_ID = Guid.newGuid();
@InjectMocks
private ImportedNetworkInfoUpdater underTest;
@Mock
private NetworkDao mockNetworkDao;
@Mock
private VnicProfileDao mockVnicProfileDao;
@Mock
private ExternalVnicProfileMappingFinder mockExternalVnicProfileMappingFinder;
@Mock
private VmNetworkInterface mockVmNetworkInterface;
private List<ExternalVnicProfileMapping> externalVnicProfileMappings;
private Network targetNetwork;
@Before
public void setUp() {
externalVnicProfileMappings = new ArrayList<>();
VnicProfile vnicProfile = new VnicProfile();
vnicProfile.setId(VNIC_PROFILE_ID);
vnicProfile.setName(VNIC_PROFILE_NAME);
vnicProfile.setNetworkId(TARGET_NETWORK_ID);
targetNetwork = new Network();
targetNetwork.setName(TARGET_NETWORK_NAME);
when(mockVmNetworkInterface.getNetworkName()).thenReturn(EXTERNAL_NETWORK_NAME);
when(mockVmNetworkInterface.getVnicProfileName()).thenReturn(VNIC_PROFILE_NAME);
when(mockVnicProfileDao.get(VNIC_PROFILE_ID)).thenReturn(vnicProfile);
}
@Test
public void testUpdateNetworkInfoMappingNotFound() {
when(mockExternalVnicProfileMappingFinder.findMappingEntry(
EXTERNAL_NETWORK_NAME,
VNIC_PROFILE_NAME,
externalVnicProfileMappings))
.thenReturn(Optional.empty());
underTest.updateNetworkInfo(mockVmNetworkInterface, externalVnicProfileMappings);
verify(mockExternalVnicProfileMappingFinder).findMappingEntry(EXTERNAL_NETWORK_NAME,
VNIC_PROFILE_NAME,
externalVnicProfileMappings);
verify(mockVmNetworkInterface, never()).setVnicProfileId(any());
verify(mockVmNetworkInterface, never()).setNetworkName(any());
verify(mockVmNetworkInterface, never()).setVnicProfileName(any());
}
@Test
public void testUpdateNetworkInfo() {
when(mockExternalVnicProfileMappingFinder.findMappingEntry(
EXTERNAL_NETWORK_NAME,
VNIC_PROFILE_NAME,
externalVnicProfileMappings))
.thenReturn(Optional.of(createMappingEntry(VNIC_PROFILE_ID)));
when(mockNetworkDao.get(TARGET_NETWORK_ID)).thenReturn(targetNetwork);
underTest.updateNetworkInfo(mockVmNetworkInterface, externalVnicProfileMappings);
verify(mockExternalVnicProfileMappingFinder).findMappingEntry(EXTERNAL_NETWORK_NAME,
VNIC_PROFILE_NAME,
externalVnicProfileMappings);
verify(mockVmNetworkInterface).setVnicProfileId(VNIC_PROFILE_ID);
verify(mockVmNetworkInterface).setVnicProfileName(VNIC_PROFILE_NAME);
verify(mockVmNetworkInterface).setNetworkName(TARGET_NETWORK_NAME);
}
@Test
public void testUpdateNetworkInfoMappedToEmpty() {
when(mockExternalVnicProfileMappingFinder.findMappingEntry(
EXTERNAL_NETWORK_NAME,
VNIC_PROFILE_NAME,
externalVnicProfileMappings))
.thenReturn(Optional.of(createMappingEntry(null)));
underTest.updateNetworkInfo(mockVmNetworkInterface, externalVnicProfileMappings);
verify(mockExternalVnicProfileMappingFinder).findMappingEntry(EXTERNAL_NETWORK_NAME,
VNIC_PROFILE_NAME,
externalVnicProfileMappings);
verify(mockVmNetworkInterface).setVnicProfileId(null);
verify(mockVmNetworkInterface).setVnicProfileName(null);
verify(mockVmNetworkInterface).setNetworkName(null);
}
private ExternalVnicProfileMapping createMappingEntry(Guid vnicProfileId) {
return new ExternalVnicProfileMapping(null, null, vnicProfileId);
}
}