public void TestTwoParts(int bufferSize) { var input = new byte[] { 31, 139, 8, 0, 0, 0, 0, 0, 4, 0, 1, 2, 3, 4, 31, 139, 8, 0, 0, 0, 0, 0, 4, 0, 5, 6 }; var first = new byte[] { 31, 139, 8, 0, 0, 0, 0, 0, 4, 0, 1, 2, 3, 4 }; var second = new byte[] { 31, 139, 8, 0, 0, 0, 0, 0, 4, 0, 5, 6 }; var inputStream = MakeInputStream(input); try { var reader = new ArсhivePartReader(new LoggerDummy()); reader.Init(inputStream, input.Length); reader.BufferSize = bufferSize; var firstPart = new FilePart("dummyName"); var res = reader.ReadPart(firstPart); Assert.IsTrue(res, "не удалось проинициализировать firstPart"); Assert.IsNotNull(firstPart.Source, "firstPart.Source = null"); Assert.IsTrue(first.SequenceEqual(firstPart.Source), "неверный firstPart.Source"); Assert.IsFalse(firstPart.IsLast, "firstPart.IsLast"); var secondPart = new FilePart("dummyName"); res = reader.ReadPart(secondPart); Assert.IsTrue(res, "не удалось проинициализировать secondPart"); Assert.IsNotNull(secondPart.Source, "secondPart.Source = null"); Assert.IsTrue(second.SequenceEqual(secondPart.Source), "неверный secondPart.Source"); Assert.IsTrue(secondPart.IsLast, "secondPart.IsLast"); } finally { inputStream.Close(); } }
private void Decompress(IDecompressStrategy strategy, IFileNameProvider sourceFileNameProvider, IFileNameProvider targetFileNameProvider) { // нужно читать из файла части заархивированные // они начинаются с 10 байт (31,139,8,0,0,0,0,0,4,0) // эти части по отдельности отдавать на декомпрессию _wasException = null; var sourceFileName = sourceFileNameProvider.GetFileName(); if (!File.Exists(sourceFileName)) { throw new FileNotFoundException($"Не найден файл {sourceFileName}"); } // создание очередей var loggerForQueue = new LoggerDummy(); var queueForRead = new PartQueue("ForRead", loggerForQueue); _queues.Add(queueForRead); var queueForDecompress = new PartQueue("ForDecompress", loggerForQueue); _queues.Add(queueForDecompress); var queueForWrite = new IndexedParts("ForWrite", loggerForQueue); _queues.Add(queueForWrite); _stopEvent = new ManualResetEventSlim(false); // создание обработчиков очередей var writer = new Writer(_logger, _systemInfoProvider, ApplExceptionHandler, targetFileNameProvider, _stopEvent, queueForWrite, queueForRead); _queueHandlers.Add(writer); var decompressRuner = new DecompressRuner(_logger, _systemInfoProvider, ApplExceptionHandler, queueForDecompress, queueForWrite); _queueHandlers.Add(decompressRuner); var partReader = new ArсhivePartReader(_logger); var reader = new Reader(_logger, _systemInfoProvider, ApplExceptionHandler, sourceFileNameProvider, partReader, queueForRead, queueForDecompress); _queueHandlers.Add(reader); var sourceFileInfo = new FileInfo(sourceFileName); _logger.Add($"Размер файла {sourceFileInfo.Length} byte"); AddSystemInfo(); _logger.Add("Работа начата..."); _stopWatch.Reset(); _stopWatch.Start(); for (var i = 0; i < strategy.MaxActivePartCount; i++) { var part = new FilePart($"FilePart{i + 1}"); queueForRead.Add(part); } StopEventWait(); }
public void TestNotFirstTitle() { var input = new byte[] { 1, 31, 139, 8, 0, 0, 0, 0, 0, 4, 0 }; var inputStream = MakeInputStream(input); try { var reader = new ArсhivePartReader(new LoggerDummy()); reader.Init(inputStream, input.Length); var part = new FilePart("dummyName"); reader.ReadPart(part); } finally { inputStream.Close(); } }
public void TestEmptyStream() { var input = new byte[] {}; var inputStream = new MemoryStream(); try { var reader = new ArсhivePartReader(new LoggerDummy()); reader.Init(inputStream, 0); var part = new FilePart("dummyName"); var res = reader.ReadPart(part); Assert.IsTrue(res, "не удалось проинициализировать part из пустого потока"); Assert.IsNotNull(part.Source, "у непроинициализированной части source должен быть Null"); Assert.IsTrue(part.Source.SequenceEqual(input), "part.Source"); Assert.IsTrue(part.IsLast, "part.IsLast"); } finally { inputStream.Close(); } }
public void TestOnlyTitle(int bufferSize) { var input = new byte[] { 31, 139, 8, 0, 0, 0, 0, 0, 4, 0 }; var inputStream = MakeInputStream(input); try { var reader = new ArсhivePartReader(new LoggerDummy()); reader.Init(inputStream, input.Length); reader.BufferSize = bufferSize; var part = new FilePart("dummyName"); var res = reader.ReadPart(part); Assert.IsTrue(res, "не удалось проинициализировать часть"); Assert.IsNotNull(part.Source, "part.Source = null"); Assert.IsTrue(input.SequenceEqual(part.Source), "неверный part.Source"); Assert.IsTrue(part.IsLast, "part.IsLast"); } finally { inputStream.Close(); } }