private void InstallWorkload(string installingWorkload, string testDirectory, string sdkFeatureVersion) { var dotnetRoot = Path.Combine(testDirectory, "dotnet"); var workloadResolver = WorkloadResolver.CreateForTests(new MockManifestProvider(new[] { _manifestPath }), new string[] { dotnetRoot }); var nugetDownloader = new MockNuGetPackageDownloader(dotnetRoot); var manifestUpdater = new MockWorkloadManifestUpdater(); var installParseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", installingWorkload }); var installCommand = new WorkloadInstallCommand(installParseResult, reporter: _reporter, workloadResolver: workloadResolver, nugetPackageDownloader: nugetDownloader, workloadManifestUpdater: manifestUpdater, userHome: testDirectory, version: sdkFeatureVersion, dotnetDir: dotnetRoot, tempDirPath: testDirectory); installCommand.Execute(); }
public override int Execute() { var allProjects = DiscoverAllProjects(Directory.GetCurrentDirectory(), _slnOrProjectArgument).Distinct(); List <WorkloadId> allWorkloadId = RunTargetToGetWorkloadIds(allProjects); Reporter.WriteLine(string.Format(LocalizableStrings.InstallingWorkloads, string.Join(" ", allWorkloadId))); var workloadInstallCommand = new WorkloadInstallCommand(_result, workloadIds: allWorkloadId.Select(a => a.ToString()).ToList().AsReadOnly()); workloadInstallCommand.Execute(); return(0); }
public void GivenExtraPacksInstalledRepairGarbageCollects(bool userLocal) { var testDirectory = _testAssetsManager.CreateTestDirectory(identifier: userLocal ? "userlocal" : "default").Path; var dotnetRoot = Path.Combine(testDirectory, "dotnet"); var userProfileDir = Path.Combine(testDirectory, "user-profile"); var workloadResolver = WorkloadResolver.CreateForTests(new MockManifestProvider(new[] { _manifestPath }), dotnetRoot, userLocal, userProfileDir); var nugetDownloader = new MockNuGetPackageDownloader(dotnetRoot); var manifestUpdater = new MockWorkloadManifestUpdater(); var sdkFeatureVersion = "6.0.100"; var installingWorkload = "xamarin-android"; string installRoot = userLocal ? userProfileDir : dotnetRoot; if (userLocal) { WorkloadFileBasedInstall.SetUserLocal(dotnetRoot, sdkFeatureVersion); } // Install a workload var installParseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", installingWorkload }); var installCommand = new WorkloadInstallCommand(installParseResult, reporter: _reporter, workloadResolver: workloadResolver, nugetPackageDownloader: nugetDownloader, workloadManifestUpdater: manifestUpdater, userProfileDir: userProfileDir, version: sdkFeatureVersion, dotnetDir: dotnetRoot, tempDirPath: testDirectory); installCommand.Execute(); // Add extra pack dirs and records var extraPackRecordPath = Path.Combine(installRoot, "metadata", "workloads", "InstalledPacks", "v1", "Test.Pack.A", "1.0.0", sdkFeatureVersion); Directory.CreateDirectory(Path.GetDirectoryName(extraPackRecordPath)); File.WriteAllText(extraPackRecordPath, string.Empty); var extraPackPath = Path.Combine(installRoot, "packs", "Test.Pack.A", "1.0.0"); Directory.CreateDirectory(extraPackPath); var repairCommand = new WorkloadRepairCommand(_parseResult, reporter: _reporter, workloadResolver: workloadResolver, userProfileDir: userProfileDir, nugetPackageDownloader: nugetDownloader, version: sdkFeatureVersion, dotnetDir: dotnetRoot, tempDirPath: testDirectory); repairCommand.Execute(); // Check that pack dirs and records have been removed File.Exists(extraPackRecordPath).Should().BeFalse(); Directory.Exists(Path.GetDirectoryName(Path.GetDirectoryName(extraPackRecordPath))).Should().BeFalse(); Directory.Exists(extraPackPath).Should().BeFalse(); // Expected packs are still present Directory.GetDirectories(Path.Combine(installRoot, "packs")).Length.Should().Be(7); Directory.GetDirectories(Path.Combine(installRoot, "metadata", "workloads", "InstalledPacks", "v1")).Length.Should().Be(8); }
public void GivenMissingPacksRepairFixesInstall(bool userLocal) { var testDirectory = _testAssetsManager.CreateTestDirectory(identifier: userLocal ? "userlocal" : "default").Path; var dotnetRoot = Path.Combine(testDirectory, "dotnet"); var userProfileDir = Path.Combine(testDirectory, "user-profile"); var workloadResolver = WorkloadResolver.CreateForTests(new MockManifestProvider(new[] { _manifestPath }), dotnetRoot, userLocal, userProfileDir); var nugetDownloader = new MockNuGetPackageDownloader(dotnetRoot); var manifestUpdater = new MockWorkloadManifestUpdater(); var sdkFeatureVersion = "6.0.100"; var installingWorkload = "xamarin-android"; string installRoot = userLocal ? userProfileDir : dotnetRoot; if (userLocal) { WorkloadFileBasedInstall.SetUserLocal(dotnetRoot, sdkFeatureVersion); } // Install a workload var installParseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", installingWorkload }); var installCommand = new WorkloadInstallCommand(installParseResult, reporter: _reporter, workloadResolver: workloadResolver, nugetPackageDownloader: nugetDownloader, workloadManifestUpdater: manifestUpdater, userProfileDir: userProfileDir, version: sdkFeatureVersion, dotnetDir: dotnetRoot, tempDirPath: testDirectory); installCommand.Execute(); // Delete pack dirs/ records var deletedPackRecordPath = Path.Combine(installRoot, "metadata", "workloads", "InstalledPacks", "v1", "Xamarin.Android.Sdk", "8.4.7", sdkFeatureVersion); File.Delete(deletedPackRecordPath); var deletedPackPath = Path.Combine(installRoot, "packs", "Xamarin.Android.Sdk"); Directory.Delete(deletedPackPath, true); var repairCommand = new WorkloadRepairCommand(_parseResult, reporter: _reporter, workloadResolver: workloadResolver, userProfileDir: userProfileDir, nugetPackageDownloader: nugetDownloader, version: sdkFeatureVersion, dotnetDir: dotnetRoot, tempDirPath: testDirectory); repairCommand.Execute(); // Check that pack dirs and records have been replaced File.Exists(deletedPackRecordPath).Should().BeTrue(); Directory.Exists(deletedPackPath).Should().BeTrue(); // All expected packs are still present Directory.GetDirectories(Path.Combine(installRoot, "packs")).Length.Should().Be(7); Directory.GetDirectories(Path.Combine(installRoot, "metadata", "workloads", "InstalledPacks", "v1")).Length.Should().Be(8); }
public void GivenWorkloadUpdateItRemovesOldPacksAfterInstall(bool userLocal) { var testDirectory = _testAssetsManager.CreateTestDirectory(identifier: userLocal ? "userlocal" : "default").Path; var dotnetRoot = Path.Combine(testDirectory, "dotnet"); var userProfileDir = Path.Combine(testDirectory, "user-profile"); var workloadResolver = WorkloadResolver.CreateForTests(new MockManifestProvider(new[] { _manifestPath }), dotnetRoot, userLocal, userProfileDir); var nugetDownloader = new MockNuGetPackageDownloader(dotnetRoot); var manifestUpdater = new MockWorkloadManifestUpdater(); var sdkFeatureVersion = "6.0.100"; var installingWorkload = "xamarin-android"; string installRoot = userLocal ? userProfileDir : dotnetRoot; if (userLocal) { WorkloadFileBasedInstall.SetUserLocal(dotnetRoot, sdkFeatureVersion); } // Install a workload var installParseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", installingWorkload }); var installCommand = new WorkloadInstallCommand(installParseResult, reporter: _reporter, workloadResolver: workloadResolver, nugetPackageDownloader: nugetDownloader, workloadManifestUpdater: manifestUpdater, userProfileDir: userProfileDir, version: sdkFeatureVersion, dotnetDir: dotnetRoot, tempDirPath: testDirectory); installCommand.Execute(); // 7 packs in packs dir, 1 template pack var installPacks = Directory.GetDirectories(Path.Combine(installRoot, "packs")); installPacks.Count().Should().Be(7); foreach (var packDir in installPacks) { Directory.GetDirectories(packDir).Count().Should().Be(1); // 1 version of each pack installed } File.Exists(Path.Combine(installRoot, "metadata", "workloads", "InstalledPacks", "v1", "Xamarin.Android.Sdk", "8.4.7", "6.0.100")) // Original pack version is installed .Should().BeTrue(); File.Exists(Path.Combine(installRoot, "template-packs", "xamarin.android.templates.1.0.3.nupkg")) .Should().BeTrue(); // Install records are correct File.Exists(Path.Combine(installRoot, "metadata", "workloads", sdkFeatureVersion, "InstalledWorkloads", installingWorkload)) .Should().BeTrue(); var packRecordDirs = Directory.GetDirectories(Path.Combine(installRoot, "metadata", "workloads", "InstalledPacks", "v1")); packRecordDirs.Count().Should().Be(8); foreach (var packRecordDir in packRecordDirs) { var packVersionRecordDirs = Directory.GetDirectories(packRecordDir); packVersionRecordDirs.Count().Should().Be(1); // 1 version of each pack installed Directory.GetFiles(packVersionRecordDirs.First()).Count().Should().Be(1); // 1 feature band file for this pack id and version } // Mock updating the manifest workloadResolver = WorkloadResolver.CreateForTests( new MockManifestProvider(new[] { Path.Combine(_testAssetsManager.GetAndValidateTestProjectDirectory("SampleUpdatedManifest"), "Sample.json") }), dotnetRoot, userLocal, userProfileDir); // Update workload var updateParseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "update" }); var updateCommand = new WorkloadUpdateCommand(updateParseResult, reporter: _reporter, workloadResolver: workloadResolver, nugetPackageDownloader: nugetDownloader, workloadManifestUpdater: manifestUpdater, userProfileDir: userProfileDir, version: sdkFeatureVersion, dotnetDir: dotnetRoot, tempDirPath: testDirectory); updateCommand.Execute(); // 6 packs in packs dir, 1 template pack var updatePacks = Directory.GetDirectories(Path.Combine(installRoot, "packs")); updatePacks.Count().Should().Be(6); foreach (var packDir in updatePacks) { Directory.GetDirectories(packDir).Count().Should().Be(1); // 1 version of each pack installed } File.Exists(Path.Combine(installRoot, "metadata", "workloads", "InstalledPacks", "v1", "Xamarin.Android.Sdk", "8.5.7", "6.0.100")) // New pack version is installed .Should().BeTrue(); File.Exists(Path.Combine(installRoot, "template-packs", "xamarin.android.templates.2.1.3.nupkg")) .Should().BeTrue(); // Install records are correct File.Exists(Path.Combine(installRoot, "metadata", "workloads", sdkFeatureVersion, "InstalledWorkloads", installingWorkload)) .Should().BeTrue(); packRecordDirs = Directory.GetDirectories(Path.Combine(installRoot, "metadata", "workloads", "InstalledPacks", "v1")); packRecordDirs.Count().Should().Be(7); foreach (var packRecordDir in packRecordDirs) { var packVersionRecordDirs = Directory.GetDirectories(packRecordDir); packVersionRecordDirs.Count().Should().Be(1); // 1 version of each pack installed Directory.GetFiles(packVersionRecordDirs.First()).Count().Should().Be(1); // 1 feature band file for this pack id and version } }