From e10404f403577481fdfa1c4774477a8f5a1a9aac Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Mon, 13 Jan 2025 12:55:23 -0800 Subject: [PATCH 01/11] Change default workload set use to 'true' --- src/Cli/dotnet/commands/InstallingWorkloadCommand.cs | 2 +- .../commands/dotnet-workload/InstallStateContents.cs | 2 ++ .../commands/dotnet-workload/WorkloadCommandParser.cs | 4 ++-- .../dotnet-workload/config/WorkloadConfigCommand.cs | 9 --------- .../dotnet-workload/install/WorkloadManifestUpdater.cs | 2 +- .../commands/dotnet-workload/list/WorkloadListCommand.cs | 2 +- .../SdkDirectoryWorkloadManifestProvider.cs | 4 ++-- 7 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/Cli/dotnet/commands/InstallingWorkloadCommand.cs b/src/Cli/dotnet/commands/InstallingWorkloadCommand.cs index 8f8f2295333b..ecc3409a02e7 100644 --- a/src/Cli/dotnet/commands/InstallingWorkloadCommand.cs +++ b/src/Cli/dotnet/commands/InstallingWorkloadCommand.cs @@ -176,7 +176,7 @@ static InstallStateContents GetCurrentInstallState(SdkFeatureBand sdkFeatureBand public static bool ShouldUseWorkloadSetMode(SdkFeatureBand sdkFeatureBand, string dotnetDir) { - return GetCurrentInstallState(sdkFeatureBand, dotnetDir).UseWorkloadSets ?? false; + return GetCurrentInstallState(sdkFeatureBand, dotnetDir).UseWorkloadSets(); } protected void UpdateWorkloadManifests(WorkloadHistoryRecorder recorder, ITransactionContext context, DirectoryPath? offlineCache) diff --git a/src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs b/src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs index b625067712d3..c48c041602ab 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs +++ b/src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs @@ -40,6 +40,8 @@ public override string ToString() { return JsonSerializer.Serialize(this, s_options); } + + public bool UseWorkloadSets() => UseWorkloadSets ?? true; } } diff --git a/src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs b/src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs index 3234ee07b86b..ab3ea19a1365 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs +++ b/src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs @@ -53,8 +53,8 @@ internal static void ShowWorkloadsInfo(ParseResult parseResult = null, WorkloadI void WriteUpdateModeAndAnyError(string indent = "") { - var useWorkloadSets = InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(workloadInfoHelper._currentSdkFeatureBand, workloadInfoHelper.UserLocalPath), "default.json")).UseWorkloadSets; - var workloadSetsString = useWorkloadSets == true ? "workload sets" : "loose manifests"; + var useWorkloadSets = InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(workloadInfoHelper._currentSdkFeatureBand, workloadInfoHelper.UserLocalPath), "default.json")).UseWorkloadSets(); + var workloadSetsString = useWorkloadSets ? "workload sets" : "loose manifests"; reporter.WriteLine(indent + string.Format(CommonStrings.WorkloadManifestInstallationConfiguration, workloadSetsString)); if (!versionInfo.IsInstalled) diff --git a/src/Cli/dotnet/commands/dotnet-workload/config/WorkloadConfigCommand.cs b/src/Cli/dotnet/commands/dotnet-workload/config/WorkloadConfigCommand.cs index fd09b18ba3c2..bf2e6c29e2d1 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/config/WorkloadConfigCommand.cs +++ b/src/Cli/dotnet/commands/dotnet-workload/config/WorkloadConfigCommand.cs @@ -1,16 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System; -using System.Collections.Generic; -using System.CommandLine; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Microsoft.Deployment.DotNet.Releases; using Microsoft.DotNet.Cli; -using Microsoft.DotNet.Cli.Utils; -using Microsoft.DotNet.Workloads.Workload; using Microsoft.DotNet.Workloads.Workload.Install; using Microsoft.NET.Sdk.WorkloadManifestReader; diff --git a/src/Cli/dotnet/commands/dotnet-workload/install/WorkloadManifestUpdater.cs b/src/Cli/dotnet/commands/dotnet-workload/install/WorkloadManifestUpdater.cs index 9a2b0098c9d4..dad33d330e56 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/install/WorkloadManifestUpdater.cs +++ b/src/Cli/dotnet/commands/dotnet-workload/install/WorkloadManifestUpdater.cs @@ -128,7 +128,7 @@ public static bool ShouldUseWorkloadSetMode(SdkFeatureBand sdkFeatureBand, strin { string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(sdkFeatureBand, dotnetDir), "default.json"); var installStateContents = File.Exists(path) ? InstallStateContents.FromString(File.ReadAllText(path)) : new InstallStateContents(); - return installStateContents.UseWorkloadSets ?? false; + return installStateContents.UseWorkloadSets(); } private void WriteUpdatableWorkloadsFile() diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs b/src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs index 813306288560..0e88d7a8eeb0 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs +++ b/src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs @@ -78,7 +78,7 @@ public override int Execute() Reporter.WriteLine(); var shouldPrintTable = versionInfo.IsInstalled; var shouldShowWorkloadSetVersion = versionInfo.GlobalJsonPath is not null || - InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(_workloadListHelper._currentSdkFeatureBand, _workloadListHelper.UserLocalPath), "default.json")).UseWorkloadSets == true; + InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(_workloadListHelper._currentSdkFeatureBand, _workloadListHelper.UserLocalPath), "default.json")).UseWorkloadSets(); if (shouldShowWorkloadSetVersion) { diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs index d0062b2b7dd1..7b736f01697d 100644 --- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs +++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs @@ -199,7 +199,7 @@ bool TryGetWorkloadSet(string workloadSetVersion, out WorkloadSet? workloadSet) _manifestsFromInstallState = installState.Manifests is null ? null : WorkloadSet.FromDictionaryForJson(installState.Manifests!, _sdkVersionBand); } - if (workloadSet == null && installState.UseWorkloadSets == true && availableWorkloadSets.Any()) + if (workloadSet == null && installState.UseWorkloadSets() && availableWorkloadSets.Any()) { var maxWorkloadSetVersion = availableWorkloadSets.Keys.Aggregate((s1, s2) => VersionCompare(s1, s2) >= 0 ? s1 : s2); workloadSet = availableWorkloadSets[maxWorkloadSetVersion.ToString()]; @@ -278,7 +278,7 @@ public WorkloadVersionInfo GetWorkloadVersion() sb.Append(bytes[b].ToString("x2")); } - return new WorkloadVersionInfo($"{_sdkVersionBand.ToStringWithoutPrerelease()}-manifests.{sb}", IsInstalled: true, WorkloadSetsEnabledWithoutWorkloadSet: installState.UseWorkloadSets == true); + return new WorkloadVersionInfo($"{_sdkVersionBand.ToStringWithoutPrerelease()}-manifests.{sb}", IsInstalled: true, WorkloadSetsEnabledWithoutWorkloadSet: installState.UseWorkloadSets()); } } From bc1473fae29bc7d11ee4be815387c70d01558ba7 Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:27:27 -0800 Subject: [PATCH 02/11] Use --> ShouldUse --- src/Cli/dotnet/commands/InstallingWorkloadCommand.cs | 2 +- .../dotnet/commands/dotnet-workload/InstallStateContents.cs | 2 +- .../dotnet/commands/dotnet-workload/WorkloadCommandParser.cs | 2 +- .../dotnet-workload/install/WorkloadManifestUpdater.cs | 2 +- .../commands/dotnet-workload/list/WorkloadListCommand.cs | 2 +- .../SdkDirectoryWorkloadManifestProvider.cs | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Cli/dotnet/commands/InstallingWorkloadCommand.cs b/src/Cli/dotnet/commands/InstallingWorkloadCommand.cs index ecc3409a02e7..97af927d1055 100644 --- a/src/Cli/dotnet/commands/InstallingWorkloadCommand.cs +++ b/src/Cli/dotnet/commands/InstallingWorkloadCommand.cs @@ -176,7 +176,7 @@ static InstallStateContents GetCurrentInstallState(SdkFeatureBand sdkFeatureBand public static bool ShouldUseWorkloadSetMode(SdkFeatureBand sdkFeatureBand, string dotnetDir) { - return GetCurrentInstallState(sdkFeatureBand, dotnetDir).UseWorkloadSets(); + return GetCurrentInstallState(sdkFeatureBand, dotnetDir).ShouldUseWorkloadSets(); } protected void UpdateWorkloadManifests(WorkloadHistoryRecorder recorder, ITransactionContext context, DirectoryPath? offlineCache) diff --git a/src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs b/src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs index c48c041602ab..9969d287e323 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs +++ b/src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs @@ -41,7 +41,7 @@ public override string ToString() return JsonSerializer.Serialize(this, s_options); } - public bool UseWorkloadSets() => UseWorkloadSets ?? true; + public bool ShouldUseWorkloadSets() => UseWorkloadSets ?? true; } } diff --git a/src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs b/src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs index ab3ea19a1365..40da9af6295d 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs +++ b/src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs @@ -53,7 +53,7 @@ internal static void ShowWorkloadsInfo(ParseResult parseResult = null, WorkloadI void WriteUpdateModeAndAnyError(string indent = "") { - var useWorkloadSets = InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(workloadInfoHelper._currentSdkFeatureBand, workloadInfoHelper.UserLocalPath), "default.json")).UseWorkloadSets(); + var useWorkloadSets = InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(workloadInfoHelper._currentSdkFeatureBand, workloadInfoHelper.UserLocalPath), "default.json")).ShouldUseWorkloadSets(); var workloadSetsString = useWorkloadSets ? "workload sets" : "loose manifests"; reporter.WriteLine(indent + string.Format(CommonStrings.WorkloadManifestInstallationConfiguration, workloadSetsString)); diff --git a/src/Cli/dotnet/commands/dotnet-workload/install/WorkloadManifestUpdater.cs b/src/Cli/dotnet/commands/dotnet-workload/install/WorkloadManifestUpdater.cs index dad33d330e56..fe21f4407497 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/install/WorkloadManifestUpdater.cs +++ b/src/Cli/dotnet/commands/dotnet-workload/install/WorkloadManifestUpdater.cs @@ -128,7 +128,7 @@ public static bool ShouldUseWorkloadSetMode(SdkFeatureBand sdkFeatureBand, strin { string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(sdkFeatureBand, dotnetDir), "default.json"); var installStateContents = File.Exists(path) ? InstallStateContents.FromString(File.ReadAllText(path)) : new InstallStateContents(); - return installStateContents.UseWorkloadSets(); + return installStateContents.ShouldUseWorkloadSets(); } private void WriteUpdatableWorkloadsFile() diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs b/src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs index 0e88d7a8eeb0..2a320f18ddf7 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs +++ b/src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs @@ -78,7 +78,7 @@ public override int Execute() Reporter.WriteLine(); var shouldPrintTable = versionInfo.IsInstalled; var shouldShowWorkloadSetVersion = versionInfo.GlobalJsonPath is not null || - InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(_workloadListHelper._currentSdkFeatureBand, _workloadListHelper.UserLocalPath), "default.json")).UseWorkloadSets(); + InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(_workloadListHelper._currentSdkFeatureBand, _workloadListHelper.UserLocalPath), "default.json")).ShouldUseWorkloadSets(); if (shouldShowWorkloadSetVersion) { diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs index 7b736f01697d..3f912c5a3591 100644 --- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs +++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs @@ -199,7 +199,7 @@ bool TryGetWorkloadSet(string workloadSetVersion, out WorkloadSet? workloadSet) _manifestsFromInstallState = installState.Manifests is null ? null : WorkloadSet.FromDictionaryForJson(installState.Manifests!, _sdkVersionBand); } - if (workloadSet == null && installState.UseWorkloadSets() && availableWorkloadSets.Any()) + if (workloadSet == null && installState.ShouldUseWorkloadSets() && availableWorkloadSets.Any()) { var maxWorkloadSetVersion = availableWorkloadSets.Keys.Aggregate((s1, s2) => VersionCompare(s1, s2) >= 0 ? s1 : s2); workloadSet = availableWorkloadSets[maxWorkloadSetVersion.ToString()]; @@ -278,7 +278,7 @@ public WorkloadVersionInfo GetWorkloadVersion() sb.Append(bytes[b].ToString("x2")); } - return new WorkloadVersionInfo($"{_sdkVersionBand.ToStringWithoutPrerelease()}-manifests.{sb}", IsInstalled: true, WorkloadSetsEnabledWithoutWorkloadSet: installState.UseWorkloadSets()); + return new WorkloadVersionInfo($"{_sdkVersionBand.ToStringWithoutPrerelease()}-manifests.{sb}", IsInstalled: true, WorkloadSetsEnabledWithoutWorkloadSet: installState.ShouldUseWorkloadSets()); } } From d17a3674568ddc426fc5a65f1afd6f351a44749c Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Mon, 13 Jan 2025 15:17:35 -0800 Subject: [PATCH 03/11] revert config change --- .../dotnet-workload/config/WorkloadConfigCommand.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Cli/dotnet/commands/dotnet-workload/config/WorkloadConfigCommand.cs b/src/Cli/dotnet/commands/dotnet-workload/config/WorkloadConfigCommand.cs index bf2e6c29e2d1..fd09b18ba3c2 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/config/WorkloadConfigCommand.cs +++ b/src/Cli/dotnet/commands/dotnet-workload/config/WorkloadConfigCommand.cs @@ -1,7 +1,16 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; +using System.Collections.Generic; +using System.CommandLine; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Deployment.DotNet.Releases; using Microsoft.DotNet.Cli; +using Microsoft.DotNet.Cli.Utils; +using Microsoft.DotNet.Workloads.Workload; using Microsoft.DotNet.Workloads.Workload.Install; using Microsoft.NET.Sdk.WorkloadManifestReader; From 5648eb182709120023df76635ffe8faef465d0c3 Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Thu, 16 Jan 2025 15:53:38 -0800 Subject: [PATCH 04/11] Resolve two cases --- .../SdkDirectoryWorkloadManifestProviderTests.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs b/test/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs index 918f02fb6a09..e3ee56ca109e 100644 --- a/test/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs +++ b/test/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs @@ -738,6 +738,7 @@ public void ItUsesWorkloadManifestFromInstallState() CreateMockInstallState("8.0.200", """ { + "useWorkloadSets": false, "manifests": { "ios": "11.0.1/8.0.100", } @@ -776,9 +777,10 @@ public void ItFailsIfManifestFromInstallStateIsNotInstalled() var installStatePath = CreateMockInstallState("8.0.200", """ { - "manifests": { + "useWorkloadSets": false, + "manifests": { "ios": "12.0.2/8.0.200", - } + }, } """); From a1e777565e5753ee714abaa37e9e4fb0b77dc345 Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Wed, 29 Jan 2025 16:37:39 -0800 Subject: [PATCH 05/11] fix one test? --- .../dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs b/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs index 92733f5c45f4..0035a0df2bbf 100644 --- a/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs +++ b/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs @@ -10,6 +10,7 @@ using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.Cli.Workload.Install.Tests; using Microsoft.DotNet.Workloads.Workload; +using Microsoft.DotNet.Workloads.Workload.Config; using Microsoft.DotNet.Workloads.Workload.Install; using Microsoft.DotNet.Workloads.Workload.Update; using Microsoft.NET.Sdk.WorkloadManifestReader; @@ -472,6 +473,9 @@ public void ApplyRollbackAcrossFeatureBand(string existingSdkFeatureBand, string }; (var dotnetPath, var updateCommand, var packInstaller, _, _, _) = GetTestInstallers(parseResult, manifestUpdates: manifestsToUpdate, sdkVersion: "6.0.300", identifier: existingSdkFeatureBand + newSdkFeatureBand, installedFeatureBand: existingSdkFeatureBand); + parseResult = Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "loose-manifests"]); + WorkloadConfigCommand configCommand = new(parseResult); + configCommand.Execute().Should().Be(0); updateCommand.Execute() .Should().Be(0); From 188f8a72f19e08144ca30da3844a66e5241de937 Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Thu, 30 Jan 2025 11:32:29 -0800 Subject: [PATCH 06/11] Try to fix some more --- .../MockPackWorkloadInstaller.cs | 4 +--- .../dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/test/dotnet-workload-install.Tests/MockPackWorkloadInstaller.cs b/test/dotnet-workload-install.Tests/MockPackWorkloadInstaller.cs index cd7be5779eb4..70c8c04cdff1 100644 --- a/test/dotnet-workload-install.Tests/MockPackWorkloadInstaller.cs +++ b/test/dotnet-workload-install.Tests/MockPackWorkloadInstaller.cs @@ -67,9 +67,7 @@ IEnumerable GetPacksForWorkloads(IEnumerable workloadIds) } public void UpdateInstallMode(SdkFeatureBand sdkFeatureBand, bool? newMode) - { - throw new NotImplementedException(); - } + { } public void AdjustWorkloadSetInInstallState(SdkFeatureBand sdkFeatureBand, string workloadVersion) { diff --git a/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs b/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs index 0035a0df2bbf..cd4e98a0295c 100644 --- a/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs +++ b/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs @@ -255,6 +255,7 @@ public void GivenWorkloadUpdateAcrossFeatureBandsItUpdatesPacks(bool userLocal) }; Directory.CreateDirectory(Path.GetDirectoryName(installStatePath)); File.WriteAllText(installStatePath, oldInstallState.ToString()); + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().BeTrue(); updateCommand.Execute(); var newInstallState = InstallStateContents.FromPath(installStatePath); newInstallState.Manifests.Should().BeNull(); @@ -473,7 +474,7 @@ public void ApplyRollbackAcrossFeatureBand(string existingSdkFeatureBand, string }; (var dotnetPath, var updateCommand, var packInstaller, _, _, _) = GetTestInstallers(parseResult, manifestUpdates: manifestsToUpdate, sdkVersion: "6.0.300", identifier: existingSdkFeatureBand + newSdkFeatureBand, installedFeatureBand: existingSdkFeatureBand); - parseResult = Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "loose-manifests"]); + parseResult = Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]); WorkloadConfigCommand configCommand = new(parseResult); configCommand.Execute().Should().Be(0); updateCommand.Execute() From b1ae3c664a5c47e318f9c24790aa3e549f8127bf Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Thu, 30 Jan 2025 12:22:13 -0800 Subject: [PATCH 07/11] More fixes --- test/dotnet-workload-list.Tests/GivenDotnetWorkloadList.cs | 3 ++- test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/test/dotnet-workload-list.Tests/GivenDotnetWorkloadList.cs b/test/dotnet-workload-list.Tests/GivenDotnetWorkloadList.cs index fd2006e13551..9f723057e908 100644 --- a/test/dotnet-workload-list.Tests/GivenDotnetWorkloadList.cs +++ b/test/dotnet-workload-list.Tests/GivenDotnetWorkloadList.cs @@ -37,7 +37,8 @@ public void GivenNoWorkloadsAreInstalledListIsEmpty() command.Execute(); // Expected number of lines for table headers - _reporter.Lines.Count.Should().Be(6); + // Expecting a workload set adds two lines + _reporter.Lines.Count.Should().Be(8); } [WindowsOnlyFact] diff --git a/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs b/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs index cd4e98a0295c..d93cd4bd9814 100644 --- a/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs +++ b/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs @@ -255,7 +255,7 @@ public void GivenWorkloadUpdateAcrossFeatureBandsItUpdatesPacks(bool userLocal) }; Directory.CreateDirectory(Path.GetDirectoryName(installStatePath)); File.WriteAllText(installStatePath, oldInstallState.ToString()); - new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().BeTrue(); + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); updateCommand.Execute(); var newInstallState = InstallStateContents.FromPath(installStatePath); newInstallState.Manifests.Should().BeNull(); From f46a230a2d478a9eabf2f013be2d56fdfc32438a Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Thu, 30 Jan 2025 16:41:28 -0800 Subject: [PATCH 08/11] Change a few more tests --- .../GivenDotnetWorkloadInstall.cs | 3 +++ .../GivenWorkloadManifestUpdater.cs | 6 ++++++ .../GivenDotnetWorkloadUpdate.cs | 2 ++ 3 files changed, 11 insertions(+) diff --git a/test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs b/test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs index 95ce1ec52cf0..de690ca9d555 100644 --- a/test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs +++ b/test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs @@ -130,6 +130,7 @@ public void GivenWorkloadInstallItCanUpdateAdvertisingManifests(bool userLocal, var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android" }); (_, var installManager, var installer, _, var manifestUpdater, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion); + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); installManager.Execute() .Should().Be(0); @@ -219,6 +220,7 @@ public void GivenWorkloadInstallItCanUpdateInstalledManifests(bool userLocal, st (_, var installManager, var installer, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, manifestUpdates: manifestsToUpdate, installedFeatureBand: sdkVersion); + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); installManager.Execute() .Should().Be(0); @@ -250,6 +252,7 @@ public void GivenWorkloadInstallFromCacheItInstallsCachedManifest(bool userLocal (_, var installManager, var installer, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, tempDirManifestPath: _manifestPath, manifestUpdates: manifestsToUpdate, installedFeatureBand: sdkVersion); + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); installManager.Execute(); installer.InstalledManifests[0].manifestUpdate.ManifestId.Should().Be(manifestsToUpdate[0].ManifestUpdate.ManifestId); diff --git a/test/dotnet-workload-install.Tests/GivenWorkloadManifestUpdater.cs b/test/dotnet-workload-install.Tests/GivenWorkloadManifestUpdater.cs index af3eefbf64e7..f9604fcb4a3a 100644 --- a/test/dotnet-workload-install.Tests/GivenWorkloadManifestUpdater.cs +++ b/test/dotnet-workload-install.Tests/GivenWorkloadManifestUpdater.cs @@ -41,6 +41,8 @@ public async Task GivenWorkloadManifestUpdateItCanUpdateAdvertisingManifests() [Fact] public async Task GivenAdvertisingManifestUpdateItUpdatesWhenNoSentinelExists() { + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); + (var manifestUpdater, var nugetDownloader, var sentinelPath) = GetTestUpdater(); await manifestUpdater.BackgroundUpdateAdvertisingManifestsWhenRequiredAsync(); @@ -51,6 +53,8 @@ public async Task GivenAdvertisingManifestUpdateItUpdatesWhenNoSentinelExists() [Fact] public async Task GivenAdvertisingManifestUpdateItUpdatesWhenDue() { + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); + Func getEnvironmentVariable = (envVar) => envVar.Equals(EnvironmentVariableNames.WORKLOAD_UPDATE_NOTIFY_INTERVAL_HOURS) ? "0" : string.Empty; (var manifestUpdater, var nugetDownloader, var sentinelPath) = GetTestUpdater(getEnvironmentVariable: getEnvironmentVariable); @@ -643,6 +647,8 @@ public void WorkloadUpdatesForDifferentBandAreNotAdvertised() [Fact] public async Task TestSideBySideUpdateChecks() { + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); + // this test checks that different version bands don't interfere with each other's update check timers var testDir = _testAssetsManager.CreateTestDirectory().Path; diff --git a/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs b/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs index d93cd4bd9814..57be7c3b92c2 100644 --- a/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs +++ b/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs @@ -202,6 +202,8 @@ public void GivenWorkloadUpdateItRemovesOldPacksAfterInstall(bool userLocal) [InlineData(false)] public void GivenWorkloadUpdateAcrossFeatureBandsItUpdatesPacks(bool userLocal) { + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); + var testDirectory = _testAssetsManager.CreateTestDirectory(identifier: userLocal ? "userlocal" : "default").Path; var dotnetRoot = Path.Combine(testDirectory, "dotnet"); var userProfileDir = Path.Combine(testDirectory, "user-profile"); From 3b3b5baeb02e372f20513a06fd028e102aebe431 Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Thu, 30 Jan 2025 16:52:02 -0800 Subject: [PATCH 09/11] Add usings --- test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs | 1 + .../GivenWorkloadManifestUpdater.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs b/test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs index de690ca9d555..b403580d7f6e 100644 --- a/test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs +++ b/test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs @@ -9,6 +9,7 @@ using Microsoft.DotNet.Cli.NuGetPackageDownloader; using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.Workloads.Workload; +using Microsoft.DotNet.Workloads.Workload.Config; using Microsoft.DotNet.Workloads.Workload.Install; using Microsoft.DotNet.Workloads.Workload.List; using Microsoft.Extensions.EnvironmentAbstractions; diff --git a/test/dotnet-workload-install.Tests/GivenWorkloadManifestUpdater.cs b/test/dotnet-workload-install.Tests/GivenWorkloadManifestUpdater.cs index f9604fcb4a3a..b5328947cae0 100644 --- a/test/dotnet-workload-install.Tests/GivenWorkloadManifestUpdater.cs +++ b/test/dotnet-workload-install.Tests/GivenWorkloadManifestUpdater.cs @@ -9,6 +9,7 @@ using ManifestReaderTests; using Microsoft.DotNet.Cli.NuGetPackageDownloader; using Microsoft.DotNet.ToolPackage; +using Microsoft.DotNet.Workloads.Workload.Config; using Microsoft.DotNet.Workloads.Workload.Install; using Microsoft.Extensions.EnvironmentAbstractions; using Microsoft.NET.Sdk.WorkloadManifestReader; From 72e69d6a4d5788f679bc8261dc8a35e6b31b7800 Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Fri, 31 Jan 2025 13:25:04 -0800 Subject: [PATCH 10/11] More fixes --- .../GivenDotnetWorkloadInstall.cs | 28 ++++++------- .../GivenWorkloadManifestUpdater.cs | 40 +++++++++++-------- .../GivenDotnetWorkloadUpdate.cs | 3 +- 3 files changed, 38 insertions(+), 33 deletions(-) diff --git a/test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs b/test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs index b403580d7f6e..370de9ff7ce7 100644 --- a/test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs +++ b/test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs @@ -68,7 +68,7 @@ public void GivenWorkloadInstallItCanInstallPacks(bool userLocal, string sdkVers { var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android") }; var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android", "--skip-manifest-update" }); - (_, var installManager, var installer, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion); + (_, var installManager, var installer, _, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion); installManager.Execute() .Should().Be(0); @@ -89,7 +89,7 @@ public void GivenWorkloadInstallItCanRollBackPackInstallation(bool userLocal, st { var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android"), new WorkloadId("xamarin-android-build") }; var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android", "xamarin-android-build", "--skip-manifest-update" }); - (_, var installManager, var installer, var workloadResolver, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, failingWorkload: "xamarin-android-build", installedFeatureBand: sdkVersion); + (_, var installManager, var installer, var workloadResolver, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, failingWorkload: "xamarin-android-build", installedFeatureBand: sdkVersion); var exceptionThrown = Assert.Throws(() => installManager.Execute()); exceptionThrown.Message.Should().Contain("Failing workload: xamarin-android-build"); @@ -129,9 +129,9 @@ public void GivenWorkloadInstallOnFailingRollbackItDisplaysTopLevelError() public void GivenWorkloadInstallItCanUpdateAdvertisingManifests(bool userLocal, string sdkVersion) { var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android" }); - (_, var installManager, var installer, _, var manifestUpdater, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion); + (_, var installManager, var installer, _, var manifestUpdater, _, var resolverFactory) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion); - new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]), workloadResolverFactory: resolverFactory).Execute().Should().Be(0); installManager.Execute() .Should().Be(0); @@ -218,10 +218,10 @@ public void GivenWorkloadInstallItCanUpdateInstalledManifests(bool userLocal, st { new(new ManifestVersionUpdate(new ManifestId("mock-manifest"), new ManifestVersion("2.0.0"), featureBand.ToString()), null), }; - (_, var installManager, var installer, _, _, _) = + (_, var installManager, var installer, _, _, _, var resolverFactory) = GetTestInstallers(parseResult, userLocal, sdkVersion, manifestUpdates: manifestsToUpdate, installedFeatureBand: sdkVersion); - new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]), workloadResolverFactory: resolverFactory).Execute().Should().Be(0); installManager.Execute() .Should().Be(0); @@ -250,10 +250,10 @@ public void GivenWorkloadInstallFromCacheItInstallsCachedManifest(bool userLocal { "dotnet", "workload", "install", "xamarin-android", "--from-cache", cachePath }); - (_, var installManager, var installer, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, + (_, var installManager, var installer, _, _, _, var resolverFactory) = GetTestInstallers(parseResult, userLocal, sdkVersion, tempDirManifestPath: _manifestPath, manifestUpdates: manifestsToUpdate, installedFeatureBand: sdkVersion); - new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]), workloadResolverFactory: resolverFactory).Execute().Should().Be(0); installManager.Execute(); installer.InstalledManifests[0].manifestUpdate.ManifestId.Should().Be(manifestsToUpdate[0].ManifestUpdate.ManifestId); @@ -271,7 +271,7 @@ public void GivenWorkloadInstallItCanDownloadToOfflineCache(bool userLocal, stri { var cachePath = Path.Combine(_testAssetsManager.CreateTestDirectory(identifier: AppendForUserLocal("mockCache_", userLocal) + sdkVersion).Path, "mockCachePath"); var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android", "--download-to-cache", cachePath }); - (_, var installManager, _, _, var manifestUpdater, var packageDownloader) = GetTestInstallers(parseResult, userLocal, sdkVersion, tempDirManifestPath: _manifestPath, installedFeatureBand: sdkVersion); + (_, var installManager, _, _, var manifestUpdater, var packageDownloader, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, tempDirManifestPath: _manifestPath, installedFeatureBand: sdkVersion); installManager.Execute(); @@ -295,7 +295,7 @@ public void GivenWorkloadInstallItCanInstallFromOfflineCache(bool userLocal, str var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android") }; var cachePath = "mockCachePath"; var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android", "--from-cache", cachePath }); - (_, var installManager, var installer, _, _, var nugetDownloader) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion); + (_, var installManager, var installer, _, _, var nugetDownloader, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion); installManager.Execute(); @@ -315,7 +315,7 @@ public void GivenWorkloadInstallItCanInstallFromOfflineCache(bool userLocal, str public void GivenWorkloadInstallItPrintsDownloadUrls(bool userLocal, string sdkVersion) { var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android", "--print-download-link-only" }); - (_, var installManager, _, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, tempDirManifestPath: _manifestPath, installedFeatureBand: sdkVersion); + (_, var installManager, _, _, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, tempDirManifestPath: _manifestPath, installedFeatureBand: sdkVersion); installManager.Execute(); @@ -459,7 +459,7 @@ static void CreateFile(string path) .Should().BeEquivalentTo(new string[] { prev7FormattedFeatureVersion, rc1FormattedFeatureVersion }); } - private (string, WorkloadInstallCommand, MockPackWorkloadInstaller, IWorkloadResolver, MockWorkloadManifestUpdater, MockNuGetPackageDownloader) GetTestInstallers( + private (string, WorkloadInstallCommand, MockPackWorkloadInstaller, IWorkloadResolver, MockWorkloadManifestUpdater, MockNuGetPackageDownloader, IWorkloadResolverFactory) GetTestInstallers( ParseResult parseResult, bool userLocal, string sdkVersion, @@ -495,7 +495,7 @@ static void CreateFile(string path) nugetPackageDownloader: nugetDownloader, workloadManifestUpdater: manifestUpdater); - return (testDirectory, installManager, installer, workloadResolver, manifestUpdater, nugetDownloader); + return (testDirectory, installManager, installer, workloadResolver, manifestUpdater, nugetDownloader, workloadResolverFactory); } [Fact] @@ -631,7 +631,7 @@ public void ShowManifestUpdatesWhenVerbosityIsDetailedOrDiagnostic(string verbos { new(new ManifestVersionUpdate(new ManifestId("mock-manifest"), new ManifestVersion("2.0.0"), sdkFeatureBand), null), }; - (_, var installManager, _, _, _, _) = + (_, var installManager, _, _, _, _, _) = GetTestInstallers(parseResult, true, sdkFeatureBand, manifestUpdates: manifestsToUpdate); installManager.Execute().Should().Be(0); diff --git a/test/dotnet-workload-install.Tests/GivenWorkloadManifestUpdater.cs b/test/dotnet-workload-install.Tests/GivenWorkloadManifestUpdater.cs index b5328947cae0..960f79ffa474 100644 --- a/test/dotnet-workload-install.Tests/GivenWorkloadManifestUpdater.cs +++ b/test/dotnet-workload-install.Tests/GivenWorkloadManifestUpdater.cs @@ -33,7 +33,7 @@ public GivenWorkloadManifestUpdater(ITestOutputHelper log) : base(log) [Fact] public async Task GivenWorkloadManifestUpdateItCanUpdateAdvertisingManifests() { - (var manifestUpdater, var nugetDownloader, _) = GetTestUpdater(); + (var manifestUpdater, var nugetDownloader, _, _) = GetTestUpdater(); await manifestUpdater.UpdateAdvertisingManifestsAsync(true); nugetDownloader.DownloadCallParams.Should().BeEquivalentTo(GetExpectedDownloadedPackages()); @@ -42,10 +42,9 @@ public async Task GivenWorkloadManifestUpdateItCanUpdateAdvertisingManifests() [Fact] public async Task GivenAdvertisingManifestUpdateItUpdatesWhenNoSentinelExists() { - new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); - - (var manifestUpdater, var nugetDownloader, var sentinelPath) = GetTestUpdater(); + (var manifestUpdater, var nugetDownloader, var sentinelPath, var configCommand) = GetTestUpdater(); + configCommand.Execute().Should().Be(0); await manifestUpdater.BackgroundUpdateAdvertisingManifestsWhenRequiredAsync(); nugetDownloader.DownloadCallParams.Should().BeEquivalentTo(GetExpectedDownloadedPackages()); File.Exists(sentinelPath).Should().BeTrue(); @@ -54,14 +53,13 @@ public async Task GivenAdvertisingManifestUpdateItUpdatesWhenNoSentinelExists() [Fact] public async Task GivenAdvertisingManifestUpdateItUpdatesWhenDue() { - new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); - Func getEnvironmentVariable = (envVar) => envVar.Equals(EnvironmentVariableNames.WORKLOAD_UPDATE_NOTIFY_INTERVAL_HOURS) ? "0" : string.Empty; - (var manifestUpdater, var nugetDownloader, var sentinelPath) = GetTestUpdater(getEnvironmentVariable: getEnvironmentVariable); + (var manifestUpdater, var nugetDownloader, var sentinelPath, var configCommand) = GetTestUpdater(getEnvironmentVariable: getEnvironmentVariable); File.WriteAllText(sentinelPath, string.Empty); var createTime = DateTime.Now; + configCommand.Execute().Should().Be(0); await manifestUpdater.BackgroundUpdateAdvertisingManifestsWhenRequiredAsync(); nugetDownloader.DownloadCallParams.Should().BeEquivalentTo(GetExpectedDownloadedPackages()); @@ -72,7 +70,7 @@ public async Task GivenAdvertisingManifestUpdateItUpdatesWhenDue() [Fact] public async Task GivenAdvertisingManifestUpdateItDoesNotUpdateWhenNotDue() { - (var manifestUpdater, var nugetDownloader, var sentinelPath) = GetTestUpdater(); + (var manifestUpdater, var nugetDownloader, var sentinelPath, _) = GetTestUpdater(); File.Create(sentinelPath).Close(); var createTime = DateTime.Now; @@ -86,7 +84,7 @@ public async Task GivenAdvertisingManifestUpdateItDoesNotUpdateWhenNotDue() public async Task GivenAdvertisingManifestUpdateItHonorsDisablingEnvVar() { Func getEnvironmentVariable = (envVar) => envVar.Equals(EnvironmentVariableNames.WORKLOAD_UPDATE_NOTIFY_DISABLE) ? "true" : string.Empty; - (var manifestUpdater, var nugetDownloader, _) = GetTestUpdater(getEnvironmentVariable: getEnvironmentVariable); + (var manifestUpdater, var nugetDownloader, _, _) = GetTestUpdater(getEnvironmentVariable: getEnvironmentVariable); await manifestUpdater.BackgroundUpdateAdvertisingManifestsWhenRequiredAsync(); nugetDownloader.DownloadCallParams.Should().BeEmpty(); @@ -648,19 +646,23 @@ public void WorkloadUpdatesForDifferentBandAreNotAdvertised() [Fact] public async Task TestSideBySideUpdateChecks() { - new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); - // this test checks that different version bands don't interfere with each other's update check timers var testDir = _testAssetsManager.CreateTestDirectory().Path; - (var updater1, var downloader1, var sentinelPath1) = GetTestUpdater(testDir: testDir, featureBand: "6.0.100"); - (var updater2, var downloader2, var sentinelPath2) = GetTestUpdater(testDir: testDir, featureBand: "6.0.200"); + (var updater1, var downloader1, var sentinelPath1, var resolver1) = GetTestUpdater(testDir: testDir, featureBand: "6.0.100"); + (var updater2, var downloader2, var sentinelPath2, var resolver2) = GetTestUpdater(testDir: testDir, featureBand: "6.0.200"); + new WorkloadConfigCommand( + Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]), + workloadResolverFactory: new MockWorkloadResolverFactory(testDir, "6.0.100", resolver1)).Execute().Should().Be(0); await updater1.BackgroundUpdateAdvertisingManifestsWhenRequiredAsync(); File.Exists(sentinelPath2).Should().BeFalse(); downloader1.DownloadCallParams.Should().BeEquivalentTo(GetExpectedDownloadedPackages("6.0.100")); + new WorkloadConfigCommand( + Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]), + workloadResolverFactory: new MockWorkloadResolverFactory(testDir, "6.0.200", resolver2)).Execute().Should().Be(0); await updater2.BackgroundUpdateAdvertisingManifestsWhenRequiredAsync(); File.Exists(sentinelPath2).Should().BeTrue(); downloader2.DownloadCallParams.Should().BeEquivalentTo(GetExpectedDownloadedPackages("6.0.200")); @@ -685,16 +687,20 @@ public async Task TestSideBySideUpdateChecks() return expectedDownloadedPackages; } - private (WorkloadManifestUpdater, MockNuGetPackageDownloader, string) GetTestUpdater([CallerMemberName] string testName = "", Func getEnvironmentVariable = null) + private (WorkloadManifestUpdater, MockNuGetPackageDownloader, string, WorkloadConfigCommand) GetTestUpdater([CallerMemberName] string testName = "", Func getEnvironmentVariable = null) { var testDir = _testAssetsManager.CreateTestDirectory(testName: testName).Path; var featureBand = "6.0.100"; - return GetTestUpdater(testDir, featureBand, testName, getEnvironmentVariable); + (var manifestUpdater, var packageDownloader, var sentinelPath, var workloadResolver) = GetTestUpdater(testDir, featureBand, testName, getEnvironmentVariable); + var configCommand = new WorkloadConfigCommand( + Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]), + workloadResolverFactory: new MockWorkloadResolverFactory(testDir, featureBand, workloadResolver)); + return (manifestUpdater, packageDownloader, sentinelPath, configCommand); } - private (WorkloadManifestUpdater, MockNuGetPackageDownloader, string) GetTestUpdater(string testDir, string featureBand, [CallerMemberName] string testName = "", Func getEnvironmentVariable = null) + private (WorkloadManifestUpdater, MockNuGetPackageDownloader, string, IWorkloadResolver) GetTestUpdater(string testDir, string featureBand, [CallerMemberName] string testName = "", Func getEnvironmentVariable = null) { var dotnetRoot = Path.Combine(testDir, "dotnet"); @@ -722,7 +728,7 @@ public async Task TestSideBySideUpdateChecks() var manifestUpdater = new WorkloadManifestUpdater(_reporter, workloadResolver, nugetDownloader, testDir, installationRepo, new MockPackWorkloadInstaller(dotnetRoot), getEnvironmentVariable: getEnvironmentVariable); var sentinelPath = Path.Combine(testDir, _manifestSentinelFileName + featureBand); - return (manifestUpdater, nugetDownloader, sentinelPath); + return (manifestUpdater, nugetDownloader, sentinelPath, workloadResolver); } internal static string GetManifestContent(ManifestVersion version) diff --git a/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs b/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs index 57be7c3b92c2..373373055359 100644 --- a/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs +++ b/test/dotnet-workload-update.Tests/GivenDotnetWorkloadUpdate.cs @@ -202,8 +202,6 @@ public void GivenWorkloadUpdateItRemovesOldPacksAfterInstall(bool userLocal) [InlineData(false)] public void GivenWorkloadUpdateAcrossFeatureBandsItUpdatesPacks(bool userLocal) { - new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0); - var testDirectory = _testAssetsManager.CreateTestDirectory(identifier: userLocal ? "userlocal" : "default").Path; var dotnetRoot = Path.Combine(testDirectory, "dotnet"); var userProfileDir = Path.Combine(testDirectory, "user-profile"); @@ -246,6 +244,7 @@ public void GivenWorkloadUpdateAcrossFeatureBandsItUpdatesPacks(bool userLocal) File.Create(Path.Combine(installRoot, "metadata", "workloads", sdkFeatureVersion, "InstalledWorkloads", installingWorkload)).Close(); // Update workload (without installing any workloads to this feature band) + new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]), workloadResolverFactory: workloadResolverFactory).Execute().Should().Be(0); var updateParseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "update", "--from-previous-sdk" }); var updateCommand = new WorkloadUpdateCommand(updateParseResult, reporter: _reporter, workloadResolverFactory, nugetPackageDownloader: nugetDownloader, workloadManifestUpdater: manifestUpdater, tempDirPath: testDirectory); From 014d73396bf03e985496c222d0e933aceeb55b8d Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Wed, 5 Feb 2025 16:13:46 -0800 Subject: [PATCH 11/11] EditorBrowsableState.Never --- src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs b/src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs index 9969d287e323..146545c33163 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs +++ b/src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.ComponentModel; using System.Text.Json; using System.Text.Json.Serialization; @@ -11,6 +12,7 @@ namespace Microsoft.DotNet.Workloads.Workload internal class InstallStateContents { [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + [EditorBrowsable(EditorBrowsableState.Never)] public bool? UseWorkloadSets { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]