package org.ovirt.engine.core.bll.network.vm;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import org.mockito.Mock;
import org.ovirt.engine.core.bll.AbstractQueryTest;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VMStatus;
import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
import org.ovirt.engine.core.common.queries.GetVmsAndNetworkInterfacesByNetworkIdParameters;
import org.ovirt.engine.core.common.utils.PairQueryable;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.VmDao;
import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao;
/**
* A test for the {@link GetVmsAndNetworkInterfacesByNetworkIdQuery} class. It tests the flow (i.e., that the query
* delegates properly to the Dao}). The internal workings of the Dao are not tested.
*/
public class GetVmsAndNetworkInterfacesByNetworkIdQueryTest
extends AbstractQueryTest<GetVmsAndNetworkInterfacesByNetworkIdParameters,
GetVmsAndNetworkInterfacesByNetworkIdQuery<GetVmsAndNetworkInterfacesByNetworkIdParameters>> {
private Guid networkId = Guid.newGuid();
private Guid vmId = Guid.newGuid();
private VM vm = new VM();
private VmNetworkInterface vmNetworkInterface = new VmNetworkInterface();
@Mock
private VmDao vmDaoMock;
@Mock
private VmNetworkInterfaceDao vmNetworkInterfaceDaoMock;
@Test
public void testExecuteQueryCommand() {
// Set up the Daos
setupVmDao(Collections.singletonList(vm));
setupVmNetworkInterfaceDao(Collections.singletonList(vmNetworkInterface));
expectAndTestForVmAndInterface();
}
private void expectAndTestForVmAndInterface() {
// Set up the query parameters
when(params.getId()).thenReturn(networkId);
vm.setId(vmId);
vmNetworkInterface.setVmId(vmId);
PairQueryable<VmNetworkInterface, VM> vmInterfaceVmPair =
new PairQueryable<>(vmNetworkInterface, vm);
List<PairQueryable<VmNetworkInterface, VM>> expected = Collections.singletonList(vmInterfaceVmPair);
// Run the query
getQuery().executeQueryCommand();
// Assert the result
assertEquals("Wrong result returned", expected, getQuery().getQueryReturnValue().getReturnValue());
}
@Test
public void onlyVmsThatAreRunning() throws Exception {
expectAndTestForVmsThatAreInAState(true, VMStatus.Up, VMStatus.Down);
}
@Test
public void onlyVmsThatAreNotRunning() throws Exception {
expectAndTestForVmsThatAreInAState(false, VMStatus.Down, VMStatus.Up);
}
private void expectAndTestForVmsThatAreInAState(
boolean running, VMStatus expectedStatus, VMStatus unexpectedStatus) {
when(params.getRunningVms()).thenReturn(running);
vm.setStatus(expectedStatus);
VM downVm = new VM();
downVm.setId(Guid.newGuid());
downVm.setStatus(unexpectedStatus);
VmNetworkInterface downVmInterface = new VmNetworkInterface();
downVmInterface.setVmId(downVm.getId());
setupVmDao(Arrays.asList(vm, downVm));
setupVmNetworkInterfaceDao(Arrays.asList(vmNetworkInterface, downVmInterface));
expectAndTestForVmAndInterface();
}
private void setupVmDao(List<VM> expectedVms) {
when(vmDaoMock.getAllForNetwork(networkId)).thenReturn(expectedVms);
}
private void setupVmNetworkInterfaceDao(List<VmNetworkInterface> expectedVmNetworkInterfaces) {
when(vmNetworkInterfaceDaoMock.getAllForNetwork(networkId)).thenReturn(expectedVmNetworkInterfaces);
}
}