public void GivenWorkloadManifestUpdateItCanUpdateAdvertisingManifests() { var testDir = _testAssetsManager.CreateTestDirectory().Path; var featureBand = "6.0.100"; var dotnetRoot = Path.Combine(testDir, "dotnet"); var installedManifests = new ManifestId[] { new ManifestId("test-manifest-1"), new ManifestId("test-manifest-2"), new ManifestId("test-manifest-3") }; // Write mock manifests var installedManifestDir = Path.Combine(testDir, "dotnet", "sdk-manifests", featureBand); var adManifestDir = Path.Combine(testDir, ".dotnet", "sdk-advertising", featureBand); Directory.CreateDirectory(installedManifestDir); Directory.CreateDirectory(adManifestDir); foreach (var manifest in installedManifests) { Directory.CreateDirectory(Path.Combine(installedManifestDir, manifest.ToString())); File.WriteAllText(Path.Combine(installedManifestDir, manifest.ToString(), _manifestFileName), GetManifestContent(new ManifestVersion("1.0.0"))); } var manifestDirs = installedManifests .Select(manifest => Path.Combine(installedManifestDir, manifest.ToString(), _manifestFileName)) .ToArray(); var workloadManifestProvider = new MockManifestProvider(manifestDirs); var nugetDownloader = new MockNuGetPackageDownloader(dotnetRoot, manifestDownload: true); var manifestUpdater = new WorkloadManifestUpdater(_reporter, workloadManifestProvider, nugetDownloader, testDir, testDir); manifestUpdater.UpdateAdvertisingManifestsAsync(true).Wait(); var expectedDownloadedPackages = installedManifests .Select(id => ((PackageId, NuGetVersion, DirectoryPath?, PackageSourceLocation))(new PackageId($"{id}.manifest-{featureBand}"), null, null, null)); nugetDownloader.DownloadCallParams.Should().BeEquivalentTo(expectedDownloadedPackages); }
public void GivenNoUpdatesAreAvailableAndNoRollbackItGivesAppropriateMessage(bool useOfflineCache) { // Currently installed - none // Current SDK - 6.0.300 // Run update // Should not find 6.0.300 manifest // Should not rollback // Manifest updater should give appropriate message // Arrange string sdkFeatureBand = "6.0.300"; var testDir = _testAssetsManager.CreateTestDirectory().Path; var dotnetRoot = Path.Combine(testDir, "dotnet"); var emptyInstalledManifestsDir = Path.Combine(dotnetRoot, "sdk-manifests", "6.0.300"); Directory.CreateDirectory(emptyInstalledManifestsDir); var adManifestDir = Path.Combine(testDir, ".dotnet", "sdk-advertising", sdkFeatureBand); Directory.CreateDirectory(adManifestDir); string testManifestName = "test-manifest"; Directory.CreateDirectory(Path.Combine(emptyInstalledManifestsDir, testManifestName)); File.WriteAllText(Path.Combine(emptyInstalledManifestsDir, testManifestName, _manifestFileName), GetManifestContent(new ManifestVersion("1.0.0"))); var workloadManifestProvider = new MockManifestProvider(Path.Combine(emptyInstalledManifestsDir, testManifestName, _manifestFileName)) { SdkFeatureBand = new SdkFeatureBand(sdkFeatureBand) }; var workloadResolver = WorkloadResolver.CreateForTests(workloadManifestProvider, dotnetRoot); var nugetDownloader = new MockNuGetPackageDownloader(dotnetRoot, manifestDownload: true); var installationRepo = new MockInstallationRecordRepository(); var manifestUpdater = new WorkloadManifestUpdater(_reporter, workloadResolver, nugetDownloader, Path.Combine(testDir, ".dotnet"), testDir, installationRepo); var offlineCacheDir = ""; if (useOfflineCache) { offlineCacheDir = Path.Combine(testDir, "offlineCache"); Directory.CreateDirectory(offlineCacheDir); // empty dir because it shouldn't find any manifests to update manifestUpdater.UpdateAdvertisingManifestsAsync(includePreviews: true, offlineCache: new DirectoryPath(offlineCacheDir)).Wait(); } else { nugetDownloader.PackageIdsToNotFind.Add($"{testManifestName}.Manifest-6.0.300"); manifestUpdater.UpdateAdvertisingManifestsAsync(includePreviews: true).Wait(); // only 6.0.300 manifest was requested // we can't assert this for the offline cache nugetDownloader.DownloadCallParams[0].id.ToString().Should().Be($"{testManifestName}.manifest-6.0.300"); nugetDownloader.DownloadCallParams[0].version.ShouldBeEquivalentTo(null); } // Assert // Check nothing was written to advertising manifest folder Directory.GetFiles(adManifestDir).Should().BeEmpty(); _reporter.Lines.Should().NotContain(l => l.ToLowerInvariant().Contains("fail")); _reporter.Lines.Should().Contain(String.Format(Workloads.Workload.Install.LocalizableStrings.AdManifestPackageDoesNotExist, testManifestName)); }
public void ItCanFallbackAndAdvertiseCorrectUpdate(bool useOfflineCache) { // Currently installed - 6.0.200 workload manifest // Current SDK - 6.0.300 // Run update // Should not find 6.0.300 manifest // Should fall back to 6.0.200 manifest and advertise it // Arrange string sdkFeatureBand = "6.0.300"; var testDir = _testAssetsManager.CreateTestDirectory(identifier: useOfflineCache.ToString()).Path; var dotnetRoot = Path.Combine(testDir, "dotnet"); var installedManifestDir6_0_200 = Path.Combine(dotnetRoot, "sdk-manifests", "6.0.200"); Directory.CreateDirectory(installedManifestDir6_0_200); var adManifestDir = Path.Combine(testDir, ".dotnet", "sdk-advertising", sdkFeatureBand); Directory.CreateDirectory(adManifestDir); // Write installed test-manifest with feature band 6.0.200 string testManifestName = "test-manifest"; Directory.CreateDirectory(Path.Combine(installedManifestDir6_0_200, testManifestName)); File.WriteAllText(Path.Combine(installedManifestDir6_0_200, testManifestName, _manifestFileName), GetManifestContent(new ManifestVersion("1.0.0"))); var workloadManifestProvider = new MockManifestProvider(Path.Combine(installedManifestDir6_0_200, testManifestName, _manifestFileName)) { SdkFeatureBand = new SdkFeatureBand(sdkFeatureBand) }; var workloadResolver = WorkloadResolver.CreateForTests(workloadManifestProvider, dotnetRoot); var nugetDownloader = new MockNuGetPackageDownloader(dotnetRoot, manifestDownload: true); nugetDownloader.PackageIdsToNotFind.Add($"{testManifestName}.Manifest-6.0.300"); var installationRepo = new MockInstallationRecordRepository(); var manifestUpdater = new WorkloadManifestUpdater(_reporter, workloadResolver, nugetDownloader, Path.Combine(testDir, ".dotnet"), testDir, installationRepo); var offlineCacheDir = ""; if (useOfflineCache) { offlineCacheDir = Path.Combine(testDir, "offlineCache"); Directory.CreateDirectory(offlineCacheDir); File.Create(Path.Combine(offlineCacheDir, $"{testManifestName}.Manifest-6.0.200.nupkg")); manifestUpdater.UpdateAdvertisingManifestsAsync(includePreviews: true, offlineCache: new DirectoryPath(offlineCacheDir)).Wait(); } else { nugetDownloader.PackageIdsToNotFind.Add($"{testManifestName}.Manifest-6.0.300"); manifestUpdater.UpdateAdvertisingManifestsAsync(includePreviews: true).Wait(); // Assert // 6.0.300 manifest was requested and then 6.0.200 manifest was requested // we can't assert this for the offline cache nugetDownloader.DownloadCallParams[0].id.ToString().Should().Be($"{testManifestName}.manifest-6.0.300"); nugetDownloader.DownloadCallParams[0].version.ShouldBeEquivalentTo(null); nugetDownloader.DownloadCallParams[1].id.ToString().Should().Be($"{testManifestName}.manifest-6.0.200"); nugetDownloader.DownloadCallParams[1].version.ShouldBeEquivalentTo(null); nugetDownloader.DownloadCallParams.Count.Should().Be(2); } // 6.0.200 package was written to advertising manifest folder var advertisedManifestContents = File.ReadAllText(Path.Combine(adManifestDir, testManifestName, "WorkloadManifest.json")); advertisedManifestContents.Should().NotBeEmpty(); // AdvertisedManifestFeatureBand.txt file is set to 6.0.200 var savedFeatureBand = File.ReadAllText(Path.Combine(adManifestDir, testManifestName, "AdvertisedManifestFeatureBand.txt")); savedFeatureBand.Should().Be("6.0.200"); // check that update did not fail _reporter.Lines.Should().NotContain(l => l.ToLowerInvariant().Contains("fail")); _reporter.Lines.Should().NotContain(String.Format(Workloads.Workload.Install.LocalizableStrings.AdManifestPackageDoesNotExist, testManifestName)); }