diff options
-rw-r--r-- | utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtils.java | 34 | ||||
-rw-r--r-- | utils-test/src/test/java/org/onap/policy/common/utils/gson/GsonTestUtilsTest.java | 6 |
2 files changed, 28 insertions, 12 deletions
diff --git a/utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtils.java b/utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtils.java index bfdca97c..d3354e49 100644 --- a/utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtils.java +++ b/utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtils.java @@ -61,7 +61,7 @@ public class GsonTestUtils { /** * Engine used to interpolate strings before they're compared. */ - private static volatile ScriptEngine engine = null; + private static volatile ScriptEngine engineInstance = null; /** * Used to encode and decode an object via gson. @@ -198,13 +198,9 @@ public class GsonTestUtils { return text; } - // create the engine and bind the object to the variable, "obj" - if (engine == null) { - // race condition here, but it's ok to overwrite with a new engine - engine = new ScriptEngineManager().getEngineByName("javascript"); - } - - Bindings bindings = engine.createBindings(); + // bind the object to the variable, "obj" + ScriptEngine eng = getEngine(); + Bindings bindings = eng.createBindings(); bindings.put("obj", object); // work our way through the text, interpolating script elements as we go @@ -222,11 +218,15 @@ public class GsonTestUtils { // interpolate the script String script = mat.group(1); try { - Object result = engine.eval(script, bindings); + /* + * Note: must use "eng" instead of "engineInstance" to ensure that we use + * the same engine that's associated with the bindings. + */ + Object result = eng.eval(script, bindings); bldr.append(result == null ? "null" : result.toString()); } catch (ScriptException e) { - throw new RuntimeException("cannot expand element: " + mat.group(), e); + throw new JsonParseException("cannot expand element: " + mat.group(), e); } } @@ -237,6 +237,20 @@ public class GsonTestUtils { } /** + * Gets the script engine instance. + * + * @return the script engine + */ + private static ScriptEngine getEngine() { + if (engineInstance == null) { + // race condition here, but it's ok to overwrite with a new engine + engineInstance = new ScriptEngineManager().getEngineByName("javascript"); + } + + return engineInstance; + } + + /** * Encodes an object using gson. * * @param object the object to be encoded diff --git a/utils-test/src/test/java/org/onap/policy/common/utils/gson/GsonTestUtilsTest.java b/utils-test/src/test/java/org/onap/policy/common/utils/gson/GsonTestUtilsTest.java index 39cde7dc..58beb2a6 100644 --- a/utils-test/src/test/java/org/onap/policy/common/utils/gson/GsonTestUtilsTest.java +++ b/utils-test/src/test/java/org/onap/policy/common/utils/gson/GsonTestUtilsTest.java @@ -135,8 +135,10 @@ public class GsonTestUtilsTest { result = utils.applyScripts("use ${obj.text} this", data); assertEquals("use null this", result); - assertThatThrownBy(() -> utils.applyScripts("use ${obj.text} this", null)).isInstanceOf(RuntimeException.class) - .hasCauseInstanceOf(ScriptException.class).hasMessage("cannot expand element: ${obj.text}"); + assertThatThrownBy(() -> utils.applyScripts("use ${obj.text} this", null)) + .isInstanceOf(JsonParseException.class) + .hasCauseInstanceOf(ScriptException.class) + .hasMessage("cannot expand element: ${obj.text}"); } @Test |