From bfedf053e61c2cc43e2720ad170f110d0a7c23f7 Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Mon, 29 Apr 2024 17:37:24 -0700 Subject: [PATCH 1/5] Add test --- .../WorkloadSetTests.cs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs b/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs index 64a182f87493..1eeb8021c486 100644 --- a/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs +++ b/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs @@ -213,6 +213,33 @@ public void UpdateToWorkloadSetVersionWithManifestsNotAvailable() GetWorkloadVersion().Should().Be(workloadVersionBeforeUpdate); } + [Fact] + public void UpdateWorkloadSetViaGlobalJson() + { + InstallSdk(); + + var versionToUpdateTo = "8.0.201"; + + string originalVersion = GetWorkloadVersion(); + + File.WriteAllText("global.json", +@"{ + ""sdk"": { + ""workloadVersion"": ""versionToUpdateTo"" + } +}".Replace("versionToUpdateTo", versionToUpdateTo)); + + var result = VM.CreateRunCommand("dotnet", "workload", "--version").WithIsReadOnly(true).Execute(); + result.Should().Fail(); + result.StdErr.Should().Contain(versionToUpdateTo); + + VM.CreateRunCommand("dotnet", "workload", "update").Execute().Should().Pass(); + + var finalVersion = GetWorkloadVersion(); + finalVersion.Should().NotBe(originalVersion); + finalVersion.Should().Be(versionToUpdateTo); + } + string GetWorkloadVersion() { var result = VM.CreateRunCommand("dotnet", "workload", "--version") From 8a149b322e029e3df109b0ea5d79f8d514b0ca4b Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Wed, 1 May 2024 14:55:09 -0700 Subject: [PATCH 2/5] Updates --- .../Framework/VMTestBase.cs | 3 +- .../WorkloadSetTests.cs | 36 +++++++++++-------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/Tests/dotnet-MsiInstallation.Tests/Framework/VMTestBase.cs b/src/Tests/dotnet-MsiInstallation.Tests/Framework/VMTestBase.cs index 769184741793..74b93e94c58d 100644 --- a/src/Tests/dotnet-MsiInstallation.Tests/Framework/VMTestBase.cs +++ b/src/Tests/dotnet-MsiInstallation.Tests/Framework/VMTestBase.cs @@ -160,9 +160,10 @@ protected CommandResult InstallWorkload(string workloadName) return result; } - protected WorkloadSet GetRollback() + protected WorkloadSet GetRollback(string directory = null) { var result = VM.CreateRunCommand("dotnet", "workload", "update", "--print-rollback") + .WithWorkingDirectory(directory) .WithIsReadOnly(true) .Execute(); diff --git a/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs b/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs index 1eeb8021c486..c327328aeba0 100644 --- a/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs +++ b/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs @@ -218,31 +218,38 @@ public void UpdateWorkloadSetViaGlobalJson() { InstallSdk(); - var versionToUpdateTo = "8.0.201"; + var versionToUpdateTo = "8.0.300-preview.0.24217.2"; + var directory = "C:\\SdkTesting"; string originalVersion = GetWorkloadVersion(); - File.WriteAllText("global.json", -@"{ - ""sdk"": { - ""workloadVersion"": ""versionToUpdateTo"" - } -}".Replace("versionToUpdateTo", versionToUpdateTo)); + var rollback = GetRollback(directory); + + VM.WriteFile("C:\\SdkTesting\\global.json", @"{""sdk"":{""workloadVersion"":""versionToUpdateTo""}}".Replace("versionToUpdateTo", versionToUpdateTo)).Execute().Should().Pass(); + + GetWorkloadVersion(directory).Should().Be(versionToUpdateTo); + + // The version should have changed but not yet the manifests. Since we expect both, getting the rollback should fail. + var result = VM.CreateRunCommand("dotnet", "workload", "update", "--print-rollback") + .WithWorkingDirectory(directory) + .WithIsReadOnly(true) + .Execute(); - var result = VM.CreateRunCommand("dotnet", "workload", "--version").WithIsReadOnly(true).Execute(); result.Should().Fail(); + result.StdErr.Should().Contain("FileNotFoundException"); result.StdErr.Should().Contain(versionToUpdateTo); - VM.CreateRunCommand("dotnet", "workload", "update").Execute().Should().Pass(); + AddNuGetSource(@"C:\SdkTesting\workloadsets", directory); + + VM.CreateRunCommand("dotnet", "workload", "update").WithWorkingDirectory(directory).Execute().Should().Pass(); - var finalVersion = GetWorkloadVersion(); - finalVersion.Should().NotBe(originalVersion); - finalVersion.Should().Be(versionToUpdateTo); + GetRollback(directory).Should().NotBe(rollback); } - string GetWorkloadVersion() + string GetWorkloadVersion(string workingDirectory = null) { var result = VM.CreateRunCommand("dotnet", "workload", "--version") + .WithWorkingDirectory(workingDirectory) .WithIsReadOnly(true) .Execute(); @@ -262,9 +269,10 @@ string GetUpdateMode() return result.StdOut; } - void AddNuGetSource(string source) + void AddNuGetSource(string source, string directory = null) { VM.CreateRunCommand("dotnet", "nuget", "add", "source", source) + .WithWorkingDirectory(directory) .WithDescription($"Add {source} to NuGet.config") .Execute() .Should() From e1da9f5979580edf59c2bcb3d58ba92acc6bf0ed Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Tue, 4 Jun 2024 10:54:09 -0700 Subject: [PATCH 3/5] Use escape sequence instead of Replace --- src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs b/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs index c327328aeba0..c2e55474eb1f 100644 --- a/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs +++ b/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs @@ -225,7 +225,7 @@ public void UpdateWorkloadSetViaGlobalJson() var rollback = GetRollback(directory); - VM.WriteFile("C:\\SdkTesting\\global.json", @"{""sdk"":{""workloadVersion"":""versionToUpdateTo""}}".Replace("versionToUpdateTo", versionToUpdateTo)).Execute().Should().Pass(); + VM.WriteFile("C:\\SdkTesting\\global.json", @$"{{""sdk"":{{""workloadVersion"":""{versionToUpdateTo""}}}").Execute().Should().Pass(); GetWorkloadVersion(directory).Should().Be(versionToUpdateTo); From 565269c0650031bec94b7a40299e86eaa34e5b7c Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Tue, 4 Jun 2024 12:26:45 -0700 Subject: [PATCH 4/5] Update src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs --- src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs b/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs index c2e55474eb1f..7b18cdb7a6a2 100644 --- a/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs +++ b/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs @@ -225,7 +225,7 @@ public void UpdateWorkloadSetViaGlobalJson() var rollback = GetRollback(directory); - VM.WriteFile("C:\\SdkTesting\\global.json", @$"{{""sdk"":{{""workloadVersion"":""{versionToUpdateTo""}}}").Execute().Should().Pass(); + VM.WriteFile("C:\\SdkTesting\\global.json", @$"{{""sdk"":{{""workloadVersion"":""{versionToUpdateTo""}}}}}").Execute().Should().Pass(); GetWorkloadVersion(directory).Should().Be(versionToUpdateTo); From cd4ab5f491289aaabc7b1d4a672537e7bb4329d5 Mon Sep 17 00:00:00 2001 From: Forgind <12969783+Forgind@users.noreply.github.com> Date: Tue, 4 Jun 2024 15:43:46 -0700 Subject: [PATCH 5/5] Update src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs --- src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs b/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs index 455e7484fb76..e7157a0b7da5 100644 --- a/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs +++ b/src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs @@ -225,7 +225,7 @@ public void UpdateWorkloadSetViaGlobalJson() var rollback = GetRollback(directory); - VM.WriteFile("C:\\SdkTesting\\global.json", @$"{{""sdk"":{{""workloadVersion"":""{versionToUpdateTo""}}}}}").Execute().Should().Pass(); + VM.WriteFile("C:\\SdkTesting\\global.json", @$"{{""sdk"":{{""workloadVersion"":""{versionToUpdateTo}""}}}}").Execute().Should().Pass(); GetWorkloadVersion(directory).Should().Be(versionToUpdateTo);