public void Write_DecompressMode_ItemsWrittenToStream() { // arrange var expectedResult = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; var pieces = new List <KeyValuePair <int, byte[]> > { new KeyValuePair <int, byte[]>(1, new byte[] { 1, 2, 3 }), new KeyValuePair <int, byte[]>(2, new byte[] { 4, 5 }), new KeyValuePair <int, byte[]>(3, new byte[] { 6, 7, 8, 9, 0 }) }; var outputStream = new FakeStream(); var service = PrepareDestinationWriter(outputStream, false); var compressionResultsPieces = new ConcurrentDictionary <int, byte[]>(pieces); var compressionContext = new ParallelCompressionContext(null, compressionResultsPieces, new CancellationTokenSource(), new ManualResetEventSlim(true)); var calculationsFinishedSrc = new CancellationTokenSource(); calculationsFinishedSrc.Cancel(); // act var result = service.Write("", CompressionMode.Decompress, compressionContext, calculationsFinishedSrc.Token); result.ProcessingThread.Join(); // assert result.ExceptionSource.IsCancellationRequested.Should().BeFalse(); outputStream.Length.Should().Be(expectedResult.Length); outputStream.ToArray().Should().Equal(expectedResult); outputStream.Close(); outputStream.Dispose(); }
public AsyncWriteContext Write(string destinationUri, CompressionMode compressionMode, ParallelCompressionContext compressionContext, CancellationToken calculationsFinishedToken) { var exceptionSource = new CancellationTokenSource(); var tokens = new[] { calculationsFinishedToken, compressionContext.ExceptionSource.Token }; var thread = new Thread(() => { WriteInternal(destinationUri, compressionMode, compressionContext.ResultsDictionary, tokens, exceptionSource, compressionContext.OutputOverflowEvent); }); thread.Start(); return(new AsyncWriteContext(thread, exceptionSource)); }
public void Write_ExceptionInsideThread_ExceptionSourceCancelled() { // arrange var destinationStreamServiceMock = new Mock <IDestinationStreamService>(); destinationStreamServiceMock.Setup(x => x.OpenWrite(It.IsAny <string>())) .Throws <Exception>(); var service = PrepareDestinationWriter(null, true); var compressionContext = new ParallelCompressionContext(null, null, new CancellationTokenSource(), new ManualResetEventSlim(true)); var calculationsFinishedSrc = new CancellationTokenSource(); calculationsFinishedSrc.Cancel(); // act var result = service.Write("", CompressionMode.Decompress, compressionContext, calculationsFinishedSrc.Token); result.ProcessingThread.Join(); // assert result.ExceptionSource.IsCancellationRequested.Should().BeTrue(); }