mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged BRANCHES/DEV/mward/head_locktry_fix to HEAD:
55423: ALF-20031: LockStore is no longer used as a cache for persistent locks - it only holds Lifetime.EPHEMERAL locks. 55458: ALF-20031: added repeatable read within transactions to LockStores 55461: ALF-20031: moved transactional test code into separate test classes to avoid clutter. 55470: ALF-20031: added test for LockStore reads when no transaction is available. 55473: Generated LockState.toString() to aid debugging, stack trace clarity etc. 55481: ALF-20031: added tests for null value behaviour (transactional repeatable reads). 55663: ALF-20031: (work in progress, broken tests) removing concurrency locks from AbstractLockStore. 55664: ALF-20031: moved inner Thread classes to anonymous inner classes as there will be more of these coming. 55675: ALF-20031: fixed AbstractLockStoreTxTest 55681: ALF-20031: added more test cases to AbstractLockStoreTxTest 55683: Added missing tests to enterprise.repo.cluster package's BuildSafeTestSuite. 55684: ALF-20031: Fix HazelcastLockStoreTest to clear lock store backing map in createLockStore() fixture setup. 55688: Commented LockStore.clear() as a DO NOT USE method. 55694: ALF-20031: removed LockStore.contains() as this is not required, and was currently unsafe (no repeatable reads). 55696: ALF-20031: Fix AbstractLockStore.clear(): was not clearing transactionally scoped map. 55700: ALF-20031: removed concurrency locks from LockServiceImpl.getLockState(NodeRef) 55712: ALF-20031: removed concurrency lock from LockServiceImpl.lock() 55716: ALF-20031: removed lockstore locking from LockableAspectInterceptor. 55718: ALF-20031: renamed method to isEphemeralLock() 55719: ALF-20031: removed concurrency lock from LockServiceImpl.unlock() 55728: ALF-20031: added cm:lockLifetime property to content model, and added persistence within lockservice. 55732: ALF-20031: LockableAspectInterceptor no longer uses ephemeral lockstore for setProperties() handling. 55753: ALF-20031: upon tx rollback, ephemeral locks are now rolled back to the last known value, rather than always being unlocked. 55759: ALF-20031: temporary fix, AbstractLockStoreTxTest needs further attention for thread coordination. 55760: ALF-20091: disabled spawning of new transactions in LockKeeperImpl.refreshAllLocks() 55767: ALF-20031: changed AbstractLockStore to use getFullyAuthenticatedUser() instead of getRunAsUser(). 55833: ALF-20091: reverted LockKeeperImpl to previous (create new tx) behaviour. Altered test to use separate transactions per lock phase. 55855: ALF-20031: fixed ReplicationServiceIntegrationTest, LockableAspectInterceptor's handling of cm:lockLifetime. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@55893 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -21,6 +21,7 @@ package org.alfresco.repo.lock;
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.transaction.NotSupportedException;
|
||||
import javax.transaction.SystemException;
|
||||
@@ -198,6 +199,13 @@ public class LockServiceImplTest extends BaseSpringTest
|
||||
assertEquals(null, lockState.getExpires());
|
||||
assertEquals(null, lockState.getAdditionalInfo());
|
||||
|
||||
// Check the correct properties have been set
|
||||
Map<QName, Serializable> props = nodeService.getProperties(parentNode);
|
||||
assertEquals(GOOD_USER_NAME, props.get(ContentModel.PROP_LOCK_OWNER));
|
||||
assertEquals(LockType.WRITE_LOCK.toString(), props.get(ContentModel.PROP_LOCK_TYPE));
|
||||
assertEquals(Lifetime.PERSISTENT.toString(), props.get(ContentModel.PROP_LOCK_LIFETIME));
|
||||
assertEquals(null, props.get(ContentModel.PROP_EXPIRY_DATE));
|
||||
|
||||
TestWithUserUtils.authenticateUser(BAD_USER_NAME, PWD, rootNodeRef, this.authenticationService);
|
||||
|
||||
assertEquals(
|
||||
@@ -329,21 +337,29 @@ public class LockServiceImplTest extends BaseSpringTest
|
||||
assertEquals(LockStatus.NO_LOCK, lockService.getLockStatus(noAspectNode));
|
||||
}
|
||||
|
||||
public void testLockReleasedOnRollback() throws NotSupportedException, SystemException
|
||||
public void testLockRevertedOnRollback() throws NotSupportedException, SystemException
|
||||
{
|
||||
// Preconditions of test
|
||||
assertEquals(LockStatus.NO_LOCK, lockService.getLockStatus(noAspectNode));
|
||||
assertEquals(LockStatus.NO_LOCK, lockService.getLockStatus(rootNodeRef));
|
||||
|
||||
lockService.lock(noAspectNode, LockType.WRITE_LOCK);
|
||||
lockService.lock(rootNodeRef, LockType.NODE_LOCK);
|
||||
// Lock noAspectNode
|
||||
lockService.lock(noAspectNode, LockType.WRITE_LOCK, 0, Lifetime.EPHEMERAL);
|
||||
|
||||
// Lock rootNodeRef
|
||||
lockService.lock(rootNodeRef, LockType.NODE_LOCK, 0, Lifetime.EPHEMERAL);
|
||||
|
||||
// Sometime later, a refresh occurs (so this should not be reverted to unlocked, but to this state)
|
||||
lockService.lock(rootNodeRef, LockType.NODE_LOCK, 3600, Lifetime.EPHEMERAL);
|
||||
|
||||
// Rollback
|
||||
endTransaction();
|
||||
|
||||
// The locks should not present.
|
||||
// This lock should not be present.
|
||||
assertEquals(LockStatus.NO_LOCK, lockService.getLockStatus(noAspectNode));
|
||||
assertEquals(LockStatus.NO_LOCK, lockService.getLockStatus(rootNodeRef));
|
||||
|
||||
// This lock should still be present.
|
||||
assertEquals(LockStatus.LOCK_OWNER, lockService.getLockStatus(rootNodeRef));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -445,22 +461,18 @@ public class LockServiceImplTest extends BaseSpringTest
|
||||
LockStatus lockStatus2 = this.lockService.getLockStatus(this.parentNode);
|
||||
assertEquals(LockStatus.LOCKED, lockStatus2);
|
||||
|
||||
// Check lockstore is populated during status read
|
||||
// Check lockstore is not used for persistent locks
|
||||
// Previously LockStore was doubling up as a cache - the change in requirements means a test
|
||||
// is necessary to ensure the work has been implemented correctly (despite being an odd test)
|
||||
LockStore lockStore = (LockStore) applicationContext.getBean("lockStore");
|
||||
lockStore.clear();
|
||||
LockState lockState = lockStore.get(parentNode);
|
||||
// Nothing stored against node ref
|
||||
assertNull(lockState);
|
||||
lockService.getLockStatus(parentNode);
|
||||
// In-memory store populated during getLockStatus
|
||||
// In-memory store still empty - only used for ephemeral locks
|
||||
lockState = lockStore.get(parentNode);
|
||||
// Check details are correct
|
||||
assertEquals(Lifetime.PERSISTENT, lockState.getLifetime());
|
||||
assertEquals(null, lockState.getExpires());
|
||||
assertEquals(GOOD_USER_NAME, lockState.getOwner());
|
||||
assertEquals(LockType.WRITE_LOCK, lockState.getLockType());
|
||||
assertEquals(parentNode, lockState.getNodeRef());
|
||||
assertEquals(null, lockState.getAdditionalInfo());
|
||||
assertNull(lockState);
|
||||
|
||||
TestWithUserUtils.authenticateUser(GOOD_USER_NAME, PWD, rootNodeRef, this.authenticationService);
|
||||
|
||||
|
Reference in New Issue
Block a user