package org.ovirt.engine.core.bll.scheduling; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.HashMap; import java.util.Map; import java.util.UUID; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; import org.ovirt.engine.core.bll.scheduling.policyunits.CpuLevelFilterPolicyUnit; import org.ovirt.engine.core.bll.scheduling.policyunits.EvenDistributionBalancePolicyUnit; import org.ovirt.engine.core.bll.scheduling.policyunits.HaReservationWeightPolicyUnit; import org.ovirt.engine.core.bll.scheduling.policyunits.MemoryPolicyUnit; import org.ovirt.engine.core.bll.scheduling.policyunits.PinToHostPolicyUnit; import org.ovirt.engine.core.bll.scheduling.policyunits.VmAffinityWeightPolicyUnit; import org.ovirt.engine.core.common.scheduling.ClusterPolicy; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.compat.Guid; @RunWith(MockitoJUnitRunner.class) public class InternalClusterPoliciesTest { @Test public void testConfiguredPolicyCreation() { assertNotNull(InternalClusterPolicies.getClusterPolicies()); assertNotEquals(0, (long)InternalClusterPolicies.getClusterPolicies().size()); } @Test public void testDefaultPolicy() { assertNotNull(InternalClusterPolicies.getClusterPolicies()); long defaultPolicies = InternalClusterPolicies.getClusterPolicies().values().stream() .filter(ClusterPolicy::isDefaultPolicy) .count(); assertEquals( "There can be only one default InternalClusterPolicy", 1, defaultPolicies); } @Test(expected = IllegalArgumentException.class) public void testFailureToAddUnitBadType() { InternalClusterPolicies.createBuilder(UUID.randomUUID().toString()) .addFunction(1, InternalPolicyUnitsTest.DummyUnit.class) .getPolicy(); } @Test(expected = IllegalArgumentException.class) public void testFailureToAddUnitNotEnabled() { InternalClusterPolicies.createBuilder(UUID.randomUUID().toString()) .addFilters(InternalPolicyUnitsTest.NotEnabledDummyUnit.class) .getPolicy(); } @Test public void testPolicyCreation() throws Exception { Guid uuid = Guid.newGuid(); ClusterPolicy policy = InternalClusterPolicies.createBuilder(uuid.toString()) .name("test-policy") .isDefault() .description("test-description") .set(PolicyUnitParameter.CPU_OVERCOMMIT_DURATION_MINUTES, "5") .set(PolicyUnitParameter.SPM_VM_GRACE, "1") .setBalancer(EvenDistributionBalancePolicyUnit.class) .addFilters(CpuLevelFilterPolicyUnit.class) .addFilters(MemoryPolicyUnit.class) .addFilters(PinToHostPolicyUnit.class) .addFunction(1, HaReservationWeightPolicyUnit.class) .addFunction(2, VmAffinityWeightPolicyUnit.class) .getPolicy(); assertNotNull(policy); assertEquals(uuid, policy.getId()); assertEquals("test-policy", policy.getName()); assertEquals("test-description", policy.getDescription()); assertTrue(policy.isDefaultPolicy()); assertTrue(policy.isLocked()); assertNotNull(policy.getFilterPositionMap()); assertEquals(-1L, (long) policy.getFilterPositionMap().get(getUnitId(CpuLevelFilterPolicyUnit.class))); assertEquals(0, (long) policy.getFilterPositionMap().get(getUnitId(MemoryPolicyUnit.class))); assertEquals(1L, (long) policy.getFilterPositionMap().get(getUnitId(PinToHostPolicyUnit.class))); assertNotNull(policy.getParameterMap()); assertEquals(2, policy.getParameterMap().size()); assertEquals("5", policy.getParameterMap().get(PolicyUnitParameter.CPU_OVERCOMMIT_DURATION_MINUTES.getDbName())); assertEquals("1", policy.getParameterMap().get(PolicyUnitParameter.SPM_VM_GRACE.getDbName())); assertNotNull(policy.getFunctions()); assertNotNull(policy.getFilters()); assertEquals(3, policy.getFilters().size()); assertEquals(2, policy.getFunctions().size()); Map<Guid, Integer> funcMap = new HashMap<>(); for (Pair<Guid, Integer> pair: policy.getFunctions()) { funcMap.put(pair.getFirst(), pair.getSecond()); } assertEquals(1, (long)funcMap.get(getUnitId(HaReservationWeightPolicyUnit.class))); assertEquals(2, (long)funcMap.get(getUnitId(VmAffinityWeightPolicyUnit.class))); } private Guid getUnitId(Class<? extends PolicyUnitImpl> unit) { return Guid.createGuidFromString(unit.getAnnotation(SchedulingUnit.class).guid()); } }