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

rombert pushed a commit to annotated tag 
org.apache.sling.testing.resourceresolver-mock-1.1.0
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-resourceresolver-mock.git

commit f736863e79a33a0dff3506a6f338dd5b1bc1d34b
Author: Stefan Seifert <[email protected]>
AuthorDate: Tue Sep 9 14:13:45 2014 +0000

    SLING-3889 fix issue where creating a resources fails when deleting it 
before without committing
    refactor unit tests and add a new unit test suite for create/delete 
scenarios
    
    git-svn-id: 
https://svn.apache.org/repos/asf/sling/trunk/testing/resourceresolver-mock@1623828
 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            |   6 +
 .../resourceresolver/MockResourceResolver.java     |   2 +-
 .../CreateDeleteResourceResolverTest.java          | 136 +++++++++++++++++++++
 .../SlingCrudResourceResolverTest.java             |  97 ++++++---------
 4 files changed, 183 insertions(+), 58 deletions(-)

diff --git a/pom.xml b/pom.xml
index a38f9d1..9cccf1c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -87,6 +87,12 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>15.0</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     
 </project>
diff --git 
a/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
 
b/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
index b5c4682..c79839c 100644
--- 
a/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
+++ 
b/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
@@ -265,7 +265,7 @@ public class MockResourceResolver extends SlingAdaptable 
implements ResourceReso
             throw new PersistenceException("Path already exists: " + path);
         }
         synchronized ( this.resources ) {
-            if ( this.resources.containsKey(path) ) {
+            if ( this.resources.containsKey(path) && 
!this.deletedResources.contains(path) ) {
                 throw new PersistenceException("Path already exists: " + path);
             }
         }
diff --git 
a/src/test/java/org/apache/sling/testing/resourceresolver/CreateDeleteResourceResolverTest.java
 
b/src/test/java/org/apache/sling/testing/resourceresolver/CreateDeleteResourceResolverTest.java
new file mode 100644
index 0000000..dba669c
--- /dev/null
+++ 
b/src/test/java/org/apache/sling/testing/resourceresolver/CreateDeleteResourceResolverTest.java
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.testing.resourceresolver;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.sling.api.resource.LoginException;
+import org.apache.sling.api.resource.PersistenceException;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ValueMap;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Tests combinations of create and deletion of resources and conflict 
detection.
+ */
+public class CreateDeleteResourceResolverTest {
+        
+    private static final Map<String,Object> PROPS1 = ImmutableMap.<String, 
Object>builder()
+            .put("prop1", "value1").build();
+    private static final Map<String,Object> PROPS2 = ImmutableMap.<String, 
Object>builder()
+            .put("prop2", "value2").build();
+
+    private ResourceResolver resourceResolver;
+    private Resource testRoot;
+
+    @Before
+    public final void setUp() throws IOException, LoginException {
+        resourceResolver = new 
MockResourceResolverFactory().getResourceResolver(null);
+        Resource root = resourceResolver.getResource("/");
+        testRoot = resourceResolver.create(root, "test", ValueMap.EMPTY);
+    }
+
+    @Test
+    public void testCreateDeleteCreate() throws PersistenceException {
+        // create new node without commit
+        Resource resource = resourceResolver.create(testRoot, "node", PROPS1);
+        assertEquals(PROPS1, resource.getValueMap());
+        
+        // delete node without commit
+        resourceResolver.delete(resource);
+        assertNull(resourceResolver.getResource(testRoot.getPath() + "/node"));
+
+        // create node again with different properties without commit
+        resource = resourceResolver.create(testRoot, "node", PROPS2);
+        assertEquals(PROPS2, resource.getValueMap());
+    }
+
+    @Test
+    public void testCreateDeleteCreateCommit() throws PersistenceException {
+        // create new node without commit
+        Resource resource = resourceResolver.create(testRoot, "node", PROPS1);
+        assertEquals(PROPS1, resource.getValueMap());
+        
+        // delete node without commit
+        resourceResolver.delete(resource);
+        assertNull(resourceResolver.getResource(testRoot.getPath() + "/node"));
+
+        // create node again with different properties with commit
+        resource = resourceResolver.create(testRoot, "node", PROPS2);
+        assertEquals(PROPS2, resource.getValueMap());
+        resourceResolver.commit();
+    }
+
+    @Test
+    public void testCreateCommitDeleteCreateCommit() throws 
PersistenceException {
+        // create new node with commit
+        Resource resource = resourceResolver.create(testRoot, "node", PROPS1);
+        assertEquals(PROPS1, resource.getValueMap());
+        resourceResolver.commit();
+        
+        // delete node without commit
+        resourceResolver.delete(resource);
+        assertNull(resourceResolver.getResource(testRoot.getPath() + "/node"));
+
+        // create node again with different properties with commit
+        resource = resourceResolver.create(testRoot, "node", PROPS2);
+        assertEquals(PROPS2, resource.getValueMap());
+        resourceResolver.commit();
+    }
+
+    @Test
+    public void testCreateCommitDeleteCommitCreateCommit() throws 
PersistenceException {
+        // create new node with commit
+        Resource resource = resourceResolver.create(testRoot, "node", PROPS1);
+        assertEquals(PROPS1, resource.getValueMap());
+        resourceResolver.commit();
+        
+        // delete node with commit
+        resourceResolver.delete(resource);
+        assertNull(resourceResolver.getResource(testRoot.getPath() + "/node"));
+        resourceResolver.commit();
+
+        // create node again with different properties with commit
+        resource = resourceResolver.create(testRoot, "node", PROPS2);
+        assertEquals(PROPS2, resource.getValueMap());
+        resourceResolver.commit();
+    }
+
+    @Test(expected=PersistenceException.class)
+    public void testCreatePathAlreadyExists() throws PersistenceException {
+        resourceResolver.create(testRoot, "node", PROPS1);
+        resourceResolver.create(testRoot, "node", PROPS2);
+    }
+
+    @Test(expected=PersistenceException.class)
+    public void testCreateCommitPathAlreadyExists() throws 
PersistenceException {
+        resourceResolver.create(testRoot, "node", PROPS1);
+        resourceResolver.commit();
+        resourceResolver.create(testRoot, "node", PROPS2);
+    }
+
+}
diff --git 
a/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java
 
b/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java
index 617773f..33021dd 100644
--- 
a/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java
+++ 
b/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java
@@ -20,7 +20,6 @@ package org.apache.sling.testing.resourceresolver;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 
 import java.io.ByteArrayInputStream;
@@ -28,9 +27,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Calendar;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
+import java.util.List;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.sling.api.resource.LoginException;
@@ -38,12 +35,14 @@ import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ValueMap;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+
 /**
- * Implements simple write and read resource and values test
+ * Implements simple write and read resource and values test.
  * Sling CRUD API is used to create the test data.
  */
 public class SlingCrudResourceResolverTest {
@@ -60,53 +59,37 @@ public class SlingCrudResourceResolverTest {
     private static final String NT_UNSTRUCTURED = "nt:unstructured";
 
     private ResourceResolver resourceResolver;
-    protected Resource testRoot;
+    private Resource testRoot;
 
     @Before
     public final void setUp() throws IOException, LoginException {
-        this.resourceResolver = new 
MockResourceResolverFactory().getResourceResolver(null);
-
-        // prepare some test data using Sling CRUD API
-        Resource rootNode = getTestRootResource();
-
-        Map<String, Object> props = new HashMap<String, Object>();
-        props.put(MockResource.JCR_PRIMARYTYPE, 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", ValueMap.EMPTY);
-        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) {
-            final Resource root = this.resourceResolver.getResource("/");
-            this.testRoot = this.resourceResolver.create(root, "test", 
ValueMap.EMPTY);
-        }
-        return this.testRoot;
+        resourceResolver = new 
MockResourceResolverFactory().getResourceResolver(null);
+
+        Resource root = resourceResolver.getResource("/");
+        testRoot = resourceResolver.create(root, "test", ValueMap.EMPTY);
+
+        Resource node1 = resourceResolver.create(testRoot, "node1",
+            ImmutableMap.<String, Object>builder()
+                .put(MockResource.JCR_PRIMARYTYPE, NT_UNSTRUCTURED)
+                .put("stringProp", STRING_VALUE)
+                .put("stringArrayProp", STRING_ARRAY_VALUE)
+                .put("integerProp", INTEGER_VALUE)
+                .put("doubleProp", DOUBLE_VALUE)
+                .put("booleanProp", BOOLEAN_VALUE)
+                .put("dateProp", DATE_VALUE)
+                .put("calendarProp", CALENDAR_VALUE)
+                .put("binaryProp", new ByteArrayInputStream(BINARY_VALUE))
+                .build());
+
+        resourceResolver.create(node1, "node11", ValueMap.EMPTY);
+        resourceResolver.create(node1, "node12", ValueMap.EMPTY);
+
+        resourceResolver.commit();
     }
 
     @Test
     public void testSimpleProperties() throws IOException {
-        Resource resource1 = 
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+        Resource resource1 = resourceResolver.getResource(testRoot.getPath() + 
"/node1");
         assertNotNull(resource1);
         assertEquals("node1", resource1.getName());
 
@@ -120,14 +103,14 @@ public class SlingCrudResourceResolverTest {
 
     @Test
     public void testDateProperty() throws IOException {
-        Resource resource1 = 
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+        Resource resource1 = resourceResolver.getResource(testRoot.getPath() + 
"/node1");
         ValueMap props = resource1.getValueMap();
         assertEquals(DATE_VALUE, props.get("dateProp", Date.class));
     }
 
     @Test
     public void testDatePropertyToCalendar() throws IOException {
-        Resource resource1 = 
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+        Resource resource1 = resourceResolver.getResource(testRoot.getPath() + 
"/node1");
         ValueMap props = resource1.getValueMap();
         Calendar calendarValue = props.get("dateProp", Calendar.class);
         assertNotNull(calendarValue);
@@ -136,14 +119,14 @@ public class SlingCrudResourceResolverTest {
     
     @Test
     public void testCalendarProperty() throws IOException {
-        Resource resource1 = 
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+        Resource resource1 = resourceResolver.getResource(testRoot.getPath() + 
"/node1");
         ValueMap props = resource1.getValueMap();
         assertEquals(CALENDAR_VALUE.getTime(), props.get("calendarProp", 
Calendar.class).getTime());
     }
 
     @Test
     public void testCalendarPropertyToDate() throws IOException {
-        Resource resource1 = 
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+        Resource resource1 = resourceResolver.getResource(testRoot.getPath() + 
"/node1");
         ValueMap props = resource1.getValueMap();
         Date dateValue = props.get("calendarProp", Date.class);
         assertNotNull(dateValue);
@@ -152,17 +135,17 @@ public class SlingCrudResourceResolverTest {
     
     @Test
     public void testListChildren() throws IOException {
-        Resource resource1 = 
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+        Resource resource1 = resourceResolver.getResource(testRoot.getPath() + 
"/node1");
 
-        Iterator<Resource> children = resource1.listChildren();
-        assertEquals("node11", children.next().getName());
-        assertEquals("node12", children.next().getName());
-        assertFalse(children.hasNext());
+        List<Resource> children = Lists.newArrayList(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 resource1 = resourceResolver.getResource(testRoot.getPath() + 
"/node1");
 
         Resource binaryPropResource = resource1.getChild("binaryProp");
         InputStream is = binaryPropResource.adaptTo(InputStream.class);
@@ -180,7 +163,7 @@ public class SlingCrudResourceResolverTest {
 
     @Test
     public void testPrimaryTypeResourceType() throws PersistenceException {
-        Resource resource1 = 
this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+        Resource resource1 = resourceResolver.getResource(testRoot.getPath() + 
"/node1");
         assertEquals(NT_UNSTRUCTURED, resource1.getResourceType());
     }
 

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to