You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2020/03/27 13:21:32 UTC

[sling-whiteboard] branch master updated: Content-based tests setup, ready to plug in the actual GraphQL engine

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

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


The following commit(s) were added to refs/heads/master by this push:
     new e09d8fa  Content-based tests setup, ready to plug in the actual GraphQL engine
e09d8fa is described below

commit e09d8faeb6af7150074e68311e3a589d54277f6a
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Fri Mar 27 14:18:03 2020 +0100

    Content-based tests setup, ready to plug in the actual GraphQL engine
---
 graphql-scripting/pom.xml                          | 34 +++++++++++--
 .../gql/internal/GraphQLScriptEngine.java          | 16 ++++---
 ...phQLScriptEngineIT.java => BasicContentIT.java} | 37 +++++++++------
 .../graphql/it/GraphQLScriptEngineIT.java          |  1 -
 .../graphql/it/GraphQLScriptingTestSupport.java    | 55 ++++++++++++++++++++--
 .../initial-content/apps/graphql/test/one/json.gql |  1 +
 .../resources/initial-content/content/graphql.json | 12 +++++
 7 files changed, 129 insertions(+), 27 deletions(-)

diff --git a/graphql-scripting/pom.xml b/graphql-scripting/pom.xml
index 9ccfc86..9d0727f 100644
--- a/graphql-scripting/pom.xml
+++ b/graphql-scripting/pom.xml
@@ -39,6 +39,9 @@
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     <sling.java.version>8</sling.java.version>
     <org.ops4j.pax.exam.version>4.13.1</org.ops4j.pax.exam.version>
+
+    <!-- To debug the pax process, override this with -D -->
+    <pax.vm.options>-Xmx512M</pax.vm.options>
   </properties>
 
   <build>
@@ -67,6 +70,10 @@
               <name>bundle.filename</name>
               <value>${basedir}/target/${project.build.finalName}.jar</value>
             </property>
+            <property>
+              <name>pax.vm.options</name>
+              <value>${pax.vm.options}</value>
+            </property>
           </systemProperties>
         </configuration>
       </plugin>
@@ -116,11 +123,17 @@
     <dependency>
       <groupId>org.apache.sling</groupId>
       <artifactId>org.apache.sling.api</artifactId>
-      <version>2.7.0</version>
+      <version>2.18.4</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.sling</groupId>
+      <artifactId>org.apache.sling.engine</artifactId>
+      <version>2.6.22</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.sling</groupId>
       <artifactId>org.apache.sling.resource.presence</artifactId>
       <version>0.0.2</version>
       <scope>test</scope>
@@ -143,19 +156,34 @@
       <version>3.1.0</version>
       <scope>test</scope>
     </dependency>
-    <!-- logging -->
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>2.4</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>javax.servlet-api</artifactId>
+      <scope>test</scope>
+    </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <scope>provided</scope>
     </dependency>
-    <!-- testing -->
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
+      <groupId>org.apache.sling</groupId>
+      <artifactId>org.apache.sling.servlet-helpers</artifactId>
+      <version>1.3.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>org.ops4j.pax.exam</groupId>
       <artifactId>pax-exam</artifactId>
       <version>${org.ops4j.pax.exam.version}</version>
diff --git a/graphql-scripting/src/main/java/org/apache/sling/scripting/gql/internal/GraphQLScriptEngine.java b/graphql-scripting/src/main/java/org/apache/sling/scripting/gql/internal/GraphQLScriptEngine.java
index a7a5689..812d002 100644
--- a/graphql-scripting/src/main/java/org/apache/sling/scripting/gql/internal/GraphQLScriptEngine.java
+++ b/graphql-scripting/src/main/java/org/apache/sling/scripting/gql/internal/GraphQLScriptEngine.java
@@ -22,6 +22,7 @@ package org.apache.sling.scripting.gql.internal;
 
 import java.io.IOException;
 import java.io.Reader;
+import java.io.StringReader;
 import java.util.Date;
 
 import javax.script.AbstractScriptEngine;
@@ -30,6 +31,8 @@ import javax.script.ScriptContext;
 import javax.script.ScriptEngineFactory;
 import javax.script.ScriptException;
 
+import org.apache.commons.io.IOUtils;
+
 public class GraphQLScriptEngine extends AbstractScriptEngine {
 
     private final GraphQLScriptEngineFactory factory;
@@ -40,8 +43,14 @@ public class GraphQLScriptEngine extends AbstractScriptEngine {
 
     @Override
     public Object eval(String script, ScriptContext context) throws ScriptException {
+        return eval(new StringReader(script), context);
+    }
+
+    @Override
+    public Object eval(Reader reader, ScriptContext context) throws ScriptException {
         try {
-            context.getWriter().write("Hey this is " + getClass().getName() + " at " + new Date());
+            // TODO no execution so far...
+            IOUtils.copy(reader, context.getWriter());
         } catch(IOException e) {
             throw new ScriptException(e);
         }
@@ -49,11 +58,6 @@ public class GraphQLScriptEngine extends AbstractScriptEngine {
     }
 
     @Override
-    public Object eval(Reader reader, ScriptContext context) throws ScriptException {
-        return eval("", context);
-    }
-
-    @Override
     public Bindings createBindings() {
         return null;
     }
diff --git a/graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/GraphQLScriptEngineIT.java b/graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/BasicContentIT.java
similarity index 57%
copy from graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/GraphQLScriptEngineIT.java
copy to graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/BasicContentIT.java
index 24666a1..b2ca6f1 100644
--- a/graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/GraphQLScriptEngineIT.java
+++ b/graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/BasicContentIT.java
@@ -18,12 +18,9 @@
  */
 package org.apache.sling.scripting.graphql.it;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import javax.script.ScriptEngine;
-import javax.script.ScriptException;
+import javax.inject.Inject;
 
+import org.apache.sling.resource.presence.ResourcePresence;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Configuration;
@@ -31,22 +28,34 @@ import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.PaxExam;
 import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
 import org.ops4j.pax.exam.spi.reactors.PerClass;
+import org.ops4j.pax.exam.util.Filter;
+
+import static org.junit.Assert.assertTrue;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.factoryConfiguration;
 
 @RunWith(PaxExam.class)
 @ExamReactorStrategy(PerClass.class)
-public class GraphQLScriptEngineIT extends GraphQLScriptingTestSupport {
+public class BasicContentIT extends GraphQLScriptingTestSupport {
+
+    @Inject
+    @Filter(value = "(path=/apps/graphql/test/one/json.gql)")
+    private ResourcePresence resourcePresence;
 
     @Configuration
     public Option[] configuration() {
-        return new Option[] { baseConfiguration() };
+        return new Option[]{
+            baseConfiguration(),
+            factoryConfiguration("org.apache.sling.resource.presence.internal.ResourcePresenter")
+                .put("path", "/apps/graphql/test/one/json.gql")
+                .asOption(),
+        };
     }
 
     @Test
-    public void testEnginePresent() throws ScriptException {
-        assertNotNull("Expected configAdmin to be present", configAdmin);
-        assertNotNull("Expecting ScriptEngineFactory to be present", scriptEngineFactory);
-        final ScriptEngine engine = scriptEngineFactory.getScriptEngine();
-        assertNotNull("Expecting ScriptEngine to be provided", engine);
-        assertEquals("Expecting our GraphQLScriptEngine", "GraphQLScriptEngine", engine.getClass().getSimpleName());
+    public void testJsonContent() throws Exception {
+        final String content = getContent("/graphql/one.json");
+        assertTrue("Expecting the right content:" + content, 
+            content.contains("One day this will be a GraphQL query"));
     }
-}
\ No newline at end of file
+
+}
diff --git a/graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/GraphQLScriptEngineIT.java b/graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/GraphQLScriptEngineIT.java
index 24666a1..f992b66 100644
--- a/graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/GraphQLScriptEngineIT.java
+++ b/graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/GraphQLScriptEngineIT.java
@@ -43,7 +43,6 @@ public class GraphQLScriptEngineIT extends GraphQLScriptingTestSupport {
 
     @Test
     public void testEnginePresent() throws ScriptException {
-        assertNotNull("Expected configAdmin to be present", configAdmin);
         assertNotNull("Expecting ScriptEngineFactory to be present", scriptEngineFactory);
         final ScriptEngine engine = scriptEngineFactory.getScriptEngine();
         assertNotNull("Expecting ScriptEngine to be provided", engine);
diff --git a/graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/GraphQLScriptingTestSupport.java b/graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/GraphQLScriptingTestSupport.java
index 57718c2..414546a 100644
--- a/graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/GraphQLScriptingTestSupport.java
+++ b/graphql-scripting/src/test/java/org/apache/sling/scripting/graphql/it/GraphQLScriptingTestSupport.java
@@ -21,6 +21,10 @@ package org.apache.sling.scripting.graphql.it;
 import javax.inject.Inject;
 import javax.script.ScriptEngineFactory;
 
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
+import org.apache.sling.servlethelpers.MockSlingHttpServletRequest;
+import org.apache.sling.servlethelpers.MockSlingHttpServletResponse;
 import org.apache.sling.testing.paxexam.TestSupport;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.ProbeBuilder;
@@ -29,11 +33,19 @@ import org.ops4j.pax.exam.options.ModifiableCompositeOption;
 import org.ops4j.pax.exam.util.Filter;
 import org.osgi.service.cm.ConfigurationAdmin;
 
+import org.apache.sling.engine.SlingRequestProcessor;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingQuickstartOakTar;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingResourcePresence;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingScripting;
 import static org.ops4j.pax.exam.CoreOptions.composite;
 import static org.ops4j.pax.exam.CoreOptions.junitBundles;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.when;
+import static org.ops4j.pax.exam.CoreOptions.vmOption;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
 
 public abstract class GraphQLScriptingTestSupport extends TestSupport {
 
@@ -42,15 +54,25 @@ public abstract class GraphQLScriptingTestSupport extends TestSupport {
     protected ScriptEngineFactory scriptEngineFactory;
 
     @Inject
-    protected ConfigurationAdmin configAdmin;
+    private ResourceResolverFactory resourceResolverFactory;
+
+    @Inject
+    protected SlingRequestProcessor requestProcessor;
 
     public ModifiableCompositeOption baseConfiguration() {
+        final String vmOpt = System.getProperty("pax.vm.options");
+
         return composite(
+            when(vmOpt != null).useOptions(
+                vmOption(vmOpt)
+            ),
             super.baseConfiguration(),
             slingQuickstart(),
             testBundle("bundle.filename"),
-
-            // testing
+            newConfiguration("org.apache.sling.jcr.base.internal.LoginAdminWhitelist")
+                .put("whitelist.bundles.regexp", "^PAXEXAM.*$")
+                .asOption(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlet-helpers").versionAsInProject(),
             slingResourcePresence(),
             junitBundles()
         );
@@ -71,4 +93,31 @@ public abstract class GraphQLScriptingTestSupport extends TestSupport {
         );
     }
 
+    protected MockSlingHttpServletResponse executeRequest(final String method, final String path, final int expectedStatus) throws Exception {
+        final ResourceResolver resourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
+        assertNotNull("Expecting ResourceResolver", resourceResolver);
+        final MockSlingHttpServletRequest request = new MockSlingHttpServletRequest(resourceResolver) {
+            @Override
+            public String getMethod() {
+                return method;
+            }
+        };
+
+        request.setPathInfo(path);
+        final MockSlingHttpServletResponse response = new MockSlingHttpServletResponse();
+        requestProcessor.processRequest(request, response, resourceResolver);
+
+        if (expectedStatus > 0) {
+            assertEquals("Expected status " + expectedStatus + " for " + method
+                + " at " + path, expectedStatus, response.getStatus());
+        }
+
+        return response;
+    }
+
+    protected String getContent(String path) throws Exception {
+        return executeRequest("GET", path, 200).getOutputAsString();
+    }
+
+
 }
diff --git a/graphql-scripting/src/test/resources/initial-content/apps/graphql/test/one/json.gql b/graphql-scripting/src/test/resources/initial-content/apps/graphql/test/one/json.gql
new file mode 100644
index 0000000..32539ce
--- /dev/null
+++ b/graphql-scripting/src/test/resources/initial-content/apps/graphql/test/one/json.gql
@@ -0,0 +1 @@
+One day this will be a GraphQL query
\ No newline at end of file
diff --git a/graphql-scripting/src/test/resources/initial-content/content/graphql.json b/graphql-scripting/src/test/resources/initial-content/content/graphql.json
new file mode 100644
index 0000000..b79769c
--- /dev/null
+++ b/graphql-scripting/src/test/resources/initial-content/content/graphql.json
@@ -0,0 +1,12 @@
+{
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "graphql/test/root",
+    "sling:resourceSuperType": "graphql/test/god",
+    "title": "Testing GraphQL scripting",
+    "one": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "graphql/test/one",
+        "sling:resourceSuperType": "graphql/test/root",
+        "title": "GraphQL one"
+    }
+}