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"
+ }
+}