package org.ovirt.engine.core.bll.scheduling; import static org.junit.Assert.assertEquals; import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig; import java.util.Arrays; import java.util.Collections; import java.util.List; import javax.validation.groups.Default; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; import org.ovirt.engine.core.common.businessentities.network.NetworkQoS; import org.ovirt.engine.core.common.businessentities.qos.CpuQos; import org.ovirt.engine.core.common.businessentities.qos.StorageQos; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.common.utils.ValidationUtils; import org.ovirt.engine.core.utils.MockConfigRule; @RunWith(MockitoJUnitRunner.class) public class QosRangeValidatorTest { public static final int OUT_OF_RANGE = 111; public static final int MAX_RANGE = 100; @Rule public final MockConfigRule configRule = new MockConfigRule( mockConfig(ConfigValues.MaxCpuLimitQosValue, MAX_RANGE), mockConfig(ConfigValues.MaxThroughputUpperBoundQosValue, MAX_RANGE), mockConfig(ConfigValues.MaxReadThroughputUpperBoundQosValue, MAX_RANGE), mockConfig(ConfigValues.MaxWriteThroughputUpperBoundQosValue, MAX_RANGE), mockConfig(ConfigValues.MaxIopsUpperBoundQosValue, MAX_RANGE), mockConfig(ConfigValues.MaxReadIopsUpperBoundQosValue, MAX_RANGE), mockConfig(ConfigValues.MaxWriteIopsUpperBoundQosValue, MAX_RANGE), mockConfig(ConfigValues.MaxAverageNetworkQoSValue, MAX_RANGE), mockConfig(ConfigValues.MaxPeakNetworkQoSValue, MAX_RANGE), mockConfig(ConfigValues.MaxBurstNetworkQoSValue, MAX_RANGE) ); @Test public void validCpuMessage() { CpuQos qos = new CpuQos(); qos.setCpuLimit(OUT_OF_RANGE); List<String> validationMessages = ValidationUtils.validateInputs( Arrays.asList(new Class<?>[] { Default.class }), qos); assertValidateMsgCount(validationMessages, "$range 1-100", 1); assertValidateMsgCount(validationMessages, EngineMessage.ACTION_TYPE_FAILED_QOS_OUT_OF_RANGE_VALUES.name(), 1); } @Test public void validStorageMessage() { StorageQos qos = new StorageQos(); qos.setMaxThroughput(OUT_OF_RANGE); qos.setMaxReadThroughput(OUT_OF_RANGE); qos.setMaxWriteThroughput(OUT_OF_RANGE); qos.setMaxIops(OUT_OF_RANGE); qos.setMaxReadIops(OUT_OF_RANGE); qos.setMaxWriteIops(OUT_OF_RANGE); List<String> validationMessages = ValidationUtils.validateInputs( Arrays.asList(new Class<?>[] { Default.class }), qos); assertValidateMsgCount(validationMessages, "$range 0-100", 6); assertValidateMsgCount(validationMessages, EngineMessage.ACTION_TYPE_FAILED_QOS_OUT_OF_RANGE_VALUES.name(), 6); } @Test public void validNetworkQosMessages() { NetworkQoS qos = new NetworkQoS(); qos.setInboundAverage(OUT_OF_RANGE); qos.setInboundPeak(OUT_OF_RANGE); qos.setInboundBurst(OUT_OF_RANGE); qos.setOutboundAverage(OUT_OF_RANGE); qos.setOutboundPeak(OUT_OF_RANGE); qos.setOutboundBurst(OUT_OF_RANGE); List<String> validationMessages = ValidationUtils.validateInputs( Arrays.asList(new Class<?>[] { Default.class }), qos); assertValidateMsgCount(validationMessages, "$range 0-100", 6); assertValidateMsgCount(validationMessages, EngineMessage.ACTION_TYPE_FAILED_QOS_OUT_OF_RANGE_VALUES.name(), 6); } private void assertValidateMsgCount(List<String> validationMessages, String msg, int count) { assertEquals(Collections.frequency(validationMessages, msg), count); } }