package org.ovirt.engine.core.bll.numa.vm;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.when;
import static org.ovirt.engine.core.bll.utils.NumaTestUtils.mockVdsNumaNodeDao;
import static org.ovirt.engine.core.bll.utils.NumaTestUtils.mockVmNumaNodeDao;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.ovirt.engine.core.bll.BaseCommandTest;
import org.ovirt.engine.core.common.action.VmNumaNodeOperationParameters;
import org.ovirt.engine.core.common.businessentities.MigrationSupport;
import org.ovirt.engine.core.common.businessentities.NumaTuneMode;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VdsNumaNode;
import org.ovirt.engine.core.common.businessentities.VmNumaNode;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.VdsNumaNodeDao;
import org.ovirt.engine.core.dao.VmDao;
import org.ovirt.engine.core.dao.VmNumaNodeDao;
import org.ovirt.engine.core.utils.MockConfigRule;
public abstract class AbstractVmNumaNodeCommandTestBase
<T extends AbstractVmNumaNodeCommand<VmNumaNodeOperationParameters>> extends BaseCommandTest {
@ClassRule
public static MockConfigRule mcr = new MockConfigRule();
@Mock
protected VmNumaNodeDao vmNumaNodeDao;
@Mock
protected VmDao vmDao;
@Mock
private VdsNumaNodeDao vdsNumaNodeDao;
@InjectMocks
private NumaValidator numaValidator;
protected VM vm;
protected List<VmNumaNode> existingNumaNodes;
protected List<VdsNumaNode> vdsNumaNodes;
protected List<VmNumaNode> paramNumaNodes = new ArrayList<>();
@Spy
@InjectMocks
protected T command = commandCreator().apply(new VmNumaNodeOperationParameters((VM) null, paramNumaNodes));
protected abstract Function<VmNumaNodeOperationParameters, T> commandCreator();
protected abstract void initNumaNodes();
@Before
public void setUp() throws Exception {
initNumaNodes();
mockVdsNumaNodeDao(vdsNumaNodeDao, vdsNumaNodes);
mockVmNumaNodeDao(vmNumaNodeDao, existingNumaNodes);
doReturn(numaValidator).when(command).getNumaValidator();
vm = new VM();
vm.setId(Guid.newGuid());
vm.setDedicatedVmForVdsList(Collections.singletonList(Guid.newGuid()));
vm.setNumOfSockets(1);
vm.setCpuPerSocket(4);
vm.setVmMemSizeMb(4000);
vm.setMigrationSupport(MigrationSupport.PINNED_TO_HOST);
vm.setNumaTuneMode(NumaTuneMode.INTERLEAVE);
when(vmDao.get(eq(vm.getId()))).thenReturn(vm);
}
@After
public void tearDown() {
paramNumaNodes.clear();
command.getParameters().setVm(null);
command.getParameters().setVmId(null);
}
protected void mockCommandWithVmFromParams() {
command.getParameters().setVm(vm);
command.init();
}
protected void mockCommandWithVmFromDb() {
command.setVmId(vm.getId());
command.getParameters().setVmId(vm.getId());
command.init();
}
}