You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2009/06/10 12:08:19 UTC

svn commit: r783278 - in /jackrabbit/trunk: jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/lock/ jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/

Author: angela
Date: Wed Jun 10 10:08:17 2009
New Revision: 783278

URL: http://svn.apache.org/viewvc?rev=783278&view=rev
Log:
JCR-1874: Move generic tests from jcr2spi to jackrabbit-jcr-tests (work in progress)

Modified:
    jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/lock/AbstractLockTest.java
    jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/lock/SessionScopedLockTest.java
    jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/AbstractLockTest.java
    jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/SessionScopedLockTest.java

Modified: jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/lock/AbstractLockTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/lock/AbstractLockTest.java?rev=783278&r1=783277&r2=783278&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/lock/AbstractLockTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/lock/AbstractLockTest.java Wed Jun 10 10:08:17 2009
@@ -75,6 +75,13 @@
     protected abstract boolean isSessionScoped();
     protected abstract boolean isDeep();
 
+    protected void assertLockable(Node n) throws RepositoryException {
+        if (!n.isNodeType(mixLockable)) {
+            n.addMixin(mixLockable);
+            n.getSession().save();
+        }
+    }
+
     protected long getTimeoutHint() throws RepositoryException {
         String timoutStr = getProperty(RepositoryStub.PROP_LOCK_TIMEOUT);
         long hint = Long.MAX_VALUE;
@@ -96,7 +103,7 @@
         return ownerStr;
     }
 
-    private static LockManager getLockManager(Session session) throws RepositoryException {
+    protected static LockManager getLockManager(Session session) throws RepositoryException {
         return session.getWorkspace().getLockManager();
     }
 
@@ -108,6 +115,42 @@
     }
 
     /**
+     * Test {@link javax.jcr.lock.Lock#isLive()}.
+     */
+    public void testIsLive() throws RepositoryException {
+        assertTrue("Lock.isLive must be true.", lock.isLive());
+    }
+
+    /**
+     * Test {@link javax.jcr.lock.Lock#refresh()} on a released lock.
+     *
+     * @throws Exception
+     */
+    public void testRefresh() throws RepositoryException {
+        // refresh must succeed
+        lock.refresh();
+    }
+
+    // TODO: test if timeout gets reset upon Lock.refresh()
+    
+    /**
+     * Test {@link javax.jcr.lock.Lock#refresh()} on a released lock.
+     *
+     * @throws Exception
+     */
+    public void testRefreshNotLive() throws Exception {
+        // release the lock
+        lockMgr.unlock(lockedNode.getPath());
+        // refresh
+        try {
+            lock.refresh();
+            fail("Refresh on a lock that is not alive must fail");
+        } catch (LockException e) {
+            // success
+        }
+    }
+
+    /**
      * Test {@link javax.jcr.lock.Lock#getNode()}.
      *
      * @throws RepositoryException If an execption occurs.
@@ -135,7 +178,23 @@
         assertTrue("Node must hold lock after lock creation.", lockedNode.holdsLock());
         assertTrue("Node must hold lock after lock creation.", lockMgr.holdsLock(lockedNode.getPath()));
     }
-    
+
+
+    /**
+     * A locked node must also be locked if accessed by some other session.
+     */
+    public void testLockVisibility() throws RepositoryException {
+        Session otherSession = helper.getReadWriteSession();
+        try {
+            Node ln = (Node) otherSession.getItem(lockedNode.getPath());
+            assertTrue("Locked node must also be locked for another session", ln.isLocked());
+            assertTrue("Locked node must also be locked for another session", ln.holdsLock());
+            assertTrue("Locked node must also be locked for another session", getLockManager(otherSession).holdsLock(ln.getPath()));
+        } finally {
+            otherSession.logout();
+        }
+    }
+
     /**
      * Test {@link javax.jcr.lock.Lock#isSessionScoped()}
      */
@@ -234,6 +293,20 @@
             obsMgr.removeEventListener(listener);
         }
     }
+
+    /**
+     * Test if Lock is properly released.
+     * 
+     * @throws RepositoryException
+     */
+    public void testUnlock() throws RepositoryException {
+        // release the lock
+        lockMgr.unlock(lockedNode.getPath());
+        
+        // assert: lock must not be alive
+        assertFalse("lock must not be alive", lock.isLive());
+    }
+
     /**
      * Test {@link LockManager#unlock(String)} for a session that is not
      * lock owner.

Modified: jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/lock/SessionScopedLockTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/lock/SessionScopedLockTest.java?rev=783278&r1=783277&r2=783278&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/lock/SessionScopedLockTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/lock/SessionScopedLockTest.java Wed Jun 10 10:08:17 2009
@@ -19,6 +19,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.jcr.RepositoryException;
+import javax.jcr.Node;
+import javax.jcr.Session;
+import javax.jcr.lock.Lock;
+import javax.jcr.lock.LockException;
+import javax.jcr.lock.LockManager;
+
 /** <code>SessionScopedLockTest</code>... */
 public class SessionScopedLockTest extends AbstractLockTest {
 
@@ -39,4 +46,65 @@
     public void testGetLockToken() {
         assertNull("A session scoped lock may never expose the token.", lock.getLockToken());
     }
+
+    /**
+     * Test locks are released when session logs out
+     */
+    public void testImplicitUnlock() throws RepositoryException {
+        Session other = helper.getReadWriteSession();
+        try {
+            Node testNode = (Node) other.getItem(testRootNode.getPath());
+            Node lockedNode = testNode.addNode(nodeName1, testNodeType);
+            other.save();
+
+            assertLockable(lockedNode);
+
+            Lock lock = getLockManager(other).lock(lockedNode.getPath(), isDeep(), isSessionScoped(), getTimeoutHint(), getLockOwner());
+            other.logout();
+
+            assertFalse(lock.isLive());
+        } finally {
+            if (other.isLive()) {
+                other.logout();
+            }
+        }
+    }
+
+    /**
+     * Test locks are released when session logs out
+     */
+    public void testImplicitUnlock2() throws RepositoryException {
+        Session other = helper.getReadWriteSession();
+        try {
+            Node testNode = (Node) other.getItem(testRootNode.getPath());
+            Node lockedNode = testNode.addNode(nodeName1, testNodeType);
+            other.save();
+
+            assertLockable(lockedNode);
+
+            LockManager lMgr = getLockManager(other);
+            Lock lock = lMgr.lock(lockedNode.getPath(), isDeep(), isSessionScoped(), getTimeoutHint(), getLockOwner());
+
+            // access the locked noded added by another session
+            testRootNode.refresh(false);
+            Node n = (Node) superuser.getItem(lockedNode.getPath());
+
+            // remove lock implicit by logout lock-holding session
+            other.logout();
+
+            // check if superuser session is properly informed about the unlock
+            assertFalse(n.isLocked());
+            assertFalse(n.holdsLock());
+            try {
+                n.getLock();
+                fail("Upon logout of the session a session-scoped lock must be gone.");
+            } catch (LockException e) {
+                // ok
+            }
+        } finally {
+            if (other.isLive()) {
+                other.logout();
+            }
+        }
+    }
 }
\ No newline at end of file

Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/AbstractLockTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/AbstractLockTest.java?rev=783278&r1=783277&r2=783278&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/AbstractLockTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/AbstractLockTest.java Wed Jun 10 10:08:17 2009
@@ -25,11 +25,8 @@
 import javax.jcr.RepositoryException;
 import javax.jcr.Node;
 import javax.jcr.Repository;
-import javax.jcr.nodetype.ConstraintViolationException;
 import javax.jcr.lock.Lock;
 import javax.jcr.lock.LockException;
-import java.util.List;
-import java.util.Arrays;
 
 /**
  * <code>AbstractLockTest</code>...
@@ -104,53 +101,6 @@
     }
 
     /**
-     * Test Lock.isDeep()
-     */
-    public void testNotIsDeep() throws RepositoryException {
-        assertFalse("Lock.isDeep() must be false if the lock has not been set as not deep", lock.isDeep());
-    }
-
-    /**
-     * Test Lock.isSessionScoped()
-     */
-    public void testIsSessionScoped() throws RepositoryException {
-        if (isSessionScoped()) {
-            assertTrue("Lock.isSessionScoped() must be true.", lock.isSessionScoped());
-        } else {
-            assertFalse("Lock.isSessionScoped() must be false. ", lock.isSessionScoped());
-        }
-    }
-
-    public void testLockIsLive() throws RepositoryException {
-        // assert: lock must be alive
-        assertTrue("lock must be alive", lock.isLive());
-    }
-
-    public void testRefresh() throws RepositoryException {
-        // assert: refresh must succeed
-        lock.refresh();
-    }
-
-    public void testUnlock() throws RepositoryException {
-        // unlock node
-        lockedNode.unlock();
-        // assert: lock must not be alive
-        assertFalse("lock must not be alive", lock.isLive());
-    }
-
-    public void testRefreshNotLive() throws Exception {
-        // unlock node
-        lockedNode.unlock();
-        // refresh
-        try {
-            lock.refresh();
-            fail("Refresh on a lock that is not alive must fail");
-        } catch (LockException e) {
-            // success
-        }
-    }
-
-    /**
      * Tests if a locked, checked-in node can be unlocked
      */
     public void testCheckedInUnlock() throws Exception {
@@ -275,15 +225,6 @@
     }
 
     /**
-     * A locked node must also be locked if accessed by some other session.
-     */
-    public void testLockVisibility() throws RepositoryException {
-        Node ln2 = (Node) otherSession.getItem(lockedNode.getPath());
-        assertTrue("Locked node must also be locked for another session", ln2.isLocked());
-        assertTrue("Locked node must also be locked for another session", ln2.holdsLock());
-    }
-
-    /**
      * If a locked nodes is unlocked again, any Lock instance retrieved by
      * another session must change the lock-status. Similarly, the previously
      * locked node must not be marked locked any more.
@@ -325,43 +266,4 @@
         n.remove();
         otherSession.save();
     }
-
-    public void testRemoveMixLockableFromLockedNode() throws RepositoryException {
-        try {
-            lockedNode.removeMixin(mixLockable);
-            lockedNode.save();
-
-            // the mixin got removed -> the lock should implicitely be released
-            // as well in order not to have inconsistencies
-            String msg = "Lock should have been released.";
-            assertFalse(msg, lock.isLive());
-            assertFalse(msg, lockedNode.isLocked());
-            if (!isSessionScoped()) {
-                List tokens = Arrays.asList(superuser.getLockTokens());
-                assertFalse(msg, tokens.contains(lock.getLockToken()));
-            }
-
-            assertFalse(msg, lockedNode.hasProperty(jcrLockOwner));
-            assertFalse(msg, lockedNode.hasProperty(jcrlockIsDeep));
-
-        } catch (ConstraintViolationException e) {
-            // cannot remove the mixin -> ok
-            // consequently the node must still be locked, the lock still live...
-            String msg = "Lock must still be live.";
-            assertTrue(msg, lock.isLive());
-            assertTrue(msg, lockedNode.isLocked());
-            if (!isSessionScoped()) {
-                List tokens = Arrays.asList(superuser.getLockTokens());
-                assertTrue(tokens.contains(lock.getLockToken()));
-            }
-            assertTrue(msg, lockedNode.hasProperty(jcrLockOwner));
-            assertTrue(msg, lockedNode.hasProperty(jcrlockIsDeep));
-        } finally {
-            // ev. re-add the mixin in order to be able to unlock the node
-            if (lockedNode.isLocked() && !lockedNode.isNodeType(mixLockable)) {
-                lockedNode.addMixin(mixLockable);
-                lockedNode.save();
-            }
-        }
-    }
 }

Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/SessionScopedLockTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/SessionScopedLockTest.java?rev=783278&r1=783277&r2=783278&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/SessionScopedLockTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/SessionScopedLockTest.java Wed Jun 10 10:08:17 2009
@@ -19,11 +19,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.lock.LockException;
-import javax.jcr.lock.Lock;
-
 /**
  * <code>SessionScopedLockTest</code>...
  */
@@ -34,48 +29,4 @@
     boolean isSessionScoped() {
         return true;
     }
-
-    /**
-     * Test locks are released when session logs out
-     */
-    public void testLockNotLiveAfterLogout() throws RepositoryException {
-        Node testRoot2 = (Node) otherSession.getItem(testRootNode.getPath());
-
-        Node lockedNode2 = testRoot2.addNode(nodeName2, testNodeType);
-        lockedNode2.addMixin(mixLockable);
-        testRoot2.save();
-
-        Lock lock2 = lockedNode2.lock(false, isSessionScoped());
-        otherSession.logout();
-
-        assertFalse(lock2.isLive());
-    }
-
-    /**
-     * Test locks are released when session logs out
-     */
-    public void testNotLockedAfterLogout() throws RepositoryException {
-        Node testRoot2 = (Node) otherSession.getItem(testRootNode.getPath());
-
-        Node lockedNode2 = testRoot2.addNode(nodeName2, testNodeType);
-        lockedNode2.addMixin(mixLockable);
-        testRoot2.save();
-
-        // force reloading of the testroot in order to be aware of the
-        // locked noded added by another session
-        testRootNode.refresh(false);
-        Node n2 = (Node) superuser.getItem(lockedNode2.getPath());
-
-        // remove lock implicit by logout lock-holding session
-        otherSession.logout();
-
-        assertFalse(n2.isLocked());
-        assertFalse(n2.holdsLock());
-        try {
-            n2.getLock();
-            fail("Upon logout of the session a session-scoped lock must be gone.");
-        } catch (LockException e) {
-            // ok
-        }
-    }
 }
\ No newline at end of file