diff --git a/build.gradle b/build.gradle index b72f98a..e94be9c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'org.springframework.boot' version '2.7.16' + id 'org.springframework.boot' version '2.7.17' id 'io.spring.dependency-management' version '1.1.3' id 'java' // id "org.sonarqube" version "4.2.1.3168" @@ -49,9 +49,10 @@ dependencies { // implementation 'io.springfox:springfox-boot-starter:3.0.0' implementation 'org.apache.httpcomponents:httpclient:4.5.14' -// implementation group: 'org.graalvm.js', name: 'js-scriptengine', version: '23.1.2' -// implementation group: 'org.graalvm.polyglot', name: 'polyglot', version: '23.1.2' -// runtimeOnly group: 'org.graalvm.polyglot', name: 'js-community', version: '23.1.2', ext: 'pom' + + implementation("org.graalvm.polyglot:polyglot:24.1.0") + implementation("org.graalvm.polyglot:js:24.1.0") + implementation 'org.apache.commons:commons-lang3:3.12.0' implementation 'org.apache.commons:commons-math3:3.6.1' diff --git a/src/main/java/com/eactive/testmaster/loadtest/service/VirtualUser.java b/src/main/java/com/eactive/testmaster/loadtest/service/VirtualUser.java index ac21e41..c1a8258 100644 --- a/src/main/java/com/eactive/testmaster/loadtest/service/VirtualUser.java +++ b/src/main/java/com/eactive/testmaster/loadtest/service/VirtualUser.java @@ -17,10 +17,10 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; import java.util.regex.Pattern; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; -import javax.script.ScriptException; import org.apache.commons.lang3.SerializationUtils; +import org.graalvm.polyglot.Context; +import org.graalvm.polyglot.HostAccess; +import org.graalvm.polyglot.Value; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -193,35 +193,44 @@ public class VirtualUser implements Runnable { } } - private void executePreRequestScript(ApiRequestDTO apiRequest) { - ScriptEngineManager manager = new ScriptEngineManager(); - ScriptEngine engine = manager.getEngineByName("nashorn"); - engine.put("console", new Console()); - engine.put("globals", globals); - engine.put("variables", variables); - engine.put("request", apiRequest); - try { - if(apiRequest.getPreRequestScript() != null) - engine.eval(apiRequest.getPreRequestScript()); - } catch (ScriptException e) { - logger.error("Error executing pre-request script", e); + public void executePreRequestScript(ApiRequestDTO apiRequest) { + try (Context context = Context.newBuilder("js") + .allowHostAccess(HostAccess.ALL) + .allowHostClassLookup(className -> true) + .build()) { + + Value bindings = context.getBindings("js"); + bindings.putMember("console", new Console()); + bindings.putMember("globals", globals); + bindings.putMember("variables", variables); + bindings.putMember("request", apiRequest); + + if(apiRequest.getPreRequestScript() != null) { + context.eval("js", apiRequest.getPreRequestScript()); + } + } catch (Exception e) { + logger.error("Error executing post-request script", e); e.printStackTrace(); } } - private void executePostRequestScript(ApiRequestDTO apiRequest, ApiResponse response) { - ScriptEngineManager manager = new ScriptEngineManager(); - ScriptEngine engine = manager.getEngineByName("nashorn"); - engine.put("console", new Console()); - engine.put("globals", globals); - engine.put("variables", variables); - engine.put("request", apiRequest); - engine.put("response", response); - try { - if (apiRequest.getPostRequestScript() != null){ - engine.eval(apiRequest.getPostRequestScript()); + public void executePostRequestScript(ApiRequestDTO apiRequest, ApiResponse response) { + try (Context context = Context.newBuilder("js") + .allowHostAccess(HostAccess.ALL) + .allowHostClassLookup(className -> true) + .build()) { + + Value bindings = context.getBindings("js"); + bindings.putMember("console", new Console()); + bindings.putMember("globals", globals); + bindings.putMember("variables", variables); + bindings.putMember("request", apiRequest); + bindings.putMember("response", response); + + if (apiRequest.getPostRequestScript() != null) { + context.eval("js", apiRequest.getPostRequestScript()); } - } catch (ScriptException e) { + } catch (Exception e) { logger.error("Error executing post-request script", e); e.printStackTrace(); }