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()); }
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)); }
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)); } } }
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)); } }
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)); }