コード例 #1
0
        public void MakeSureDataStreamReleasesItsLockEvenIfNotDisposed()
        {
            var mocks = new MockRepository();

            IDataStreamStructureBuilder   structureBuilderStub = mocks.Stub <IDataStreamStructureBuilder>();
            IFileSystemLockReleaseManager lockingManagerMock   = mocks.DynamicMock <IFileSystemLockReleaseManager>();
            Guid lockId = Guid.NewGuid();

            using (mocks.Unordered())
            {
                lockingManagerMock.ReleaseLock(lockId);
                LastCall.Repeat.Once();
            }

            mocks.ReplayAll();

            var stream = new DataStream(structureBuilderStub, 2048, lockingManagerMock, lockId);

            stream = null;

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();

            mocks.VerifyAll();
        }
コード例 #2
0
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        /// <exception cref="ArgumentException"></exception>
        internal DataStream(
            IDataStreamStructureBuilder streamStructureBuilder,
            int blockSize,
            IFileSystemLockReleaseManager lockingManager,
            Guid idOfLockBeingHeld)
        {
            try
            {
                if (streamStructureBuilder == null)
                {
                    throw new ArgumentNullException("streamStructureBuilder");
                }
                if (lockingManager == null)
                {
                    throw new ArgumentNullException("lockingManager");
                }
                MethodArgumentValidator.ThrowIfIsDefault(idOfLockBeingHeld, "idOfLockBeingHeld");
                MethodArgumentValidator.ThrowIfNegative(blockSize, "blockSize");

                _streamStructureBuilder = streamStructureBuilder;
                _blockSize           = blockSize;
                _lockingManager      = lockingManager;
                _idOfLockBeingHeld   = idOfLockBeingHeld;
                _diskBlockEnumerator = streamStructureBuilder.CreateEnumerator();
            }
            catch (Exception)
            {
                GC.SuppressFinalize(this);

                throw;
            }
        }
コード例 #3
0
        public void MakeSureDataStreamReleasesItsLockWhenDisposed()
        {
            var mocks = new MockRepository();

            IDataStreamStructureBuilder   structureBuilderStub = mocks.Stub <IDataStreamStructureBuilder>();
            IFileSystemLockReleaseManager lockingManagerMock   = mocks.DynamicMock <IFileSystemLockReleaseManager>();
            Guid lockId = Guid.NewGuid();

            using (mocks.Unordered())
            {
                lockingManagerMock.ReleaseLock(lockId);
                LastCall.Repeat.Once();
            }

            mocks.ReplayAll();

            using (var stream = new DataStream(structureBuilderStub, 2048, lockingManagerMock, lockId))
            {
            }

            mocks.VerifyAll();
        }