Author: sseifert
Date: Sat May 16 07:06:55 2015
New Revision: 1679694
URL: http://svn.apache.org/r1679694
Log:
unit tests
Added:
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderTest.java
- copied, changed from r1679609,
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderFactoryTest.java
Removed:
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderFactoryTest.java
Modified:
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/pom.xml
Modified: sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/pom.xml
URL:
http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/pom.xml?rev=1679694&r1=1679693&r2=1679694&view=diff
==============================================================================
--- sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/pom.xml (original)
+++ sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/pom.xml Sat May 16
07:06:55 2015
@@ -86,11 +86,6 @@
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.testing.sling-mock</artifactId>
- <version>1.2.0</version>
- </dependency>
<dependency>
<groupId>junit</groupId>
@@ -103,6 +98,18 @@
<version>1.10.19</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.testing.sling-mock</artifactId>
+ <version>1.2.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.jcr</groupId>
+ <artifactId>jcr</artifactId>
+ <version>2.0</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
Copied:
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderTest.java
(from r1679609,
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderFactoryTest.java)
URL:
http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderTest.java?p2=sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderTest.java&p1=sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderFactoryTest.java&r1=1679609&r2=1679694&rev=1679694&view=diff
==============================================================================
---
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderFactoryTest.java
(original)
+++
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/NoSqlResourceProviderTest.java
Sat May 16 07:06:55 2015
@@ -18,9 +18,33 @@
*/
package org.apache.sling.nosql.generic.resource;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.JcrConstants;
+import org.apache.sling.api.resource.PersistenceException;
+import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
+import org.apache.sling.api.resource.ResourceUtil;
+import org.apache.sling.api.resource.ValueMap;
import
org.apache.sling.nosql.generic.simple.SimpleNoSqlResourceProviderFactory;
-import org.apache.sling.testing.mock.sling.junit.SlingContext;
+import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
+import org.apache.sling.testing.mock.sling.MockSling;
+import org.apache.sling.testing.mock.sling.ResourceResolverType;
+import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -29,28 +53,177 @@ import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.osgi.service.event.EventAdmin;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@RunWith(MockitoJUnitRunner.class)
-public class NoSqlResourceProviderFactoryTest {
+public class NoSqlResourceProviderTest {
+ private static final String STRING_VALUE = "value1";
+ private static final String[] STRING_ARRAY_VALUE = new String[] {
"value1", "value2" };
+ private static final int INTEGER_VALUE = 25;
+ private static final double DOUBLE_VALUE = 3.555d;
+ private static final boolean BOOLEAN_VALUE = true;
+ private static final Date DATE_VALUE = new Date(10000);
+ private static final Calendar CALENDAR_VALUE = Calendar.getInstance();
+ private static final byte[] BINARY_VALUE = new byte[] { 0x01, 0x02, 0x03,
0x04, 0x05, 0x06 };
+
@Rule
- public SlingContext context = new SlingContext();
+ public OsgiContext context = new OsgiContext();
@Mock
private EventAdmin eventAdmin;
+ private ResourceResolver resourceResolver;
+ private Resource testRoot;
+
@Before
- public void setUp() {
+ public void setUp() throws Exception {
context.registerService(EventAdmin.class, eventAdmin);
context.registerInjectActivateService(new
SimpleNoSqlResourceProviderFactory(), ImmutableMap.<String, Object>builder()
- .put(ResourceProvider.ROOTS, "/nosql/simple")
+ .put(ResourceProvider.ROOTS, "/nosql-simple")
.build());
+
+ ResourceResolverFactory resourceResolverFactory =
MockSling.newResourceResolverFactory(ResourceResolverType.JCR_MOCK,
context.bundleContext());
+ this.resourceResolver =
resourceResolverFactory.getResourceResolver(null);
+
+ // prepare some test data using Sling CRUD API
+ Resource rootNode = getTestRootResource();
+
+ Map<String, Object> props = new HashMap<String, Object>();
+ props.put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
+ props.put("stringProp", STRING_VALUE);
+ props.put("stringArrayProp", STRING_ARRAY_VALUE);
+ props.put("integerProp", INTEGER_VALUE);
+ props.put("doubleProp", DOUBLE_VALUE);
+ props.put("booleanProp", BOOLEAN_VALUE);
+ props.put("dateProp", DATE_VALUE);
+ props.put("calendarProp", CALENDAR_VALUE);
+ props.put("binaryProp", new ByteArrayInputStream(BINARY_VALUE));
+ Resource node1 = this.resourceResolver.create(rootNode, "node1",
props);
+
+ this.resourceResolver.create(node1, "node11", ImmutableMap.<String,
Object>builder()
+ .put("stringProp11", STRING_VALUE)
+ .build());
+ this.resourceResolver.create(node1, "node12", ValueMap.EMPTY);
+
+ this.resourceResolver.commit();
+ }
+
+
+ @After
+ public final void tearDown() {
+ this.testRoot = null;
+ }
+
+ /**
+ * Return a test root resource, created on demand, with a unique path
+ * @throws PersistenceException
+ */
+ private Resource getTestRootResource() throws PersistenceException {
+ if (this.testRoot == null) {
+ Map<String, Object> props = new HashMap<String, Object>();
+ props.put(JcrConstants.JCR_PRIMARYTYPE,
JcrConstants.NT_UNSTRUCTURED);
+ final Resource root = this.resourceResolver.getResource("/");
+ Resource noSqlRoot = this.resourceResolver.create(root,
"nosql-simple", props);
+ this.testRoot = this.resourceResolver.create(noSqlRoot, "test",
props);
+ }
+ return this.testRoot;
+ }
+
+ @Test
+ public void testSimpleProperties() throws IOException {
+ Resource resource1 =
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ assertNotNull(resource1);
+ assertEquals("node1", resource1.getName());
+
+ ValueMap props = ResourceUtil.getValueMap(resource1);
+ assertEquals(STRING_VALUE, props.get("stringProp", String.class));
+ assertArrayEquals(STRING_ARRAY_VALUE, props.get("stringArrayProp",
String[].class));
+ assertEquals((Integer) INTEGER_VALUE, props.get("integerProp",
Integer.class));
+ assertEquals(DOUBLE_VALUE, props.get("doubleProp", Double.class),
0.0001);
+ assertEquals(BOOLEAN_VALUE, props.get("booleanProp", Boolean.class));
+ }
+
+ @Test
+ public void testSimpleProperties_DeepPathAccess() throws IOException {
+ Resource resource1 =
this.resourceResolver.getResource(testRoot.getPath());
+ assertNotNull(resource1);
+ assertEquals(testRoot.getName(), resource1.getName());
+
+ ValueMap props = ResourceUtil.getValueMap(resource1);
+ assertEquals(STRING_VALUE, props.get("node1/stringProp",
String.class));
+ assertArrayEquals(STRING_ARRAY_VALUE,
props.get("node1/stringArrayProp", String[].class));
+ assertEquals((Integer) INTEGER_VALUE, props.get("node1/integerProp",
Integer.class));
+ assertEquals(DOUBLE_VALUE, props.get("node1/doubleProp",
Double.class), 0.0001);
+ assertEquals(BOOLEAN_VALUE, props.get("node1/booleanProp",
Boolean.class));
+ assertEquals(STRING_VALUE, props.get("node1/node11/stringProp11",
String.class));
+ }
+
+ @Test
+ public void testDateProperty() throws IOException {
+ Resource resource1 =
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ ValueMap props = ResourceUtil.getValueMap(resource1);
+ assertEquals(DATE_VALUE, props.get("dateProp", Date.class));
+ }
+
+ @Test
+ public void testDatePropertyToCalendar() throws IOException {
+ Resource resource1 =
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ ValueMap props = ResourceUtil.getValueMap(resource1);
+ Calendar calendarValue = props.get("dateProp", Calendar.class);
+ assertNotNull(calendarValue);
+ assertEquals(DATE_VALUE, calendarValue.getTime());
+ }
+
+ @Test
+ public void testCalendarProperty() throws IOException {
+ Resource resource1 =
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ ValueMap props = ResourceUtil.getValueMap(resource1);
+ assertEquals(CALENDAR_VALUE.getTime(), props.get("calendarProp",
Calendar.class).getTime());
+ }
+
+ @Test
+ public void testCalendarPropertyToDate() throws IOException {
+ Resource resource1 =
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ ValueMap props = ResourceUtil.getValueMap(resource1);
+ Date dateValue = props.get("calendarProp", Date.class);
+ assertNotNull(dateValue);
+ assertEquals(CALENDAR_VALUE.getTime(), dateValue);
+ }
+
+ @Test
+ public void testListChildren() throws IOException {
+ Resource resource1 =
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+
+ List<Resource> children =
ImmutableList.copyOf(resource1.listChildren());
+ assertEquals(2, children.size());
+ assertEquals("node11", children.get(0).getName());
+ assertEquals("node12", children.get(1).getName());
+ }
+
+ @Test
+ public void testBinaryData() throws IOException {
+ Resource resource1 =
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+
+ Resource binaryPropResource = resource1.getChild("binaryProp");
+ InputStream is = binaryPropResource.adaptTo(InputStream.class);
+ byte[] dataFromResource = IOUtils.toByteArray(is);
+ is.close();
+ assertArrayEquals(BINARY_VALUE, dataFromResource);
+
+ // read second time to ensure not the original input stream was
returned
+ // and this time using another syntax
+ InputStream is2 =
ResourceUtil.getValueMap(resource1).get("binaryProp", InputStream.class);
+ byte[] dataFromResource2 = IOUtils.toByteArray(is2);
+ is2.close();
+ assertArrayEquals(BINARY_VALUE, dataFromResource2);
}
@Test
- public void testGetResourceProvider() {
- // TODO: implement simple test
+ public void testPrimaryTypeResourceType() throws PersistenceException {
+ Resource resource =
this.resourceResolver.getResource(getTestRootResource().getPath());
+ assertEquals(JcrConstants.NT_UNSTRUCTURED, resource.getResourceType());
}
}