package org.ovirt.engine.core.bll.scheduling.policyunits; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.junit.MockitoJUnitRunner; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.scheduling.PerHostMessages; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.utils.MockConfigRule; @RunWith(MockitoJUnitRunner.class) public class CPUPolicyUnitTest { @ClassRule public static MockConfigRule configRule = new MockConfigRule(); @InjectMocks private final CPUPolicyUnit cpuPolicyUnit = new CPUPolicyUnit(null, null); private VDS vdsWithInvalidCpuInfo; private VDS vdsWithCores; private VM vm; private Cluster cluster; @Before public void setUp() { vm = new VM(); vm.setCpuPerSocket(2); vm.setNumOfSockets(2); vdsWithInvalidCpuInfo = new VDS(); vdsWithInvalidCpuInfo.setId(Guid.newGuid()); vdsWithInvalidCpuInfo.setCpuCores(0); vdsWithInvalidCpuInfo.setCpuThreads(0); vdsWithCores = new VDS(); vdsWithCores.setId(Guid.newGuid()); vdsWithCores.setCpuCores(2); vdsWithCores.setCpuThreads(4); cluster = new Cluster(); cluster.setId(Guid.newGuid()); } /** * When obviously wrong information is reported, skip the host */ @Test public void shouldFilterInvalidHosts() { cluster.setCountThreadsAsCores(true); final List<VDS> candidates = filter(); assertThat(candidates).containsOnly(vdsWithCores); } /** * When no cpu information at all is available, consider the host */ @Test public void shouldKeepHostsWithNoCpuInformation() { vdsWithInvalidCpuInfo.setCpuCores(null); final List<VDS> candidates = filter(); assertThat(candidates).contains(vdsWithInvalidCpuInfo); } @Test public void shouldFilterHostWithNotEnoughThreads() { cluster.setCountThreadsAsCores(true); vdsWithCores.setCpuThreads(3); final List<VDS> candidates = filter(); assertThat(candidates).doesNotContain(vdsWithCores); } @Test public void shouldFilterHostsWithNotEnoughCpuCores() { cluster.setCountThreadsAsCores(false); final List<VDS> candidates = filter(); assertThat(candidates).doesNotContain(vdsWithCores); } @Test public void shouldKeepHostsWithEnoughCpuCores() { cluster.setCountThreadsAsCores(false); vdsWithCores.setCpuCores(4); final List<VDS> candidates = filter(); assertThat(candidates).contains(vdsWithCores); } @Test public void shouldKeepHostsWithEnoughThreads() { cluster.setCountThreadsAsCores(true); final List<VDS> candidates = filter(); assertThat(candidates).contains(vdsWithCores); } private List<VDS> filter() { return cpuPolicyUnit.filter(cluster, Arrays.asList(vdsWithInvalidCpuInfo, vdsWithCores), vm, null, mock(PerHostMessages.class)); } }