コード例 #1
0
        public void MakeSureYouCanGetSeveralReadersWithoutAnException()
        {
            var fileLock = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), FakeNodesFactory.CreateFakeFolderNodes(1));

            fileLock.LockForReading();
            fileLock.LockForReading();
            fileLock.LockForReading();
        }
コード例 #2
0
        public void MakeSureYouCanGetAWriteLockWithAnotherWriteLockInPlaceIfYouReleaseThatOtherLockFirst()
        {
            var fileLock = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), FakeNodesFactory.CreateFakeFolderNodes(1));

            Guid lockId = fileLock.LockForWriting();

            fileLock.ReleaseLock(lockId);

            fileLock.LockForWriting();
        }
コード例 #3
0
        public void MakeSureYouCannotGetAWriteLockWithAnotherWriteLockInPlace()
        {
            var fileLock = new FileLockable(FakeNodesFactory.CreateFakeFileNode(), FakeNodesFactory.CreateFakeFolderNodes(1));

            fileLock.LockForWriting();

            ExceptionAssert.MakeSureExceptionIsRaisedBy <CannotAcquireLockException>(
                delegate
            {
                fileLock.LockForWriting();
            });
        }
コード例 #4
0
        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();
        }
コード例 #5
0
        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());
            });
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
            });
        }
コード例 #8
0
        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());
            });
        }
コード例 #9
0
        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);
            });
        }