package com.griddynamics.jagger.test.javabuilders.load; import com.griddynamics.jagger.engine.e1.collector.JHttpResponseStatusValidatorProvider; import com.griddynamics.jagger.invoker.v2.JHttpQuery; import com.griddynamics.jagger.test.javabuilders.utils.EndpointsProvider; import com.griddynamics.jagger.test.javabuilders.utils.JaggerPropertiesProvider; import com.griddynamics.jagger.test.javabuilders.utils.LoadDurationMetric; import com.griddynamics.jagger.user.test.configurations.JTestDefinition; import com.griddynamics.jagger.user.test.configurations.auxiliary.Id; import com.griddynamics.jagger.user.test.configurations.limits.JLimit; import com.griddynamics.jagger.user.test.configurations.limits.JLimitVsRefValue; import com.griddynamics.jagger.user.test.configurations.limits.auxiliary.*; import com.griddynamics.jagger.user.test.configurations.termination.JTerminationCriteria; import com.griddynamics.jagger.user.test.configurations.termination.JTerminationCriteriaDuration; import com.griddynamics.jagger.user.test.configurations.termination.JTerminationCriteriaIterations; import com.griddynamics.jagger.user.test.configurations.termination.auxiliary.DurationInSeconds; import com.griddynamics.jagger.user.test.configurations.termination.auxiliary.IterationsNumber; import com.griddynamics.jagger.user.test.configurations.termination.auxiliary.MaxDurationInSeconds; import java.util.Collections; public class LoadTestsDefinition { protected final JLimit SUCCESS_LIMIT; protected final MaxDurationInSeconds defaultMaxDuration; protected JaggerPropertiesProvider provider; public LoadTestsDefinition(JaggerPropertiesProvider provider) { this.provider = provider; this.SUCCESS_LIMIT = JLimitVsRefValue.builder(JMetricName.PERF_SUCCESS_RATE_OK, RefValue.of(1.0)).build(); this.defaultMaxDuration = MaxDurationInSeconds.of(provider.getIntPropertyValue("default.max.test.duration")); } /** * Create {@link JTestDefinition} with request to `sleep` service with specified sleepDelay * @param sleepDelay in ms **/ protected JTestDefinition sleepTestDefinition(int sleepDelay) { return testDefinition("/sleep/" + sleepDelay, "/sleep/" + sleepDelay); } /** * @param id definition id * @param path query path * @return {@link JTestDefinition} with GET request on specified path */ protected JTestDefinition testDefinition(String id, String path){ return JTestDefinition.builder(Id.of(id), new EndpointsProvider(provider)) .withQueryProvider(Collections.singletonList(new JHttpQuery().get().responseBodyType(String.class).path(path))) .addValidator(JHttpResponseStatusValidatorProvider.of(200)) .withComment(id) .addListener(new LoadDurationMetric()) .build(); } /** * Create limit with deviation in percent from specified val. * val*(1-dev) <= metric value <= val*(1+dev) */ protected JLimit deviationLimit(String metric, double val, double warnDeviation, double errDeviation) { return JLimitVsRefValue.builder(metric, RefValue.of(val)) .withExactLimits(LowErrThresh.of(1 - errDeviation), LowWarnThresh.of(1 - warnDeviation), UpWarnThresh.of(1 + warnDeviation), UpErrThresh.of(1 + errDeviation)).build(); } /** * Create limit with deviation in percent from specified val. * val*(1-dev) <= metric value <= val*(1+dev) */ protected JLimit deviationLimit(JMetricName metric, double val, double warnDeviation, double errDeviation) { return deviationLimit(metric.transformToString(), val, warnDeviation, errDeviation); } /** * Create limit to check that the metric has exact value. * metric value === val */ protected JLimit exactValueLimit(JMetricName metric, double val){ return JLimitVsRefValue.builder(metric, RefValue.of(val)).build(); } /** * Create limit with deviations with absolute values. * val-deviation <= metric value <= val+deviation */ protected JLimit absoluteDeviationLimit(JMetricName metricName, double val, double warnDeviation, double errDeviation){ return deviationLimit(metricName, val, warnDeviation/val, errDeviation/val); } /** * Short form to create {@link JTerminationCriteriaIterations} */ protected JTerminationCriteria iterTermination(long count){ return JTerminationCriteriaIterations.of(IterationsNumber.of(count), defaultMaxDuration); } /** * Short form to create {@link JTerminationCriteriaDuration} */ protected JTerminationCriteria durationTermination(long duration){ return JTerminationCriteriaDuration.of(DurationInSeconds.of(duration)); } }