Example #1
0
        public AppUpdater(IHostApplicationLifetime applicationLifetime, IOptions <PrintSpoolerOptions> options, ILogger <AppUpdater> logger)
        {
            _applicationLifetime = applicationLifetime;
            _options             = options.Value;
            _logger = logger;

            IPackageResolver resolver;

            if (_options.LocalPackageRepository is object)
            {
                resolver = new LocalPackageResolver(_options.LocalPackageRepository);
            }
            else
            {
                resolver = new GithubPackageResolver("rmja", "Cloudspool", "PrintSpooler-win64.zip");
            }

            var entryAssembly = AssemblyMetadata.FromEntryAssembly();

            var updateeName = _options.UpdateeName ?? entryAssembly.Name;
            var updatee     = new AssemblyMetadata(updateeName, entryAssembly.Version, entryAssembly.FilePath);

            _um = new UpdateManager(
                updatee,
                resolver,
                new ZipPackageExtractor());
        }
Example #2
0
        public async Task LocalPackageResolver_DownloadAsync_Test()
        {
            // Arrange
            var version         = Version.Parse("2.0");
            var expectedContent = "Hello world";

            File.WriteAllText(Path.Combine(TempDirPath, $"{version}.onv"), expectedContent);

            // Act
            var resolver     = new LocalPackageResolver(TempDirPath, "*.onv");
            var destFilePath = Path.Combine(TempDirPath, "Output.onv");
            await resolver.DownloadAsync(version, destFilePath);

            // Assert
            Assert.That(File.Exists(destFilePath));
            Assert.That(File.ReadAllText(destFilePath), Is.EqualTo(expectedContent));
        }
Example #3
0
        public async Task LocalPackageResolver_GetAllVersionsAsync_Test()
        {
            // Arrange
            var expectedVersions = new[] { Version.Parse("1.0"), Version.Parse("2.0") };

            Directory.CreateDirectory(TempDirPath);
            foreach (var expectedVersion in expectedVersions)
            {
                File.WriteAllText(Path.Combine(TempDirPath, $"{expectedVersion}.onv"), "");
            }

            // Act
            var resolver = new LocalPackageResolver(TempDirPath);
            var versions = await resolver.GetAllVersionsAsync();

            // Assert
            Assert.That(versions, Is.Not.Null);
            Assert.That(versions, Is.EquivalentTo(expectedVersions));
        }
        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));
                }
            }
        }
Example #5
0
        public async Task LocalPackageResolver_GetPackageAsync_Test()
        {
            // Arrange
            var          version         = Version.Parse("2.0");
            const string expectedContent = "Hello world";

            Directory.CreateDirectory(TempDirPath);
            File.WriteAllText(Path.Combine(TempDirPath, $"{version}.onv"), expectedContent);

            // Act
            var resolver = new LocalPackageResolver(TempDirPath);
            var stream   = await resolver.GetPackageAsync(version);

            // Assert
            Assert.That(stream, Is.Not.Null);

            using (stream)
                using (var reader = new StreamReader(stream))
                {
                    var content = await reader.ReadToEndAsync();

                    Assert.That(content, Is.EqualTo(expectedContent));
                }
        }
Example #6
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));
        }