Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Commit

Permalink
fix: Show only last scenario execution after campaign retry (#1132)
Browse files Browse the repository at this point in the history
Co-authored-by: nbrouand <[email protected]>
  • Loading branch information
boddissattva and nbrouand authored Sep 15, 2023
1 parent 3e382ba commit d5c433a
Show file tree
Hide file tree
Showing 26 changed files with 657 additions and 72 deletions.
4 changes: 2 additions & 2 deletions action-impl/src/test/resources/logback-test.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<logger name="com.github" level="ERROR"/>
<logger name="org.testcontainers" level="ERROR"/>

<!--logger name="com.jayway" level="WARN"/>
<logger name="com.jayway" level="WARN"/>
<logger name="com.zaxxer" level="WARN"/>
<logger name="io.undertow" level="ERROR"/>
<logger name="liquibase" level="WARN"/>
Expand All @@ -29,7 +29,7 @@
<logger name="org.xnio" level="WARN"/>
<logger name="net.schmizz" level="WARN" />
<logger name="wiremock" level="WARN" />
<logger name="wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool" level="ERROR" /-->
<logger name="wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool" level="ERROR" />

<root level="DEBUG">
<appender-ref ref="STDOUT" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import com.chutneytesting.server.core.domain.scenario.TestCaseMetadataImpl;
import com.chutneytesting.server.core.domain.scenario.TestCaseRepository;
import com.chutneytesting.server.core.domain.scenario.campaign.Campaign;
import com.chutneytesting.server.core.domain.scenario.campaign.CampaignBuilder;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.time.LocalDateTime;
import java.util.List;
Expand Down Expand Up @@ -125,6 +126,17 @@ private ExecutableComposedTestCase createExecutableComposedTestCase() {
}

private Campaign createCampaign(Map<String, String> dataSet, String dataSetId, TestCase... testCases) {
return new Campaign(generateId(), "...", null, stream(testCases).map(TestCase::id).collect(toList()), dataSet, "campaignEnv", false, false, dataSetId, null);
return new CampaignBuilder()
.setId(generateId())
.setTitle("...")
.setDescription(null)
.setScenarioIds(stream(testCases).map(TestCase::id).collect(toList()))
.setExecutionParameters(dataSet)
.setEnvironment("campaignEnv")
.setParallelRun(false)
.setRetryAuto(false)
.setExternalDatasetId(dataSetId)
.setTags(null)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,6 @@ private <T> List<T> initListNullOrEmpty(List<T> list) {
}
return new ArrayList<>();
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package com.chutneytesting.server.core.domain.scenario.campaign;

import java.util.List;
import java.util.Map;

public class CampaignBuilder {
private Long id;
private String title;
private String description;
private List<String> scenarioIds;
private Map<String, String> executionParameters;
private String environment;
private boolean parallelRun;
private boolean retryAuto;
private String externalDatasetId;
private List<String> tags;

public static CampaignBuilder builder() {
return new CampaignBuilder();
}

public CampaignBuilder(){

}
public CampaignBuilder setId(Long id) {
this.id = id;
return this;
}

public CampaignBuilder setTitle(String title) {
this.title = title;
return this;
}

public CampaignBuilder setDescription(String description) {
this.description = description;
return this;
}

public CampaignBuilder setScenarioIds(List<String> scenarioIds) {
this.scenarioIds = scenarioIds;
return this;
}

public CampaignBuilder setExecutionParameters(Map<String, String> executionParameters) {
this.executionParameters = executionParameters;
return this;
}

public CampaignBuilder setEnvironment(String environment) {
this.environment = environment;
return this;
}

public CampaignBuilder setParallelRun(boolean parallelRun) {
this.parallelRun = parallelRun;
return this;
}

public CampaignBuilder setRetryAuto(boolean retryAuto) {
this.retryAuto = retryAuto;
return this;
}

public CampaignBuilder setExternalDatasetId(String externalDatasetId) {
this.externalDatasetId = externalDatasetId;
return this;
}

public CampaignBuilder setTags(List<String> tags) {
this.tags = tags;
return this;
}

public Campaign build() {
return new Campaign(id, title, description, scenarioIds, executionParameters, environment, parallelRun, retryAuto, externalDatasetId, tags);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.chutneytesting.server.core.domain.scenario.campaign;

import static com.chutneytesting.server.core.domain.execution.report.ServerReportStatus.RUNNING;
import static java.time.LocalDateTime.now;
import static java.util.Collections.unmodifiableList;
import static java.util.Optional.ofNullable;
Expand All @@ -11,6 +12,7 @@
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
Expand Down Expand Up @@ -49,7 +51,7 @@ public CampaignExecutionReport(Long executionId,
this.scenarioExecutionReports = new ArrayList<>();
this.campaignName = campaignName;
this.startDate = now();
this.status = ServerReportStatus.RUNNING;
this.status = RUNNING;
this.dataSetId = ofNullable(dataSetId);
this.dataSetVersion = ofNullable(dataSetVersion);
this.userId = userId;
Expand Down Expand Up @@ -77,6 +79,39 @@ public CampaignExecutionReport(Long executionId,
this.userId = userId;
}

CampaignExecutionReport(
Long executionId,
Long campaignId,
String campaignName,
boolean partialExecution,
String executionEnvironment,
String userId,
Optional<String> dataSetId,
Optional<Integer> dataSetVersion,
LocalDateTime startDate,
ServerReportStatus status,
List<ScenarioExecutionReportCampaign> scenarioExecutionReports
) {
this.executionId = executionId;
this.campaignId = campaignId;
this.campaignName = campaignName;
this.partialExecution = partialExecution;
this.executionEnvironment = executionEnvironment;
this.dataSetId = dataSetId;
this.dataSetVersion = dataSetVersion;
this.userId = userId;

if (scenarioExecutionReports == null) {
this.startDate = ofNullable(startDate).orElse(now());
this.status = ofNullable(status).orElse(RUNNING);
this.scenarioExecutionReports = null;
} else {
this.startDate = findStartDate(scenarioExecutionReports);
this.status = findStatus(scenarioExecutionReports);
this.scenarioExecutionReports = scenarioExecutionReports;
}
}

public void initExecution(List<TestCase> testCases, String executionEnvironment, String userId) {
testCases.forEach(testCase ->
this.scenarioExecutionReports.add(
Expand Down Expand Up @@ -108,7 +143,7 @@ public void startScenarioExecution(TestCase testCase, String executionEnvironmen
.executionId(-1L)
.testCaseTitle(testCase.metadata().title())
.time(now())
.status(ServerReportStatus.RUNNING)
.status(RUNNING)
.duration(0)
.environment(executionEnvironment)
.datasetId(dataSetId)
Expand Down Expand Up @@ -167,8 +202,10 @@ private LocalDateTime findStartDate(List<ScenarioExecutionReportCampaign> scenar
}

private ServerReportStatus findStatus(List<ScenarioExecutionReportCampaign> scenarioExecutionReports) {
ServerReportStatus foundStatus = scenarioExecutionReports.stream()
.filter(Objects::nonNull)

List<ScenarioExecutionReportCampaign> filteredReports = filterRetry(scenarioExecutionReports);

ServerReportStatus foundStatus = filteredReports.stream()
.map(report -> report.execution)
.filter(Objects::nonNull)
.map(ExecutionHistory.ExecutionProperties::status)
Expand All @@ -179,6 +216,30 @@ private ServerReportStatus findStatus(List<ScenarioExecutionReportCampaign> scen
return foundStatus;
}

private List<ScenarioExecutionReportCampaign> filterRetry(List<ScenarioExecutionReportCampaign> scenarioExecutionReports) {
return scenarioExecutionReports.stream()
.filter(Objects::nonNull)
.collect(Collectors.groupingBy(s -> s.scenarioId))
.values().stream()
.map(list -> list.size() == 1 ? list.get(0) : list.stream().max(Comparator.comparing(objet -> objet.execution.time())).get())
.toList();
}

public CampaignExecutionReport withoutRetries() {
return CampaignExecutionReportBuilder.builder()
.setExecutionId(executionId)
.setCampaignId(campaignId)
.setCampaignName(campaignName)
.setExecutionEnvironment(executionEnvironment)
.setDataSetId(dataSetId.orElse(null))
.setDataSetVersion(dataSetVersion.orElse(null))
.setUserId(userId)
.setStartDate(startDate)
.setStatus(status)
.setScenarioExecutionReport(filterRetry(scenarioExecutionReports))
.build();
}

@Override
public String toString() {
return "CampaignExecutionReport{" +
Expand All @@ -198,6 +259,4 @@ public boolean equals(Object o) {
public int hashCode() {
return Objects.hash(executionId);
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package com.chutneytesting.server.core.domain.scenario.campaign;

import static java.util.Optional.ofNullable;

import com.chutneytesting.server.core.domain.execution.report.ServerReportStatus;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

public class CampaignExecutionReportBuilder {
// Mandatory fields
private Long executionId;
private String campaignName;
private boolean partialExecution;
private String executionEnvironment;
private String dataSetId;
private Integer dataSetVersion;
private String userId;

// Optional fields
private List<ScenarioExecutionReportCampaign> scenarioExecutionReports = new ArrayList<>();
private Long campaignId;
private LocalDateTime startDate;
private ServerReportStatus status;

public static CampaignExecutionReportBuilder builder() {
return new CampaignExecutionReportBuilder();
}

private CampaignExecutionReportBuilder() {

}

public CampaignExecutionReportBuilder setExecutionId(Long executionId) {
this.executionId = executionId;
return this;
}

public CampaignExecutionReportBuilder setCampaignName(String campaignName) {
this.campaignName = campaignName;
return this;
}

public CampaignExecutionReportBuilder setPartialExecution(boolean partialExecution) {
this.partialExecution = partialExecution;
return this;
}

public CampaignExecutionReportBuilder setExecutionEnvironment(String executionEnvironment) {
this.executionEnvironment = executionEnvironment;
return this;
}

public CampaignExecutionReportBuilder setStartDate(LocalDateTime startDate) {
this.startDate = startDate;
return this;
}

public CampaignExecutionReportBuilder setStatus(ServerReportStatus status) {
this.status = status;
return this;
}

public CampaignExecutionReportBuilder setDataSetId(String dataSetId) {
this.dataSetId = dataSetId;
return this;
}

public CampaignExecutionReportBuilder setDataSetVersion(Integer dataSetVersion) {
this.dataSetVersion = dataSetVersion;
return this;
}

public CampaignExecutionReportBuilder setUserId(String userId) {
this.userId = userId;
return this;
}

public CampaignExecutionReportBuilder addScenarioExecutionReport(ScenarioExecutionReportCampaign scenarioExecutionReport) {
this.scenarioExecutionReports.add(scenarioExecutionReport);
return this;
}

public CampaignExecutionReportBuilder setScenarioExecutionReport(List<ScenarioExecutionReportCampaign> scenarioExecutionsReports) {
this.scenarioExecutionReports = new ArrayList<>(scenarioExecutionsReports);
return this;
}

public CampaignExecutionReportBuilder setCampaignId(Long campaignId) {
this.campaignId = campaignId;
return this;
}

public CampaignExecutionReport build() {
return new CampaignExecutionReport(
executionId,
campaignId,
campaignName,
partialExecution,
executionEnvironment,
userId,
ofNullable(dataSetId),
ofNullable(dataSetVersion),
startDate,
status,
scenarioExecutionReports
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.chutneytesting.action.api.EmbeddedActionEngine;
import com.chutneytesting.campaign.domain.CampaignExecutionRepository;
import com.chutneytesting.campaign.domain.CampaignRepository;
import com.chutneytesting.campaign.domain.CampaignService;
import com.chutneytesting.dataset.domain.DataSetRepository;
import com.chutneytesting.design.domain.editionlock.TestCaseEditions;
import com.chutneytesting.design.domain.editionlock.TestCaseEditionsService;
Expand Down Expand Up @@ -278,4 +279,9 @@ EmbeddedActionEngine embeddedActionEngine(ExecutionConfiguration executionConfig
Clock clock() {
return Clock.systemDefaultZone();
}

@Bean
CampaignService campaignService(CampaignRepository campaignRepository) {
return new CampaignService(campaignRepository);
}
}
Loading

0 comments on commit d5c433a

Please sign in to comment.