package org.ovirt.engine.core.dao; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Test; import org.ovirt.engine.core.common.businessentities.NumaNodeStatistics; import org.ovirt.engine.core.common.businessentities.VmNumaNode; import org.ovirt.engine.core.compat.Guid; public class VmNumaNodeDaoTest extends BaseDaoTestCase { private static final Guid EXISTING_VM_ID = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4354"); private static final Guid ANOTHER_EXISTING_VM_ID = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4355"); private VmNumaNodeDao vmNumaNodeDao; private NumaNodeStatistics newNodeStatistics; @Override public void setUp() throws Exception { super.setUp(); vmNumaNodeDao = dbFacade.getVmNumaNodeDao(); newNodeStatistics = new NumaNodeStatistics(); newNodeStatistics.setCpuUsagePercent(20); newNodeStatistics.setMemUsagePercent(50); } @Test public void testGetAllVmNumaNodeByVmId() { List<VmNumaNode> result = vmNumaNodeDao.getAllVmNumaNodeByVmId(EXISTING_VM_ID); assertNotNull(result); assertEquals(2, result.size()); Guid vmNumaNode1 = new Guid("3c2b81e6-5080-4ad1-86a1-cf513b15b517"); Guid vmNumaNode2 = new Guid("3c2b81e6-5080-4ad1-86a1-cf513b15b518"); Map<Guid, VmNumaNode> nodes = new HashMap<>(2); nodes.put(result.get(0).getId(), result.get(0)); nodes.put(result.get(1).getId(), result.get(1)); assertTrue(nodes.containsKey(vmNumaNode1)); assertTrue(nodes.containsKey(vmNumaNode2)); assertEquals(2, nodes.get(vmNumaNode1).getVdsNumaNodeList().size()); assertTrue(nodes.get(vmNumaNode1).getVdsNumaNodeList().contains(0)); assertTrue(nodes.get(vmNumaNode1).getVdsNumaNodeList().contains(1)); assertEquals(0, nodes.get(vmNumaNode2).getVdsNumaNodeList().size()); } @Test public void testGetVmNumaNodeInfoByBdsGroupId() { Guid vdsGroupId = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1"); Guid vmId = Guid.createGuidFromString("77296e00-0cad-4e5a-9299-008a7b6f4354"); Map<Guid, List<VmNumaNode>> result = vmNumaNodeDao.getVmNumaNodeInfoByClusterId(vdsGroupId); assertNotNull(result); assertEquals(1, result.size()); assertEquals(2, result.get(vmId).size()); } @Test public void testMassSaveNumaNode() { List<VmNumaNode> result = vmNumaNodeDao.getAllVmNumaNodeByVmId(ANOTHER_EXISTING_VM_ID); assertNotNull(result); assertEquals(0, result.size()); Guid vmNumaNode1 = Guid.newGuid(); Guid vmNumaNode2 = Guid.newGuid(); List<VmNumaNode> newVmNode = new ArrayList<>(); VmNumaNode newVmNumaNode = new VmNumaNode(); newVmNumaNode.setCpuIds(generateCpuList(0, 4)); newVmNumaNode.setId(vmNumaNode1); newVmNumaNode.setIndex(0); newVmNumaNode.getVdsNumaNodeList().add(0); newVmNode.add(newVmNumaNode); newVmNumaNode = new VmNumaNode(); newVmNumaNode.setCpuIds(generateCpuList(4, 4)); newVmNumaNode.setId(vmNumaNode2); newVmNumaNode.setIndex(1); newVmNumaNode.getVdsNumaNodeList().add(1); newVmNode.add(newVmNumaNode); vmNumaNodeDao.massSaveNumaNode(newVmNode, ANOTHER_EXISTING_VM_ID); result = vmNumaNodeDao.getAllVmNumaNodeByVmId(ANOTHER_EXISTING_VM_ID); assertNotNull(result); assertEquals(2, result.size()); Map<Guid, VmNumaNode> nodes = new HashMap<>(2); nodes.put(result.get(0).getId(), result.get(0)); nodes.put(result.get(1).getId(), result.get(1)); assertTrue(nodes.containsKey(vmNumaNode1)); assertTrue(nodes.containsKey(vmNumaNode2)); assertEquals(1, nodes.get(vmNumaNode1).getVdsNumaNodeList().size()); assertEquals(0, nodes.get(vmNumaNode1).getVdsNumaNodeList().get(0).intValue()); assertEquals(1, nodes.get(vmNumaNode2).getVdsNumaNodeList().size()); assertEquals(1, nodes.get(vmNumaNode2).getVdsNumaNodeList().get(0).intValue()); List<Guid> vmNodeList = new ArrayList<>(); vmNodeList.add(vmNumaNode1); vmNodeList.add(vmNumaNode2); vmNumaNodeDao.massRemoveNumaNodeByNumaNodeId(vmNodeList); result = vmNumaNodeDao.getAllVmNumaNodeByVmId(ANOTHER_EXISTING_VM_ID); assertNotNull(result); assertEquals(0, result.size()); } @Test public void testMassUpdateNumaNode() { List<VmNumaNode> result = vmNumaNodeDao.getAllVmNumaNodeByVmId(ANOTHER_EXISTING_VM_ID); assertNotNull(result); assertEquals(0, result.size()); Guid vmNumaNode1 = Guid.newGuid(); Guid vmNumaNode2 = Guid.newGuid(); List<VmNumaNode> newVmNode = new ArrayList<>(); VmNumaNode newVmNumaNode = new VmNumaNode(); newVmNumaNode.setCpuIds(generateCpuList(0, 4)); newVmNumaNode.setId(vmNumaNode1); newVmNumaNode.setIndex(0); newVmNumaNode.getVdsNumaNodeList().add(0); newVmNode.add(newVmNumaNode); newVmNumaNode = new VmNumaNode(); newVmNumaNode.setCpuIds(generateCpuList(4, 4)); newVmNumaNode.setId(vmNumaNode2); newVmNumaNode.setIndex(1); newVmNumaNode.getVdsNumaNodeList().add(1); newVmNode.add(newVmNumaNode); vmNumaNodeDao.massSaveNumaNode(newVmNode, ANOTHER_EXISTING_VM_ID); result = vmNumaNodeDao.getAllVmNumaNodeByVmId(ANOTHER_EXISTING_VM_ID); assertNotNull(result); assertEquals(2, result.size()); Map<Guid, VmNumaNode> nodes = new HashMap<>(2); nodes.put(result.get(0).getId(), result.get(0)); nodes.put(result.get(1).getId(), result.get(1)); nodes.get(vmNumaNode1).getVdsNumaNodeList().clear(); nodes.get(vmNumaNode1).getVdsNumaNodeList().add(1); nodes.get(vmNumaNode2).getVdsNumaNodeList().clear(); nodes.get(vmNumaNode2).getVdsNumaNodeList().add(0); newVmNode.clear(); newVmNode.add(nodes.get(vmNumaNode1)); newVmNode.add(nodes.get(vmNumaNode2)); vmNumaNodeDao.massUpdateNumaNode(newVmNode); result = vmNumaNodeDao.getAllVmNumaNodeByVmId(ANOTHER_EXISTING_VM_ID); assertNotNull(result); assertEquals(2, result.size()); nodes.clear(); nodes.put(result.get(0).getId(), result.get(0)); nodes.put(result.get(1).getId(), result.get(1)); assertTrue(nodes.containsKey(vmNumaNode1)); assertTrue(nodes.containsKey(vmNumaNode2)); assertEquals(1, nodes.get(vmNumaNode1).getVdsNumaNodeList().size()); assertEquals(1, nodes.get(vmNumaNode1).getVdsNumaNodeList().get(0).intValue()); assertEquals(1, nodes.get(vmNumaNode2).getVdsNumaNodeList().size()); assertEquals(0, nodes.get(vmNumaNode2).getVdsNumaNodeList().get(0).intValue()); List<Guid> vmNodeList = new ArrayList<>(); vmNodeList.add(vmNumaNode1); vmNodeList.add(vmNumaNode2); vmNumaNodeDao.massRemoveNumaNodeByNumaNodeId(vmNodeList); result = vmNumaNodeDao.getAllVmNumaNodeByVmId(ANOTHER_EXISTING_VM_ID); assertNotNull(result); assertEquals(0, result.size()); } private List<Integer> generateCpuList(int fromIndex, int count) { List<Integer> cpuList = new ArrayList<>(count); for (int i = fromIndex; i < (fromIndex + count); i++) { cpuList.add(i); } return cpuList; } private Map<Integer, Integer> generateDistance(int nodeCount, int selfNodeIndex) { Map<Integer, Integer> distance = new HashMap<>(nodeCount); for (int i = 0; i < nodeCount; i++) { distance.put(i, (Math.abs(selfNodeIndex - i) + 1) * 10); } return distance; } }