package org.ovirt.engine.core.bll.numa.vm;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.ovirt.engine.core.bll.utils.NumaTestUtils.createVdsNumaNode;
import static org.ovirt.engine.core.bll.utils.NumaTestUtils.createVmNumaNode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.junit.Test;
import org.ovirt.engine.core.bll.ValidateTestUtils;
import org.ovirt.engine.core.common.action.VmNumaNodeOperationParameters;
import org.ovirt.engine.core.common.businessentities.VmNumaNode;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.compat.Guid;
public class SetVmNumaNodesCommandTest
extends AbstractVmNumaNodeCommandTestBase<SetVmNumaNodesCommand<VmNumaNodeOperationParameters>> {
private List<Guid> existingNumaNodeIds;
@Override
protected Function<VmNumaNodeOperationParameters, SetVmNumaNodesCommand<VmNumaNodeOperationParameters>>
commandCreator() {
return p -> new SetVmNumaNodesCommand<>(p, null);
}
protected void initNumaNodes() {
vdsNumaNodes = new ArrayList<>(Arrays.asList(createVdsNumaNode(1), createVdsNumaNode(2)));
existingNumaNodes = new ArrayList<>(Arrays.asList(createVmNumaNode(0), createVmNumaNode(1)));
existingNumaNodeIds = existingNumaNodes.stream().map(VmNumaNode::getId).collect(Collectors.toList());
paramNumaNodes.addAll(Arrays.asList(createVmNumaNode(0), createVmNumaNode(1)));
}
@Test
public void canSetNumaConfigurationWithVmFromParams() {
mockCommandWithVmFromParams();
command.executeCommand();
verify(vmNumaNodeDao).massRemoveNumaNodeByNumaNodeId(eq(existingNumaNodeIds));
verify(vmNumaNodeDao).massSaveNumaNode(eq(paramNumaNodes), any(Guid.class));
}
@Test
public void canSetNumaConfigurationWithVmFromDb() {
mockCommandWithVmFromDb();
command.executeCommand();
verify(vmNumaNodeDao).massRemoveNumaNodeByNumaNodeId(eq(existingNumaNodeIds));
verify(vmNumaNodeDao).massSaveNumaNode(eq(paramNumaNodes), any(Guid.class));
}
@Test
public void canSetNumaPinning() {
paramNumaNodes.clear();
paramNumaNodes.add(createVmNumaNode(1, vdsNumaNodes));
mockCommandWithVmFromParams();
command.executeCommand();
verify(vmNumaNodeDao).massRemoveNumaNodeByNumaNodeId(eq(existingNumaNodeIds));
verify(vmNumaNodeDao).massSaveNumaNode(eq(paramNumaNodes), any(Guid.class));
}
@Test
public void canDetectMissingVM() {
when(vmDao.get(eq(vm.getId()))).thenReturn(null);
mockCommandWithVmFromDb();
ValidateTestUtils.runAndAssertValidateFailure(command,
EngineMessage.ACTION_TYPE_FAILED_VM_NOT_FOUND);
}
@Test
public void shouldRunValidation() {
vdsNumaNodes.clear();
mockCommandWithVmFromDb();
ValidateTestUtils.runAndAssertValidateFailure(command,
EngineMessage.VM_NUMA_PINNED_VDS_NODE_EMPTY);
}
}