You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2019/05/22 08:38:28 UTC

[sling-org-apache-sling-scripting-core] 03/03: SLING-8425 - NPE in SlingScriptEngineManager when Sling is run on GraalVM

This is an automated email from the ASF dual-hosted git repository.

radu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-core.git

commit 1b5b0f13ac8190bb02be6c3bc6018e696e20b355
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Wed May 22 10:35:12 2019 +0200

    SLING-8425 - NPE in SlingScriptEngineManager when Sling is run on GraalVM
    
    * corrected SlingScriptEngineManagerTest.testOSGiRegisteredFactoriesDifferentServiceRanking
---
 .../core/impl/jsr223/SlingScriptEngineManager.java |  6 +--
 .../impl/jsr223/SlingScriptEngineManagerTest.java  | 57 ++++++++--------------
 2 files changed, 22 insertions(+), 41 deletions(-)

diff --git a/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager.java b/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager.java
index fe7b425..14cb13a 100644
--- a/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager.java
+++ b/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager.java
@@ -296,21 +296,21 @@ public class SlingScriptEngineManager extends ScriptEngineManager implements Bun
             if (extension != null && !extension.isEmpty()) {
                 internalManager.registerEngineExtension(extension, factory);
             } else {
-                LOG.warn("Could not register an empty or null extension for script engine factory {}", factory.getEngineName());
+                LOG.warn("Could not register an empty or null extension for script engine factory {}.", factory.getEngineName());
             }
         }
         for (String mimeType : factory.getMimeTypes()) {
             if (mimeType != null && !mimeType.isEmpty()) {
                 internalManager.registerEngineMimeType(mimeType, factory);
             } else {
-                LOG.warn("Could not register an empty or null mime type for script engine factory {}", factory.getEngineName());
+                LOG.warn("Could not register an empty or null mime type for script engine factory {}.", factory.getEngineName());
             }
         }
         for (String name : factory.getNames()) {
             if (name != null && !name.isEmpty()) {
                 internalManager.registerEngineName(name, factory);
             } else {
-                LOG.warn("Could not register an empty or null engine name for script engine factory {}", factory.getEngineName());
+                LOG.warn("Could not register an empty or null engine name for script engine factory {}.", factory.getEngineName());
             }
         }
     }
diff --git a/src/test/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManagerTest.java b/src/test/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManagerTest.java
index e737ede..4f28324 100644
--- a/src/test/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManagerTest.java
+++ b/src/test/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManagerTest.java
@@ -40,8 +40,6 @@ import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleEvent;
 import org.osgi.framework.Constants;
@@ -75,17 +73,15 @@ public class SlingScriptEngineManagerTest {
         int jvmProvidedScriptEngineFactoryCount = jvmProvidedScriptEngineFactoryCount();
         ScriptEngineManager scriptEngineManager = context.getService(ScriptEngineManager.class);
         assertNotNull("Expected a ScriptEngineManager would be already registered.", scriptEngineManager);
-        {
-            int expectedScriptEngineFactories = jvmProvidedScriptEngineFactoryCount;
-            assertEquals("The ScriptEngineManager should have had " + expectedScriptEngineFactories + " ScriptEngineFactory registered.", expectedScriptEngineFactories, scriptEngineManager
-                    .getEngineFactories().size());
-        }
+        assertEquals("The ScriptEngineManager should have had " + jvmProvidedScriptEngineFactoryCount + " ScriptEngineFactory registered.", jvmProvidedScriptEngineFactoryCount, scriptEngineManager.getEngineFactories().size());
     }
 
     @Test
     public void testOSGiRegisteredFactoriesDifferentServiceRanking() throws Exception {
+        int numberOfOSGiRegisteredFactories = 2;
         int jvmProvidedScriptEngineFactoryCount = jvmProvidedScriptEngineFactoryCount();
-        int expectedEvents = jvmProvidedScriptEngineFactoryCount + 1;
+        // we register 2 factories, then unregister 1 of them
+        int expectedEvents = 3;
         CountDownLatch latch = new CountDownLatch(expectedEvents);
         TestEventHandler eventHandler = new TestEventHandler
                 (latch, "org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager/UPDATED");
@@ -113,24 +109,20 @@ public class SlingScriptEngineManagerTest {
         ScriptEngineManager scriptEngineManager = context.getService(ScriptEngineManager.class);
         assertNotNull("Expected a ScriptEngineManager would be already registered.", scriptEngineManager);
         List<ScriptEngineFactory> factories = scriptEngineManager.getEngineFactories();
-        {
-            int expectedScriptEngineFactories = jvmProvidedScriptEngineFactoryCount + 2;
-            assertEquals("The ScriptEngineManager should have had " + expectedScriptEngineFactories + " ScriptEngineFactories registered.", expectedScriptEngineFactories, factories.size());
-        }
-        assertEquals(f1.getEngineName(), factories.get(jvmProvidedScriptEngineFactoryCount + 1).getEngineName());
-        assertEquals(f2.getEngineName(), factories.get(jvmProvidedScriptEngineFactoryCount).getEngineName());
+        int expectedScriptEngineFactories = numberOfOSGiRegisteredFactories + jvmProvidedScriptEngineFactoryCount;
+        assertEquals("The ScriptEngineManager should have had " + expectedScriptEngineFactories + " ScriptEngineFactories registered.", expectedScriptEngineFactories, factories.size());
+        assertEquals(f1.getEngineName(), factories.get(expectedScriptEngineFactories - 1).getEngineName());
+        assertEquals(f2.getEngineName(), factories.get(expectedScriptEngineFactories - 2).getEngineName());
 
         SlingScriptEngineManager slingScriptEngineManager = context.getService(SlingScriptEngineManager.class);
         assertEquals(2, slingScriptEngineManager.getProperties(f1).get(Constants.SERVICE_RANKING));
 
         f1SR.unregister();
+        expectedScriptEngineFactories--;
 
         factories = scriptEngineManager.getEngineFactories();
-        {
-            int expectedScriptEngineFactories = jvmProvidedScriptEngineFactoryCount + 1;
-            assertEquals("The ScriptEngineManager should have had " + expectedScriptEngineFactories + " ScriptEngineFactories registered.", expectedScriptEngineFactories, factories.size());
-        }
-        assertEquals(f2.getEngineName(), factories.get(jvmProvidedScriptEngineFactoryCount).getEngineName());
+        assertEquals("The ScriptEngineManager should have had " + expectedScriptEngineFactories + " ScriptEngineFactories registered.", expectedScriptEngineFactories, factories.size());
+        assertEquals(f2.getEngineName(), factories.get(expectedScriptEngineFactories - 1).getEngineName());
 
         assertEquals(f2, scriptEngineManager.getEngineByName("f2").getFactory());
         assertEquals(f2, scriptEngineManager.getEngineByExtension("f2").getFactory());
@@ -178,20 +170,16 @@ public class SlingScriptEngineManagerTest {
         assertNotNull("Expected that the SlingScriptEngineManager would already be registered.", slingScriptEngineManager);
         slingScriptEngineManager.bundleChanged(bundleEvent);
         List<ScriptEngineFactory> factories = slingScriptEngineManager.getEngineFactories();
-        {
-            int expectedScriptEngineFactories = jvmProvidedScriptEngineFactoryCount + 1;
-            assertEquals("Expected " + expectedScriptEngineFactories + " ScriptEngineFactories.", expectedScriptEngineFactories, factories.size());
-        }
-        assertEquals("Dummy Scripting Engine", factories.get(jvmProvidedScriptEngineFactoryCount).getEngineName());
+        int expectedScriptEngineFactories = jvmProvidedScriptEngineFactoryCount + 1;
+        assertEquals("Expected " + expectedScriptEngineFactories + " ScriptEngineFactories.", expectedScriptEngineFactories, factories.size());
+        assertEquals("Dummy Scripting Engine", factories.get(expectedScriptEngineFactories - 1).getEngineName());
 
         bundleEvent = new BundleEvent(BundleEvent.STOPPED, bundle);
         slingScriptEngineManager.bundleChanged(bundleEvent);
+        expectedScriptEngineFactories--;
+
         factories = slingScriptEngineManager.getEngineFactories();
-        {
-            int expectedScriptEngineFactories = jvmProvidedScriptEngineFactoryCount;
-            assertEquals("Expected " + expectedScriptEngineFactories + " ScriptEngineFactory.", expectedScriptEngineFactories, factories.size());
-        }
-        //assertEquals("Oracle Nashorn", factories.get(0).getEngineName());
+        assertEquals("Expected " + expectedScriptEngineFactories + " ScriptEngineFactory.", expectedScriptEngineFactories, factories.size());
         assertNull("Did not expect references to the already unregistered DummyScriptEngineFactory", slingScriptEngineManager
                 .getEngineByExtension("dummy"));
         assertNull("Did not expect references to the already unregistered DummyScriptEngineFactory",
@@ -230,16 +218,9 @@ public class SlingScriptEngineManagerTest {
     private File createFactoryFile() throws IOException {
         File tempFile = File.createTempFile("scriptEngine", "tmp");
         tempFile.deleteOnExit();
-
-        FileOutputStream fos = null;
-        try {
-            fos = new FileOutputStream(tempFile);
+        try (FileOutputStream fos = new FileOutputStream(tempFile)) {
             fos.write("#I'm a test-comment\n".getBytes());
             fos.write(SCRIPT_ENGINE_FACTORY.getName().getBytes());
-        } finally {
-            if (fos != null) {
-                fos.close();
-            }
         }
         return tempFile;
     }
@@ -251,7 +232,7 @@ public class SlingScriptEngineManagerTest {
         CountDownLatch latch;
         int processedEvents = 0;
 
-        public TestEventHandler(CountDownLatch latch, String topic) {
+        TestEventHandler(CountDownLatch latch, String topic) {
             this.topic = topic;
             this.latch = latch;
         }