public async Task ZipPackageExtractor_ExtractPackageAsync_Test() { // Arrange const string expectedContent = "Hello world"; var expectedEntryFilePaths = new[] { "a.txt", "1\\b.txt", "1\\2\\c.txt" }; Directory.CreateDirectory(TempDirPath); var packageFilePath = Path.Combine(TempDirPath, "1.0.0.0.onv"); using (var output = File.Create(packageFilePath)) using (var zip = new ZipArchive(output, ZipArchiveMode.Create)) { foreach (var expectedEntryFilePath in expectedEntryFilePaths) { using (var stream = zip.CreateEntry(expectedEntryFilePath).Open()) using (var writer = new StreamWriter(stream)) writer.Write(expectedContent); } } // Act var extractor = new ZipPackageExtractor(); var outputDirPath = Path.Combine(TempDirPath, Guid.NewGuid().ToString()); await extractor.ExtractPackageAsync(packageFilePath, outputDirPath); // Assert foreach (var expectedEntryFilePath in expectedEntryFilePaths) { var outputEntryPath = Path.Combine(outputDirPath, expectedEntryFilePath); Assert.That(File.Exists(outputEntryPath)); Assert.That(File.ReadAllText(outputEntryPath), Is.EqualTo(expectedContent)); } }
public async Task ZipPackageExtractor_ExtractPackageAsync_Test() { // Arrange var expectedContent = "Hello world"; var entryPaths = new[] { "a.txt", "1/b.txt", "1/2/c.txt" }; var packageFilePath = Path.Combine(TempDirPath, "Package.zip"); using (var zip = ZipFile.Open(packageFilePath, ZipArchiveMode.Create)) { foreach (var entryPath in entryPaths) { zip.CreateEntry(entryPath).WriteAllText(expectedContent); } } // Act var extractor = new ZipPackageExtractor(); var destDirPath = Path.Combine(TempDirPath, "Output"); await extractor.ExtractAsync(packageFilePath, destDirPath); // Assert foreach (var entryPath in entryPaths) { var destEntryPath = Path.Combine(destDirPath, entryPath); Assert.That(File.Exists(destEntryPath)); Assert.That(File.ReadAllText(destEntryPath), Is.EqualTo(expectedContent)); } }
public async Task CanAutoGenerateDelta() { // Arrange using var oldVersionFolder = new TemporaryFolderAllocation(); using var curVersionFolder = new TemporaryFolderAllocation(); var zipUnarchiver = new ZipPackageExtractor(); await zipUnarchiver.ExtractPackageAsync(TestArchiveFile, curVersionFolder.FolderPath); await zipUnarchiver.ExtractPackageAsync(TestArchiveFileOld, oldVersionFolder.FolderPath); // Act using var outputFolder = new TemporaryFolderAllocation(); var modTuple = ConfigReader <ModConfig> .ReadConfigurations(curVersionFolder.FolderPath, ModConfig.ConfigFileName)[0]; var metadata = await Publisher.PublishAsync(new Publisher.PublishArgs() { OutputFolder = outputFolder.FolderPath, OlderVersionFolders = new List <string>() { oldVersionFolder.FolderPath }, ModTuple = modTuple }); // Assert Assert.Equal(2, metadata.Releases.Count); Assert.Contains(metadata.Releases, item => item.ReleaseType == PackageType.Delta); }
private async Task ExtractReloadedAsync(string extractFolderPath, string downloadedPackagePath, IProgress <double> slice) { CurrentStepDescription = "Extracting Reloaded II"; var extractor = new ZipPackageExtractor(); await extractor.ExtractPackageAsync(downloadedPackagePath, extractFolderPath, slice, CancellationToken.Token); if (Native.IsDirectoryEmpty(extractFolderPath)) { throw new Exception($"Reloaded failed to download (downloaded archive was not properly extracted)."); } IOEx.TryDeleteFile(downloadedPackagePath); }
public async Task ExtractPackageAsync_Test() { // Arrange var entries = new Dictionary <string, byte[]> { { "File1.bin", new byte[] { 1, 2, 3 } }, { "File2.bin", new byte[] { 4, 5, 6 } }, { "SubDir1/", new byte[0] }, { "SubDir1/File3.bin", new byte[] { 7, 8, 9 } }, { "SubDir1/SubDir2/", new byte[0] }, { "SubDir1/SubDir2/File4.bin", new byte[] { 10, 11, 12 } } }; var packageFilePath = Path.Combine(TempDirPath, "Package.zip"); var destDirPath = Path.Combine(TempDirPath, "Output"); CreateZipArchive(packageFilePath, entries); var extractor = new ZipPackageExtractor(); // Act await extractor.ExtractPackageAsync(packageFilePath, destDirPath); // Assert foreach (var entry in entries) { var destEntryPath = Path.Combine(destDirPath, entry.Key); if (entry.Key.EndsWith("/")) { Assert.That(Directory.Exists(destEntryPath), "Directory exists"); } else { Assert.That(File.Exists(destEntryPath), "File exists"); Assert.That(File.ReadAllBytes(destEntryPath), Is.EqualTo(entry.Value), "File content"); } } }
public async Task UpdateManager_IsUpdatePrepared_Test() { // Arrange var versions = new[] { Version.Parse("1.0"), Version.Parse("2.0"), Version.Parse("3.0") }; // Package file foreach (var version in versions) { var packageFilePath = Path.Combine(TempDirPath, $"{version}.onv"); using (var zip = ZipFile.Open(packageFilePath, ZipArchiveMode.Create)) zip.CreateEntry("Test.txt").WriteAllText("Hello world"); } // Update manager var updateeVersion = Version.Parse("1.0"); var updatee = new AssemblyMetadata(LocalUpdateeName, updateeVersion, ""); var resolver = new LocalPackageResolver(TempDirPath, "*.onv"); var extractor = new ZipPackageExtractor(); using (var manager = new UpdateManager(updatee, resolver, extractor)) { // Act foreach (var version in versions) { await manager.PrepareUpdateAsync(version); } // Assert foreach (var version in versions) { Assert.That(manager.IsUpdatePrepared(version)); } } }
public async Task GetPreparedUpdates_Test() { // Arrange var versions = new[] { Version.Parse("1.0"), Version.Parse("2.0"), Version.Parse("3.0") }; foreach (var version in versions) { var packageFilePath = Path.Combine(TempDirPath, $"{version}.onv"); using var zip = ZipFile.Open(packageFilePath, ZipArchiveMode.Create); zip.CreateEntry("File.bin").WriteAllText("Hello world"); } var updateeVersion = versions.Min(); var updatee = new AssemblyMetadata(UpdateeName, updateeVersion, ""); var resolver = new LocalPackageResolver(TempDirPath, "*.onv"); var extractor = new ZipPackageExtractor(); using var manager = new UpdateManager(updatee, resolver, extractor); foreach (var version in versions) { await manager.PrepareUpdateAsync(version); } // Act var preparedUpdates = manager.GetPreparedUpdates(); // Assert Assert.That(preparedUpdates, Is.EquivalentTo(versions)); }