Skip to content
Merged
Next Next commit
align karate execution instrumentation ordering
  • Loading branch information
daniel-mohedano committed May 8, 2025
commit b5ca4e866bc163dc775b472886fb84878d710008
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
public class ExecutionContext {

private final TestExecutionPolicy executionPolicy;
private boolean suppressFailures;
private boolean failed;
private long startTimestamp;

Expand All @@ -34,6 +35,16 @@ public boolean getAndResetFailed() {
return failed;
}

public void setSuppressFailures(boolean suppressFailures) {
this.suppressFailures = suppressFailures;
}

public boolean getAndResetSuppressFailures() {
boolean suppressFailures = this.suppressFailures;
this.suppressFailures = false;
return suppressFailures;
}

public TestExecutionPolicy getExecutionPolicy() {
return executionPolicy;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,18 @@ public void methodAdvice(MethodTransformer transformer) {
public static class RetryAdvice {
@Advice.OnMethodEnter
public static void beforeExecute(@Advice.This ScenarioRuntime scenarioRuntime) {
InstrumentationContext.get(Scenario.class, ExecutionContext.class)
.computeIfAbsent(scenarioRuntime.scenario, ExecutionContext::create)
.setStartTimestamp(System.currentTimeMillis());
ExecutionContext executionContext =
InstrumentationContext.get(Scenario.class, ExecutionContext.class)
.computeIfAbsent(scenarioRuntime.scenario, ExecutionContext::create);
executionContext.setStartTimestamp(System.currentTimeMillis());

// Indicate beforehand if the failures should be suppressed. This aligns the ordering with the
// rest of the frameworks
TestExecutionPolicy executionPolicy = executionContext.getExecutionPolicy();
executionContext.setSuppressFailures(executionPolicy.suppressFailures());

scenarioRuntime.magicVariables.putIfAbsent(
KarateUtils.EXECUTION_HISTORY_MAGICVARIABLE, executionPolicy);
}

@Advice.OnMethodExit
Expand Down Expand Up @@ -137,8 +146,7 @@ public static void onAddingStepResult(

executionContext.setFailed(true);

TestExecutionPolicy retryPolicy = executionContext.getExecutionPolicy();
if (retryPolicy.suppressFailures()) {
if (executionContext.getAndResetSuppressFailures()) {
stepResult = new StepResult(stepResult.getStep(), KarateUtils.abortedResult());
stepResult.setFailedReason(result.getError());
stepResult.setErrorIgnored(true);
Expand Down