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(); }
/// <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; } }
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(); }