diff --git a/karate-core/src/main/java/com/intuit/karate/core/ScenarioRuntime.java b/karate-core/src/main/java/com/intuit/karate/core/ScenarioRuntime.java index 7147d61f9..e2da211db 100644 --- a/karate-core/src/main/java/com/intuit/karate/core/ScenarioRuntime.java +++ b/karate-core/src/main/java/com/intuit/karate/core/ScenarioRuntime.java @@ -30,6 +30,7 @@ import com.intuit.karate.ScenarioActions; import com.intuit.karate.StringUtils; import com.intuit.karate.graal.JsEngine; +import com.intuit.karate.graal.JsValue; import com.intuit.karate.http.ResourceType; import com.intuit.karate.shell.StringLogAppender; @@ -95,7 +96,7 @@ public ScenarioRuntime(FeatureRuntime featureRuntime, Scenario scenario) { List list = new ArrayList(1); FeatureResult fr = new FeatureResult(featureRuntime.featureCall.feature); fr.setCallDepth(1); - fr.addResult(featureRuntime.setupResult); + fr.addResult(featureRuntime.setupResult); list.add(fr); sr.addCallResults(list); featureRuntime.setupResult = null; @@ -291,13 +292,15 @@ private void evalConfigJs(String js, String displayName) { return; } try { - Variable fun = engine.evalJs("(" + js + ")"); - if (!fun.isJsFunction()) { - logger.warn("not a valid js function: {}", displayName); - return; + synchronized (JsValue.LOCK) { + Variable fun = engine.evalJs("(" + js + ")"); + if (!fun.isJsFunction()) { + logger.warn("not a valid js function: {}", displayName); + return; + } + Map map = engine.getOrEvalAsMap(fun); + engine.setVariables(map); } - Map map = engine.getOrEvalAsMap(fun); - engine.setVariables(map); } catch (Exception e) { String message = ">> " + scenario.getDebugInfo() + "\n>> " + displayName + " failed\n>> " + e.getMessage(); error = JsEngine.fromJsEvalException(js, e, message); diff --git a/karate-core/src/test/java/com/intuit/karate/core/parajava/ParallelJavaTest.java b/karate-core/src/test/java/com/intuit/karate/core/parajava/ParallelJavaTest.java index 8cdb23d3d..de53aab60 100644 --- a/karate-core/src/test/java/com/intuit/karate/core/parajava/ParallelJavaTest.java +++ b/karate-core/src/test/java/com/intuit/karate/core/parajava/ParallelJavaTest.java @@ -10,8 +10,9 @@ public class ParallelJavaTest { @Test public void testParallel() { - Results results = Runner.path("classpath:com/intuit/karate/core/parajava/parallel-java.feature") + Results results = Runner.path("classpath:com/intuit/karate/core/parajava") .configDir("classpath:com/intuit/karate/core/parajava") + .karateEnv("foo") .parallel(5); assertEquals(0, results.getFailCount(), results.getErrorMessages()); } diff --git a/karate-core/src/test/java/com/intuit/karate/core/parajava/parallel-java.feature b/karate-core/src/test/java/com/intuit/karate/core/parajava/parallel-java.feature deleted file mode 100644 index b839487c8..000000000 --- a/karate-core/src/test/java/com/intuit/karate/core/parajava/parallel-java.feature +++ /dev/null @@ -1,7 +0,0 @@ -Feature: - -Scenario: test 1 -* match Hello.sayHello("foo") == "hello foo" - -Scenario: test 2 -* match Hello.sayHello("foo") == "hello foo" diff --git a/karate-core/src/test/java/com/intuit/karate/core/parajava/parallel-java1.feature b/karate-core/src/test/java/com/intuit/karate/core/parajava/parallel-java1.feature new file mode 100644 index 000000000..935ff2787 --- /dev/null +++ b/karate-core/src/test/java/com/intuit/karate/core/parajava/parallel-java1.feature @@ -0,0 +1,21 @@ +Feature: + +Scenario: test 1 +* match Hello.sayHello("foo") == "hello foo" +* match addVals(1, 2) == 3 + +Scenario: test 2 +* match Hello.sayHello("foo") == "hello foo" +* match addVals(1, 2) == 3 + +Scenario: test 3 +* match Hello.sayHello("foo") == "hello foo" +* match addVals(1, 2) == 3 + +Scenario: test 4 +* match Hello.sayHello("foo") == "hello foo" +* match addVals(1, 2) == 3 + +Scenario: test 5 +* match Hello.sayHello("foo") == "hello foo" +* match addVals(1, 2) == 3 diff --git a/karate-core/src/test/java/com/intuit/karate/core/parajava/parallel-java2.feature b/karate-core/src/test/java/com/intuit/karate/core/parajava/parallel-java2.feature new file mode 100644 index 000000000..935ff2787 --- /dev/null +++ b/karate-core/src/test/java/com/intuit/karate/core/parajava/parallel-java2.feature @@ -0,0 +1,21 @@ +Feature: + +Scenario: test 1 +* match Hello.sayHello("foo") == "hello foo" +* match addVals(1, 2) == 3 + +Scenario: test 2 +* match Hello.sayHello("foo") == "hello foo" +* match addVals(1, 2) == 3 + +Scenario: test 3 +* match Hello.sayHello("foo") == "hello foo" +* match addVals(1, 2) == 3 + +Scenario: test 4 +* match Hello.sayHello("foo") == "hello foo" +* match addVals(1, 2) == 3 + +Scenario: test 5 +* match Hello.sayHello("foo") == "hello foo" +* match addVals(1, 2) == 3 diff --git a/karate-core/src/test/java/com/intuit/karate/core/parajava/setup.feature b/karate-core/src/test/java/com/intuit/karate/core/parajava/setup.feature index 0b1ec58b9..d00d8e3b7 100644 --- a/karate-core/src/test/java/com/intuit/karate/core/parajava/setup.feature +++ b/karate-core/src/test/java/com/intuit/karate/core/parajava/setup.feature @@ -2,4 +2,6 @@ Feature: Scenario: +* def addVals = function(val1, val2){ return val1 + val2 } * def Hello = Java.type('com.intuit.karate.core.parallel.Hello') +* def BigDecimal = Java.type('java.math.BigDecimal')