public void ShouldCompressAndDecompressTestStreams(string streamName) { using (var original = new MemoryStream()) { using (var testStream = LoadTestStream(streamName)) { testStream.CopyTo(original); } var blockInfo = new Interfaces.BlockInfo { OriginalBlockSize = original.Length }; var compressionTask = new CompressionTask(() => LoadTestStream(streamName), blockInfo); compressionTask.Process(); using (var compressed = new MemoryStream()) { compressionTask.WriteResult(compressed); ReferenceEquals(compressionTask.BlockInfo, blockInfo).Should().BeTrue(); blockInfo.BlockSize.Should().Be(compressed.Length); var decompressionTask = new DecompressionTask(() => new MemoryStream(compressed.GetBuffer(), 0, (int)compressed.Length, false), blockInfo); decompressionTask.Process(); using (var decompressed = new MemoryStream()) { decompressionTask.WriteResult(decompressed); ReferenceEquals(decompressionTask.BlockInfo, blockInfo).Should().BeTrue(); blockInfo.OriginalBlockSize.Should().Be(decompressed.Length); CollectionAssert.AreEqual(original.ToArray(), decompressed.ToArray()); } } } }
public void TestExecuteCompressionTaskOnWholeFile() { var inputFile = new FileInfo("input.txt"); var outputFile = new FileInfo("input.txt.gz"); File.Delete(outputFile.Name); var inputHolder = new FileChunkHolder(); var outputHolder = new FileChunkHolder(); var compressor = new GZipCompressor(); var task = new CompressionTask(0, inputHolder, outputHolder, compressor, inputFile.Name, 0, (int)inputFile.Length, outputFile.Name); task.Start(); Assert.AreEqual(0, inputHolder.Count()); Assert.AreEqual(0, outputHolder.Count()); CollectionAssert.AreEqual(compressor.Compress(File.ReadAllBytes(inputFile.Name)), File.ReadAllBytes(outputFile.Name)); }
private void DoPatchTasks() { List<CompressionTask> decompressionTasks = new List<CompressionTask>(); foreach (var file in m_tasks.toDelete) { file.Delete(); Log_ThreadSafe("\tDeleted " + file.FullName); IncrementPatchProgressBar_ThreadSafe(false); } int maxConcurrentDownloads = 1; List<object> downloadHandles = new List<object>(); foreach (var nameInfo in m_tasks.toDownload) { Log_ThreadSafe("\tDownloading " + nameInfo.Key.destination.Name); SetTaskProgressBar_ThreadSafe(0, ""); CompressionTask decompressionTask = null; string downloadTo = nameInfo.Key.destination.FullName; if (nameInfo.Key.tempCompressed != null) { downloadTo = nameInfo.Key.tempCompressed.FullName; decompressionTask = new CompressionTask(nameInfo.Key); decompressionTasks.Add(decompressionTask); } object handle = m_downloader.DownloadFile(nameInfo.Value, downloadTo, FileDownloaded, ProgressUpdate, decompressionTask); if (handle == null) { Log_ThreadSafe("\tFailed to initiate download of " + nameInfo.Value.ToString()); IncrementPatchProgressBar_ThreadSafe(true); } else { downloadHandles.Add(handle); while (downloadHandles.Count >= maxConcurrentDownloads) { foreach (var h in downloadHandles) { if (m_downloader.IsComplete(h)) { downloadHandles.Remove(h); break; } } Thread.Sleep(100); } } } while (decompressionTasks.Count > 0) { if (decompressionTasks[0].done) { decompressionTasks.RemoveAt(0); } else { string name = decompressionTasks[0].dl.destination.Name; SetTaskProgressBar_ThreadSafe(0, "Decompressing " + name); Thread.Sleep(100); } } }