예제 #1
0
        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));
            }
        }
예제 #2
0
        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);
    }
예제 #5
0
        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");
                }
            }
        }
예제 #6
0
        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));
                }
            }
        }
예제 #7
0
        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));
        }