public void MakeSureYouCanGetSeveralReadersWithoutAnException() { var fileLock = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), FakeNodesFactory.CreateFakeFolderNodes(1)); fileLock.LockForReading(); fileLock.LockForReading(); fileLock.LockForReading(); }
public void MakeSureYouCanGetAWriteLockWithAnotherWriteLockInPlaceIfYouReleaseThatOtherLockFirst() { var fileLock = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), FakeNodesFactory.CreateFakeFolderNodes(1)); Guid lockId = fileLock.LockForWriting(); fileLock.ReleaseLock(lockId); fileLock.LockForWriting(); }
public void MakeSureYouCannotGetAWriteLockWithAnotherWriteLockInPlace() { var fileLock = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), FakeNodesFactory.CreateFakeFolderNodes(1)); fileLock.LockForWriting(); ExceptionAssert.MakeSureExceptionIsRaisedBy <CannotAcquireLockException>( delegate { fileLock.LockForWriting(); }); }
public void MakeSureYouCanGetAWriteLockAfterReadLocksAreReleased() { var fileLock = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), FakeNodesFactory.CreateFakeFolderNodes(1)); Guid lockId = fileLock.LockForReading(); Guid lock2Id = fileLock.LockForReading(); fileLock.ReleaseLock(lockId); fileLock.ReleaseLock(lock2Id); fileLock.LockForWriting(); }
public void MakeSureNodeLockableThrowsWhenBeingAcquiredIfFileLockDoesNotListItAsAssociatedNode() { FolderNode nodeToLock = FakeNodesFactory.CreateFakeFolderNodes(1).First(); var nodeLockable = new FolderNodeLockable(nodeToLock); FileLockable lock1 = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), FakeNodesFactory.CreateFakeFolderNodes(2)); ExceptionAssert.MakeSureExceptionIsRaisedBy <ArgumentException>( delegate { nodeLockable.AddLock(lock1, lock1.LockForWriting()); }); }
public void MakeSureIsLockedPropertyRelfectsLockStateAdequately() { FolderNode nodeToLock = FakeNodesFactory.CreateFakeFolderNodes(1).First(); var nodeLockable = new FolderNodeLockable(nodeToLock); List <FolderNode> nodes = new List <FolderNode> { nodeToLock }; FileLockable lock1 = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), nodes); FileLockable lock2 = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), nodes); FileLockable lock3 = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), nodes); FileLockable lock4 = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), nodes); Assert.IsFalse(nodeLockable.IsLocked); Guid lock1Id = lock1.LockForReading(); nodeLockable.AddLock(lock1, lock1Id); Assert.IsTrue(nodeLockable.IsLocked); Guid lock2Id = lock2.LockForReading(); nodeLockable.AddLock(lock2, lock2Id); Guid lock3Id = lock3.LockForReading(); nodeLockable.AddLock(lock3, lock3Id); Guid lock4Id = lock4.LockForReading(); nodeLockable.AddLock(lock4, lock4Id); Assert.IsTrue(nodeLockable.IsLocked); nodeLockable.ReleaseLock(lock1Id); nodeLockable.ReleaseLock(lock2Id); nodeLockable.ReleaseLock(lock3Id); nodeLockable.ReleaseLock(lock4Id); Assert.IsFalse(nodeLockable.IsLocked); }
public void MakeSureYouCannotAcquireSameLockOnANodeTwice() { FolderNode nodeToLock = FakeNodesFactory.CreateFakeFolderNodes(1).First(); var nodeLockable = new FolderNodeLockable(nodeToLock); List <FolderNode> nodes = new List <FolderNode> { nodeToLock }; FileLockable lock1 = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), nodes); Guid lockId = lock1.LockForReading(); nodeLockable.AddLock(lock1, lockId); ExceptionAssert.MakeSureExceptionIsRaisedBy <LockAlreadyHeldException>( delegate { nodeLockable.AddLock(lock1, lockId); }); }
public void MakeSureYouCannotReleaseALockWhichIsNotHeld() { FolderNode nodeToLock = FakeNodesFactory.CreateFakeFolderNodes(1).First(); var nodeLockable = new FolderNodeLockable(nodeToLock); List <FolderNode> nodes = new List <FolderNode> { nodeToLock }; FileLockable lock1 = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), nodes); FileLockable lock2 = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), nodes); Guid lockId = lock1.LockForReading(); nodeLockable.AddLock(lock1, lockId); ExceptionAssert.MakeSureExceptionIsRaisedBy <LockNotFoundException>( delegate { nodeLockable.ReleaseLock(lock2.LockForWriting()); }); }
public void MakeSureYouCannotAcquireALockPassingNullOrEmptyGuidForIt() { FolderNode nodeToLock = FakeNodesFactory.CreateFakeFolderNodes(1).First(); var nodeLockable = new FolderNodeLockable(nodeToLock); List <FolderNode> nodes = new List <FolderNode> { nodeToLock }; FileLockable lock1 = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), nodes); ExceptionAssert.MakeSureExceptionIsRaisedBy <ArgumentNullException>( delegate { nodeLockable.AddLock(null, Guid.NewGuid()); }); ExceptionAssert.MakeSureExceptionIsRaisedBy <ArgumentException>( delegate { nodeLockable.AddLock(lock1, Guid.Empty); }); }