Index: C:/rod/dev/jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/test/api/lock/LockTest.java =================================================================== --- C:/rod/dev/jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/test/api/lock/LockTest.java (revision 409092) +++ C:/rod/dev/jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/test/api/lock/LockTest.java (working copy) @@ -437,6 +437,58 @@ } /** + * Test transfering a lock multiple times + */ + public void testMultipleLockTransfer() throws Exception { + // add node + Node n1 = testRootNode.addNode(nodeName1, testNodeType); + n1.addMixin(mixLockable); + testRootNode.save(); + + // create new session + Session session1 = null; + Session session2 = null; + Session session3 = null; + try { + // session 1 - locks the node + session1 = helper.getSuperuserSession(); + Node node1 = (Node) session1.getItem(n1.getPath()); + + Lock lock1 = node1.lock(false, false); + assertNotNull("session 1 must get a non-null token", lock1.getLockToken()); + + String lockToken = lock1.getLockToken(); + assertSame(session1, lock1.getNode().getSession()); + session1.logout(); + + // session2 - acquires the lock created by session 1 + session2 = helper.getSuperuserSession(); + session2.addLockToken(lockToken); + + Node node2 = (Node) session2.getItem(n1.getPath()); + Lock lock2 = node2.getLock(); + assertNotNull("session 2 must get a non-null token", lock2.getLockToken()); + assertNull("session 1 must get a null token", lock1.getLockToken()); + session2.logout(); + + // session3 - acquires the lock created by session 1 + session3 = helper.getSuperuserSession(); + session3.addLockToken(lockToken); + + Node node3 = (Node) session3.getItem(n1.getPath()); + Lock lock3 = node3.getLock(); + assertNotNull("session 3 must get a non-null token", lock3.getLockToken()); + assertNull("session 2 must get a null token", lock2.getLockToken()); + node3.unlock(); + } + finally { + if (session1 != null) session1.logout(); + if (session2 != null) session2.logout(); + if (session3 != null) session3.logout(); + } + } + + /** * Test open-scoped locks */ public void testOpenScopedLocks() throws Exception {