package com.griddynamics.jagger.test.jaas;
import com.griddynamics.jagger.engine.e1.collector.DefaultResponseValidatorProvider;
import com.griddynamics.jagger.engine.e1.collector.JHttpResponseStatusValidatorProvider;
import com.griddynamics.jagger.engine.e1.collector.NotNullResponseValidator;
import com.griddynamics.jagger.engine.e1.collector.ResponseValidatorProvider;
import com.griddynamics.jagger.invoker.v2.DefaultInvokerProvider;
import com.griddynamics.jagger.invoker.v2.JHttpEndpoint;
import com.griddynamics.jagger.test.jaas.invoker.ExecutionManipulateInvoker;
import com.griddynamics.jagger.test.jaas.listener.LoadScenarioConfigListener;
import com.griddynamics.jagger.test.jaas.provider.QueryProvider;
import com.griddynamics.jagger.test.jaas.util.JaggerPropertiesProvider;
import com.griddynamics.jagger.test.jaas.util.TestContext;
import com.griddynamics.jagger.test.jaas.validator.BadRequest_ResponseContentValidator;
import com.griddynamics.jagger.test.jaas.validator.executions.CreateExecutionResponseValidator;
import com.griddynamics.jagger.test.jaas.validator.executions.ExListResponseValidator;
import com.griddynamics.jagger.test.jaas.validator.executions.ExResponseValidator;
import com.griddynamics.jagger.test.jaas.validator.metrics.MetricsListResponseContentValidator;
import com.griddynamics.jagger.test.jaas.validator.metrics.PlotListResponseContentValidator;
import com.griddynamics.jagger.test.jaas.validator.metrics.SummaryListResponseContentValidator;
import com.griddynamics.jagger.test.jaas.validator.sessions.SessionResponseContentValidator;
import com.griddynamics.jagger.test.jaas.validator.sessions.SessionsListResponseContentValidator;
import com.griddynamics.jagger.test.jaas.validator.tests.TestResponseContentValidator;
import com.griddynamics.jagger.test.jaas.validator.tests.TestsListResponseContentValidator;
import com.griddynamics.jagger.user.test.configurations.JLoadScenario;
import com.griddynamics.jagger.user.test.configurations.JLoadTest;
import com.griddynamics.jagger.user.test.configurations.JParallelTestsGroup;
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.JLimitVsRefValue;
import com.griddynamics.jagger.user.test.configurations.limits.auxiliary.RefValue;
import com.griddynamics.jagger.user.test.configurations.load.JLoadProfile;
import com.griddynamics.jagger.user.test.configurations.load.JLoadProfileInvocation;
import com.griddynamics.jagger.user.test.configurations.load.JLoadProfileUserGroups;
import com.griddynamics.jagger.user.test.configurations.load.JLoadProfileUsers;
import com.griddynamics.jagger.user.test.configurations.load.auxiliary.InvocationCount;
import com.griddynamics.jagger.user.test.configurations.load.auxiliary.NumberOfUsers;
import com.griddynamics.jagger.user.test.configurations.load.auxiliary.ThreadCount;
import com.griddynamics.jagger.user.test.configurations.loadbalancer.JLoadBalancer;
import com.griddynamics.jagger.user.test.configurations.termination.JTerminationCriteria;
import com.griddynamics.jagger.user.test.configurations.termination.JTerminationCriteriaIterations;
import com.griddynamics.jagger.user.test.configurations.termination.auxiliary.IterationsNumber;
import com.griddynamics.jagger.user.test.configurations.termination.auxiliary.MaxDurationInSeconds;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Configuration
public class JaasScenario extends JaggerPropertiesProvider {
private Stream<JParallelTestsGroup> sessionTests(QueryProvider queryProvider) {
JParallelTestsGroup tg_JaaS_GET_Sessions = JParallelTestsGroup.builder(Id.of("tg_JaaS_GET_Sessions"),
getTestWithResponseCode200("t_JaaS_GET_Sessions_List_SR_eq._1.0", queryProvider.GET_SessionsList(), new SessionsListResponseContentValidator()),
getTestWithResponseCode200("t_JaaS_GET_Exact_Session_SR_eq._1.0", queryProvider.GET_SessionIds(), new SessionResponseContentValidator())
).build();
JParallelTestsGroup tg_JaaS_GET_Tests = JParallelTestsGroup.builder(Id.of("tg_JaaS_GET_Tests"),
getTestWithResponseCode200("t_JaaS_GET_Session_Tests_List_SR_eq._1.0", queryProvider.GET_TestsList(), new TestsListResponseContentValidator()),
getTestWithResponseCode200("t_JaaS_GET_Exact_Session_Test_SR_eq._1.0", queryProvider.GET_TestNames(), new TestResponseContentValidator())
).build();
JParallelTestsGroup tg_JaaS_GET_Metrics = getSingleTestWithResponseCode200("t_JaaS_GET_Metrics_List_SR_eq._1.0",
queryProvider.GET_TestMetrics(), new MetricsListResponseContentValidator());
JParallelTestsGroup tg_JaaS_GET_Metric_Summaries = getSingleTestWithResponseCode200("t_JaaS_GET_Metric_Summary_List_SR_eq",
queryProvider.GET_MetricSummary(), new SummaryListResponseContentValidator());
JParallelTestsGroup tg_JaaS_MetricPlotList = getSingleTestWithResponseCode200("t_JaaS_GET_Metric_Plot_List_SR_eq._1.0",
queryProvider.GET_MetricPlotData(), new PlotListResponseContentValidator());
return Stream.of(
tg_JaaS_GET_Sessions,
tg_JaaS_GET_Tests ,
tg_JaaS_GET_Metrics,
tg_JaaS_GET_Metric_Summaries,
tg_JaaS_MetricPlotList
);
}
private Stream<JParallelTestsGroup> executionsTests(QueryProvider queryProvider) {
JParallelTestsGroup tg_JaaS_POST_execution = JParallelTestsGroup.builder(Id.of("tg_JaaS_POST_execution"),
getExecutionLoadTest("t_JaaS_POST_execution", queryProvider.POST_execution(),
Arrays.asList(DefaultResponseValidatorProvider.of(NotNullResponseValidator.class),
JHttpResponseStatusValidatorProvider.of(201), new CreateExecutionResponseValidator()),
JLoadProfileInvocation.builder(InvocationCount.of(10), ThreadCount.of(1)).build(),
JTerminationCriteriaIterations.of(IterationsNumber.of(10), MaxDurationInSeconds.of(20)))
).build();
JParallelTestsGroup tg_JaaS_GET_executions = JParallelTestsGroup.builder(Id.of("tg_JaaS_GET_executions"),
getTestWithResponseCode200("t_JaaS_GET_Executions_List", queryProvider.GET_ExList(), new ExListResponseValidator()),
getTestWithResponseCode200("t_JaaS_GET_Exact_Execution", queryProvider.GET_ExId(), new ExResponseValidator()),
getStandardTest("t_JaaS_GET_BadRequest", queryProvider.GET_NonNumeric_ExId(),
Arrays.asList(DefaultResponseValidatorProvider.of(NotNullResponseValidator.class),
JHttpResponseStatusValidatorProvider.of(400), new BadRequest_ResponseContentValidator())),
getStandardTest("t_JaaS_GET_NotFound", queryProvider.GET_NonExisting_ExId(),
Arrays.asList(DefaultResponseValidatorProvider.of(NotNullResponseValidator.class),
JHttpResponseStatusValidatorProvider.of(404)))
).build();
JParallelTestsGroup tg_JaaS_DELETE_Executions = JParallelTestsGroup.builder(Id.of("tg_JaaS_DELETE_Executions"),
getExecutionLoadTest("t_JaaS_DELETE_Executions", queryProvider.DELETE_Execution(),
Arrays.asList(JHttpResponseStatusValidatorProvider.of(204), DefaultResponseValidatorProvider.of(NotNullResponseValidator.class)),
JLoadProfileInvocation.builder(InvocationCount.of(10), ThreadCount.of(1)).withDelayBetweenInvocationsInMilliseconds(1000).build(),
JTerminationCriteriaIterations.of(IterationsNumber.of(10), MaxDurationInSeconds.of(15)))
).build();
JParallelTestsGroup tg_JaaS_GET_deleted_execution = JParallelTestsGroup.builder(Id.of("tg_JaaS_GET_deleted_execution"),
getStandardTest("t_JaaS_GET_deleted_execution", queryProvider.GET_Deleted_Ex(),
Arrays.asList(DefaultResponseValidatorProvider.of(NotNullResponseValidator.class), JHttpResponseStatusValidatorProvider.of(404)))
).build();
return Stream.of(
tg_JaaS_POST_execution,
tg_JaaS_GET_executions,
tg_JaaS_DELETE_Executions,
tg_JaaS_GET_deleted_execution
);
}
@Bean
public JLoadScenario getJaasTestScenario() {
TestContext.initUri(this);
QueryProvider queryProvider = new QueryProvider(this::getPropertyValue);
return JLoadScenario.builder(Id.of("ts_JaaSTestSuit"), Stream.concat(
sessionTests(queryProvider),
executionsTests(queryProvider)
).collect(Collectors.toList()))
.withLatencyPercentiles(Collections.singletonList(99d))
.addListener(new LoadScenarioConfigListener())
.build();
}
private JParallelTestsGroup getSingleTestWithResponseCode200(String id, Iterable queryProvider, ResponseValidatorProvider validator) {
return JParallelTestsGroup.builder(Id.of("g" + id), getTestWithResponseCode200(id, queryProvider, validator)).build();
}
private JLoadTest getTestWithResponseCode200(String id, Iterable queryProvider, ResponseValidatorProvider validator) {
return getStandardTest(id, queryProvider,
Arrays.asList(DefaultResponseValidatorProvider.of(NotNullResponseValidator.class),
JHttpResponseStatusValidatorProvider.of(200), validator));
}
private JLoadTest getStandardTest(String id, Iterable queryProvider, List<ResponseValidatorProvider> validators) {
JLoadProfile standardGroupLoad = JLoadProfileUserGroups
.builder(JLoadProfileUsers.builder(NumberOfUsers.of(2))
.withLifeTimeInSeconds(Long.valueOf(getPropertyValue("jaas.std.tst.life")))
.build())
.build();
JTerminationCriteria standardTermination = JTerminationCriteriaIterations
.of(IterationsNumber.of(Long.valueOf(getPropertyValue("jaas.std.tst.iterations"))),
MaxDurationInSeconds.of(Long.valueOf(getPropertyValue("jaas.std.tst.max_duration"))));
return getCommonLoadTest(id, queryProvider, validators, standardGroupLoad, standardTermination);
}
private JLoadTest getCommonLoadTest(String id,
Iterable queryProvider,
List<ResponseValidatorProvider> validators,
JLoadProfile standardGroupLoad,
JTerminationCriteria standardTermination) {
JTestDefinition definition = JTestDefinition.builder(Id.of(id + "def"),
Collections.singletonList(new JHttpEndpoint(TestContext.getEndpointUri())))
.withQueryProvider(queryProvider)
.addValidators(validators)
.build();
return JLoadTest.builder(Id.of(id), definition, standardGroupLoad, standardTermination)
.withLimits(JLimitVsRefValue.builder("successRate-Success rate", RefValue.of(1.0)).build())
.build();
}
private JLoadTest getExecutionLoadTest(String id, Iterable queryProvider, List<ResponseValidatorProvider> validators, JLoadProfile standardGroupLoad, JTerminationCriteria standardTermination) {
JTestDefinition definition = JTestDefinition.builder(Id.of(id + "def"),
Collections.singletonList(new JHttpEndpoint(TestContext.getEndpointUri())))
.withQueryProvider(queryProvider)
.withInvoker(DefaultInvokerProvider.of(ExecutionManipulateInvoker.class))
.addValidators(validators)
.withLoadBalancer(JLoadBalancer.builder(JLoadBalancer.DefaultLoadBalancer.ONE_BY_ONE).build())
.build();
return JLoadTest.builder(Id.of(id), definition, standardGroupLoad, standardTermination)
.withLimits(JLimitVsRefValue.builder("successRate-Success rate", RefValue.of(1.0)).build())
.build();
}
}