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

Commit

Permalink
fix(server): save campaign - scenario link at scenario execution end
Browse files Browse the repository at this point in the history
  • Loading branch information
rbenyoussef committed Jun 30, 2023
1 parent 7f1c023 commit dd29e96
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,30 @@

import com.chutneytesting.server.core.domain.dataset.DataSet;
import com.chutneytesting.server.core.domain.scenario.TestCase;
import com.chutneytesting.server.core.domain.scenario.campaign.CampaignExecutionReport;

public class ExecutionRequest {

public final TestCase testCase;
public final String environment;
public final String userId;
public final DataSet dataset;
public final CampaignExecutionReport campaignExecutionReport;

public ExecutionRequest(TestCase testCase, String environment, String userId, DataSet dataset) {
public ExecutionRequest(TestCase testCase, String environment, String userId, DataSet dataset, CampaignExecutionReport campaignExecutionReport) {
this.testCase = testCase;
this.environment = environment;
this.userId = userId;
this.dataset = dataset;
this.campaignExecutionReport = campaignExecutionReport;
}

public ExecutionRequest(TestCase testCase, String environment, String userId, DataSet dataset) {
this(testCase, environment, userId,dataset, null);
}

public ExecutionRequest(TestCase testCase, String environment, String userId) {
this.testCase = testCase;
this.environment = environment;
this.userId = userId;
this.dataset = DataSet.NO_DATASET;
this(testCase, environment, userId,DataSet.NO_DATASET, null);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public ScenarioExecutionEngineAsync(ExecutionHistoryRepository executionHistoryR
*/
public Long execute(ExecutionRequest executionRequest) {
// Compile testcase for execution
ExecutionRequest executionRequestProcessed = new ExecutionRequest(testCasePreProcessors.apply(executionRequest), executionRequest.environment, executionRequest.userId, executionRequest.dataset);
ExecutionRequest executionRequestProcessed = new ExecutionRequest(testCasePreProcessors.apply(executionRequest), executionRequest.environment, executionRequest.userId, executionRequest.dataset, executionRequest.campaignExecutionReport);
// Initialize execution history
ExecutionHistory.Execution storedExecution = storeInitialReport(executionRequestProcessed);
// Start engine execution
Expand Down Expand Up @@ -112,6 +112,7 @@ private ExecutionHistory.Execution storeInitialReport(ExecutionRequest execution
.testCaseTitle(executionRequest.testCase.metadata().title())
.environment(executionRequest.environment)
.user(executionRequest.userId)
.campaignReport(ofNullable(executionRequest.campaignExecutionReport))
.build();

return executionHistoryRepository.store(executionRequest.testCase.id(), detachedExecution);
Expand Down Expand Up @@ -165,7 +166,6 @@ private void setExecutionToFailed(String scenarioId, ExecutionHistory.Execution
}



public Observable<ScenarioExecutionReport> followExecution(String scenarioId, Long executionId) {
if (scenarioExecutions.containsKey(executionId)) {
return scenarioExecutions.get(executionId).getLeft();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,10 +205,10 @@ private Consumer<TestCase> executeScenarioInCampaign(Campaign campaign, Campaign
// Init scenario execution in campaign report
campaignExecutionReport.startScenarioExecution(testCase, campaign.executionEnvironment(), campaignExecutionReport.userId);
// Execute scenario
ScenarioExecutionReportCampaign scenarioExecutionReport = executeScenario(campaign, testCase, campaignExecutionReport.userId);
ScenarioExecutionReportCampaign scenarioExecutionReport = executeScenario(campaign, testCase, campaignExecutionReport);
// Retry one time if failed
if (campaign.retryAuto && ServerReportStatus.FAILURE.equals(scenarioExecutionReport.status())) {
scenarioExecutionReport = executeScenario(campaign, testCase, campaignExecutionReport.userId);
scenarioExecutionReport = executeScenario(campaign, testCase, campaignExecutionReport);
}
// Add scenario report to campaign's one
ofNullable(scenarioExecutionReport)
Expand All @@ -222,12 +222,12 @@ private Consumer<TestCase> executeScenarioInCampaign(Campaign campaign, Campaign
};
}

private ScenarioExecutionReportCampaign executeScenario(Campaign campaign, TestCase testCase, String userId) {
private ScenarioExecutionReportCampaign executeScenario(Campaign campaign, TestCase testCase, CampaignExecutionReport campaignExecutionReport) {
Long executionId;
String scenarioName;
try {
LOGGER.trace("Execute scenario {} for campaign {}", testCase.id(), campaign.id);
ExecutionRequest executionRequest = buildExecutionRequest(campaign, testCase, userId);
ExecutionRequest executionRequest = buildExecutionRequest(campaign, testCase, campaignExecutionReport);
ScenarioExecutionReport scenarioExecutionReport = scenarioExecutionEngine.execute(executionRequest);
executionId = scenarioExecutionReport.executionId;
scenarioName = scenarioExecutionReport.scenarioName;
Expand All @@ -245,12 +245,12 @@ private ScenarioExecutionReportCampaign executeScenario(Campaign campaign, TestC
return new ScenarioExecutionReportCampaign(testCase.id(), scenarioName, execution.summary());
}

private ExecutionRequest buildExecutionRequest(Campaign campaign, TestCase testCase, String userId) {
private ExecutionRequest buildExecutionRequest(Campaign campaign, TestCase testCase, CampaignExecutionReport campaignExecutionReport) {
// Only composable test cases can use an external dataset, which can be override if set on the campaign
if (isNotBlank(campaign.externalDatasetId) && testCase.id().contains("-")) { // TODO remove after component deprecation
return executionWithDatasetIdOverrideByCampaign(campaign, testCase, userId);
return executionWithDatasetIdOverrideByCampaign(campaign, testCase, campaignExecutionReport.userId);
} else {
return executionWithCombinedParametersFromCampaignAndTestCase(campaign, testCase, userId);
return executionWithCombinedParametersFromCampaignAndTestCase(campaign, testCase, campaignExecutionReport);
}
}

Expand All @@ -263,13 +263,13 @@ private ExecutionRequest executionWithDatasetIdOverrideByCampaign(Campaign campa
);
}

private ExecutionRequest executionWithCombinedParametersFromCampaignAndTestCase(Campaign campaign, TestCase testCase, String userId) {
private ExecutionRequest executionWithCombinedParametersFromCampaignAndTestCase(Campaign campaign, TestCase testCase, CampaignExecutionReport campaignExecutionReport) {
Map<String, String> executionParameters = new HashMap<>(testCase.executionParameters());
executionParameters.putAll(campaign.executionParameters);
DataSet dataset = ofNullable(campaign.externalDatasetId)
.map(datasetRepository::findById)
.orElseGet(() -> datasetRepository.findById(testCase.metadata().defaultDataset()));
return new ExecutionRequest(testCase.usingExecutionParameters(executionParameters), campaign.executionEnvironment(), userId, dataset);
return new ExecutionRequest(testCase.usingExecutionParameters(executionParameters), campaign.executionEnvironment(), campaignExecutionReport.userId, dataset, campaignExecutionReport);
}

private CampaignExecutionReport executeCampaign(Campaign campaign, String userId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import static java.util.Collections.emptyList;
import static java.util.Optional.ofNullable;

import com.chutneytesting.campaign.infra.CampaignExecutionJpaRepository;
import com.chutneytesting.campaign.infra.CampaignJpaRepository;
import com.chutneytesting.campaign.infra.jpa.CampaignExecution;
import com.chutneytesting.execution.infra.storage.jpa.ScenarioExecution;
import com.chutneytesting.execution.infra.storage.jpa.ScenarioExecutionReport;
import com.chutneytesting.scenario.infra.raw.ScenarioJpaRepository;
Expand All @@ -19,6 +21,7 @@
import com.chutneytesting.server.core.domain.scenario.campaign.CampaignExecutionReport;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import org.springframework.stereotype.Component;
Expand All @@ -31,17 +34,20 @@ class DatabaseExecutionHistoryRepository implements ExecutionHistoryRepository {
private final DatabaseExecutionJpaRepository scenarioExecutionsJpaRepository;
private final ScenarioExecutionReportJpaRepository scenarioExecutionReportJpaRepository;
private final CampaignJpaRepository campaignJpaRepository;
private final CampaignExecutionJpaRepository campaignExecutionJpaRepository;
private final TestCaseRepository testCaseRepository;

DatabaseExecutionHistoryRepository(
DatabaseExecutionJpaRepository scenarioExecutionsJpaRepository,
ScenarioExecutionReportJpaRepository scenarioExecutionReportJpaRepository,
ScenarioJpaRepository scenarioJpaRepository,
CampaignJpaRepository campaignJpaRepository, TestCaseRepository testCaseRepository) {
CampaignJpaRepository campaignJpaRepository, TestCaseRepository testCaseRepository,
CampaignExecutionJpaRepository campaignExecutionJpaRepository) {
this.scenarioExecutionsJpaRepository = scenarioExecutionsJpaRepository;
this.scenarioExecutionReportJpaRepository = scenarioExecutionReportJpaRepository;
this.campaignJpaRepository = campaignJpaRepository;
this.testCaseRepository = testCaseRepository;
this.campaignExecutionJpaRepository = campaignExecutionJpaRepository;
}

@Override
Expand Down Expand Up @@ -87,10 +93,14 @@ private ExecutionSummary scenarioExecutionToExecutionSummary(ScenarioExecution s

@Override
public Execution store(String scenarioId, DetachedExecution detachedExecution) throws IllegalStateException {
if(invalidScenarioId(scenarioId)) {
if (invalidScenarioId(scenarioId)) {
throw new IllegalStateException("Scenario id is null or empty");
}
ScenarioExecution scenarioExecution = ScenarioExecution.fromDomain(scenarioId, detachedExecution);
if (detachedExecution.campaignReport().isPresent()) {
Optional<CampaignExecution> campaignExecution = campaignExecutionJpaRepository.findById(detachedExecution.campaignReport().get().executionId.longValue());
scenarioExecution.forCampaignExecution(campaignExecution.get());
}
scenarioExecution = scenarioExecutionsJpaRepository.save(scenarioExecution);
scenarioExecutionReportJpaRepository.save(new ScenarioExecutionReport(scenarioExecution, detachedExecution.report()));
Execution execution = detachedExecution.attach(scenarioExecution.id());
Expand Down

0 comments on commit dd29e96

Please sign in to comment.