Skip to content

Commit 044b926

Browse files
Add failure details when AzureEngine test validation fails.
1 parent 61f961a commit 044b926

File tree

4 files changed

+28
-18
lines changed

4 files changed

+28
-18
lines changed

jmeter-java-dsl-azure/src/main/java/us/abstracta/jmeter/javadsl/azure/AzureEngine.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.util.Locale;
1313
import java.util.Map;
1414
import java.util.concurrent.TimeoutException;
15+
import java.util.function.Function;
1516
import java.util.function.Predicate;
1617
import org.apache.http.entity.ContentType;
1718
import org.apache.jorphan.collections.HashTree;
@@ -392,31 +393,32 @@ private void awaitProvisionedResourceGroup(ResourceGroup group)
392393
throws IOException, InterruptedException, TimeoutException {
393394
awaitStatus(group, () -> apiClient.findResourceGroup(group.getName(), group.getSubscription()),
394395
ResourceGroup::isPendingProvisioning, ResourceGroup::isProvisioned, PROVISIONING_TIMEOUT,
395-
"resource group provisioning", "Azure usage");
396+
"resource group provisioning", "Azure usage", null);
396397
}
397398

398399
private <T> void awaitStatus(T entity, EntityProvider<T> entityProvider,
399400
Predicate<T> checkIntermediateStatus, Predicate<T> checkSuccessStatus, Duration timeout,
400-
String waitName, String detailsName)
401+
String waitName, String detailsName, Function<T, String> failureDetailExtractor)
401402
throws InterruptedException, TimeoutException, IOException {
402403
if (checkSuccessStatus.test(entity)) {
403404
return;
404405
}
405-
LOG.info("Waiting for " + waitName + "... ");
406+
LOG.info("Waiting for {}... ", waitName);
406407
Instant start = Instant.now();
407408
while (!hasTimedOut(timeout, start) && checkIntermediateStatus.test(entity)) {
408409
Thread.sleep(STATUS_POLL_PERIOD.toMillis());
409410
entity = entityProvider.get();
410411
}
411412
if (checkIntermediateStatus.test(entity)) {
412-
throw new TimeoutException(
413-
"Timeout while waiting for " + waitName + " after " + prettyDuration(timeout)
414-
+ ". You may try executing again, or create an issue in jmeter-java-dsl GitHub "
415-
+ "repository with " + detailsName + " details.");
413+
throw new TimeoutException(String.format("Timeout while waiting for %s after %s. "
414+
+ "You may try executing again, or create an issue in jmeter-java-dsl GitHub repository "
415+
+ "with %s details.", waitName, prettyDuration(timeout), detailsName));
416416
} else if (!checkSuccessStatus.test(entity)) {
417-
throw new IllegalArgumentException(
418-
firstLetterToUpper(waitName) + " failed. Create an issue in jmeter-java-dsl GitHub "
419-
+ "repository with " + detailsName + " details.");
417+
throw new IllegalArgumentException(String.format("%s failed%s. "
418+
+ "Create an issue in jmeter-java-dsl GitHub repository with %s details.",
419+
firstLetterToUpper(waitName),
420+
failureDetailExtractor != null ? " due to: " + failureDetailExtractor.apply(entity) : "",
421+
detailsName));
420422
}
421423
}
422424

@@ -444,7 +446,7 @@ private void awaitProvisionedTestResource(LoadTestResource testResource)
444446
awaitStatus(testResource,
445447
() -> apiClient.findTestResource(testResource.getName(), testResource.getResourceGroup()),
446448
LoadTestResource::isPendingProvisioning, LoadTestResource::isProvisioned,
447-
PROVISIONING_TIMEOUT, "test resource provisioning", "Azure usage");
449+
PROVISIONING_TIMEOUT, "test resource provisioning", "Azure usage", null);
448450
}
449451

450452
private LoadTest createLoadTest(LoadTestResource testResource) throws IOException {
@@ -498,7 +500,8 @@ private void awaitValidatedTestFile(LoadTest loadTest)
498500
LOG.info("Validating test script");
499501
EntityProvider<LoadTest> testProvider = () -> apiClient.findTestById(loadTest.getTestId());
500502
awaitStatus(testProvider.get(), testProvider, LoadTest::isPendingValidation,
501-
LoadTest::isSuccessValidation, VALIDATION_TIMEOUT, "test script validation", "test plan");
503+
LoadTest::isSuccessValidation, VALIDATION_TIMEOUT, "test script validation", "test plan",
504+
LoadTest::getValidationFailureDetails);
502505
}
503506

504507
private String solveTestRunName() {

jmeter-java-dsl-azure/src/main/java/us/abstracta/jmeter/javadsl/azure/AzureTestStopper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ protected void stopTestExecution() {
7878
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
7979
String auth = "Bearer " + getAccessToken(tenantId, clientId, clientSecret, httpClient);
8080
try {
81-
stopTestRun(testRunUrl, auth, httpClient);
8281
setTestRunStopMessage(getStopMessage(), testRunUrl, testId, tenantId, auth, httpClient);
82+
stopTestRun(testRunUrl, auth, httpClient);
8383
} catch (AzureApiException e) {
8484
if (e.statusCode != 400 || !"TestRunAlreadyFinished".equals(e.getErrorCode())) {
8585
throw e;

jmeter-java-dsl-azure/src/main/java/us/abstracta/jmeter/javadsl/azure/api/FileInfo.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@ public class FileInfo {
77

88
private final String fileName;
99
private final String validationStatus;
10+
private final String validationFailureDetails;
1011

1112
@JsonCreator
1213
public FileInfo(@JsonProperty("fileName") String fileName,
13-
@JsonProperty("validationStatus") String validationStatus) {
14+
@JsonProperty("validationStatus") String validationStatus,
15+
@JsonProperty("validationFailureDetails") String validationFailureDetails) {
1416
this.fileName = fileName;
1517
this.validationStatus = validationStatus;
18+
this.validationFailureDetails = validationFailureDetails;
1619
}
1720

1821
public String getFileName() {
@@ -23,4 +26,8 @@ public String getValidationStatus() {
2326
return validationStatus;
2427
}
2528

29+
public String getValidationFailureDetails() {
30+
return validationFailureDetails;
31+
}
32+
2633
}

jmeter-java-dsl-azure/src/main/java/us/abstracta/jmeter/javadsl/azure/api/LoadTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,6 @@ public String getUrl() {
8585
}
8686
}
8787

88-
public void removeTestScriptFile() {
89-
inputArtifacts.testScriptFileInfo = null;
90-
}
91-
9288
@JsonIgnore
9389
public boolean isPendingValidation() {
9490
String validationStatus = getValidationStatus();
@@ -108,6 +104,10 @@ public boolean isSuccessValidation() {
108104
return validationStatus == null || "VALIDATION_SUCCESS".equals(validationStatus);
109105
}
110106

107+
public String getValidationFailureDetails() {
108+
return inputArtifacts.testScriptFileInfo.getValidationFailureDetails();
109+
}
110+
111111
public static class LoadTestConfiguration {
112112

113113
private int engineInstances;

0 commit comments

Comments
 (0)