package org.ovirt.engine.core.bll.network; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.Collections; import java.util.List; 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.VM; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dao.VmDao; import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao; import org.ovirt.engine.core.dao.network.VmNicDao; import org.ovirt.engine.core.utils.RandomUtils; @RunWith(MockitoJUnitRunner.class) public class FindActiveVmsUsingNetworkTest { private static final String NETWORK_NAME = "networkName"; private static final String VM_NAME = "vmName"; private static final Version VERSION_3_2 = new Version(3, 2); private static final int OS_ID = 0; @Mock private VmNetworkInterfaceDao vmNetworkInterfaceDao; @Mock private VmNicDao vmNicDao; @Mock private VmDao vmDao; @InjectMocks private FindActiveVmsUsingNetwork findActiveVmsUsingNetwork; @Test public void findActiveVmsUsingNetworks() { mockDaos(true); List<String> vmNames = findActiveVmsUsingNetwork.findNamesOfActiveVmsUsingNetworks(Guid.newGuid(), NETWORK_NAME); assertTrue(vmNames.contains(VM_NAME)); } @Test public void findActiveVmsUsingNetworksOnUnpluggedVnic() { mockDaos(false); List<String> vmNames = findActiveVmsUsingNetwork.findNamesOfActiveVmsUsingNetworks(Guid.newGuid(), NETWORK_NAME); assertFalse(vmNames.contains(VM_NAME)); } @Test public void findNoneOfActiveVmsUsingNetworks() { mockDaos(true); List<String> vmNames = findActiveVmsUsingNetwork.findNamesOfActiveVmsUsingNetworks(Guid.newGuid(), NETWORK_NAME + "1"); assertTrue(vmNames.isEmpty()); } private void mockDaos(boolean pluggedInterface) { VM vm = createVM(VM_NAME, NETWORK_NAME, pluggedInterface); when(vmDao.getAllRunningForVds(any(Guid.class))).thenReturn(Collections.singletonList(vm)); when(vmNetworkInterfaceDao.getAllForVm(vm.getId())).thenReturn(vm.getInterfaces()); } /** * Creates a VM instance with a given name, having an interface which uses a given network. * * @param vmName * The VM name to be set * @param networkName * The network name to be set for the VM interface * @param pluggedInterface * whether the VM interface plugged or not * @return the VM instance with the appropriate data. */ private static VM createVM(String vmName, String networkName, boolean pluggedInterface) { VM vm = new VM(); vm.setId(Guid.newGuid()); vm.setName(vmName); VmNetworkInterface vmIface = createNewViewableInterface(pluggedInterface); vmIface.setVmId(vm.getId()); vmIface.setNetworkName(networkName); vm.getInterfaces().add(vmIface); return vm; } private static VmNetworkInterface createNewViewableInterface(boolean plugged) { VmNetworkInterface iface = new VmNetworkInterface(); iface.setId(Guid.newGuid()); iface.setMacAddress(RandomUtils.instance().nextString(10)); iface.setPlugged(plugged); return iface; } }