Skip to content

Commit 708f383

Browse files
committed
Add tests for --skip-manifest-update, switch to robocopy for VM directory copy
1 parent e6e20ad commit 708f383

File tree

2 files changed

+61
-35
lines changed

2 files changed

+61
-35
lines changed

src/Tests/dotnet-MsiInstallation.Tests/Framework/VirtualMachine.cs

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,9 @@ VMActionResult Run(SerializedVMAction action)
360360
{
361361
var targetSharePath = VMPathToSharePath(action.TargetPath);
362362

363-
CopyDirectory(action.SourcePath, targetSharePath);
363+
var result = new RunExeCommand(Log, "robocopy", action.SourcePath, targetSharePath, "/mir")
364+
.Execute()
365+
.ExitCode.Should().BeLessThan(8); // Robocopy error exit codes are 8 or higher
364366

365367
return VMActionResult.Success();
366368
}
@@ -471,24 +473,6 @@ void ProcessDirectory(DirectoryInfo dir, string relativeTo)
471473
return sb.ToString();
472474
}
473475

474-
static void CopyDirectory(string sourcePath, string destPath)
475-
{
476-
if (!Directory.Exists(destPath))
477-
{
478-
Directory.CreateDirectory(destPath);
479-
}
480-
481-
foreach (var dir in Directory.GetDirectories(sourcePath))
482-
{
483-
CopyDirectory(dir, Path.Combine(destPath, Path.GetFileName(dir)));
484-
}
485-
486-
foreach (var file in Directory.GetFiles(sourcePath))
487-
{
488-
new FileInfo(file).CopyTo(Path.Combine(destPath, Path.GetFileName(file)), true);
489-
}
490-
}
491-
492476
string VMPathToSharePath(string vmPath)
493477
{
494478
var dirInfo = new DirectoryInfo(vmPath);

src/Tests/dotnet-MsiInstallation.Tests/WorkloadSetTests.cs

Lines changed: 58 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.IO;
67
using System.Linq;
78
using System.Text;
89
using System.Threading.Tasks;
910
using Microsoft.DotNet.MsiInstallerTests.Framework;
1011
using Microsoft.NET.Sdk.WorkloadManifestReader;
12+
using Microsoft.TemplateEngine.Abstractions.Mount;
1113

1214
namespace Microsoft.DotNet.MsiInstallerTests
1315
{
1416
public class WorkloadSetTests : VMTestBase
1517
{
18+
readonly string SdkTestingDirectory = @"C:\SdkTesting";
19+
1620
public WorkloadSetTests(ITestOutputHelper log) : base(log)
1721
{
1822
}
@@ -218,49 +222,76 @@ public void UpdateToWorkloadSetVersionWithManifestsNotAvailable()
218222
GetWorkloadVersion().Should().Be(workloadVersionBeforeUpdate);
219223
}
220224

221-
[Fact]
222-
public void UpdateWorkloadSetViaGlobalJson()
225+
void SetupWorkloadSetInGlobalJson(out WorkloadSet originalRollback)
223226
{
224227
InstallSdk();
225228

226229
var versionToUpdateTo = "8.0.300-preview.0.24217.2";
227-
var directory = "C:\\SdkTesting";
228230

229231
string originalVersion = GetWorkloadVersion();
230232

231-
var rollback = GetRollback(directory);
233+
originalRollback = GetRollback(SdkTestingDirectory);
232234

233235
VM.WriteFile("C:\\SdkTesting\\global.json", @$"{{""sdk"":{{""workloadVersion"":""{versionToUpdateTo}""}}}}").Execute().Should().Pass();
234236

235-
GetWorkloadVersion(directory).Should().Be(versionToUpdateTo);
237+
GetWorkloadVersion(SdkTestingDirectory).Should().Be(versionToUpdateTo);
236238

237239
// The version should have changed but not yet the manifests. Since we expect both, getting the rollback should fail.
238240
var result = VM.CreateRunCommand("dotnet", "workload", "update", "--print-rollback")
239-
.WithWorkingDirectory(directory)
241+
.WithWorkingDirectory(SdkTestingDirectory)
240242
.WithIsReadOnly(true)
241243
.Execute();
242244

243245
result.Should().Fail();
244246
result.StdErr.Should().Contain("FileNotFoundException");
245247
result.StdErr.Should().Contain(versionToUpdateTo);
246248

247-
AddNuGetSource(@"C:\SdkTesting\workloadsets", directory);
249+
AddNuGetSource(@"C:\SdkTesting\workloadsets", SdkTestingDirectory);
250+
251+
}
248252

249-
VM.CreateRunCommand("dotnet", "workload", "update").WithWorkingDirectory(directory).Execute().Should().Pass();
253+
[Fact]
254+
public void UpdateWorkloadSetViaGlobalJson()
255+
{
256+
SetupWorkloadSetInGlobalJson(out var originalRollback);
250257

251-
GetRollback(directory).Should().NotBe(rollback);
258+
VM.CreateRunCommand("dotnet", "workload", "update").WithWorkingDirectory(SdkTestingDirectory).Execute().Should().Pass();
259+
GetRollback(SdkTestingDirectory).Should().NotBe(originalRollback);
252260
}
253261

254-
string GetWorkloadVersion(string workingDirectory = null)
262+
[Fact]
263+
public void InstallWorkloadSetViaGlobalJson()
255264
{
256-
var result = VM.CreateRunCommand("dotnet", "workload", "--version")
257-
.WithWorkingDirectory(workingDirectory)
258-
.WithIsReadOnly(true)
259-
.Execute();
265+
SetupWorkloadSetInGlobalJson(out var originalRollback);
260266

261-
result.Should().Pass();
267+
VM.CreateRunCommand("dotnet", "workload", "install", "aspire")
268+
.WithWorkingDirectory(SdkTestingDirectory)
269+
.Execute().Should().Pass();
262270

263-
return result.StdOut;
271+
GetRollback(SdkTestingDirectory).Should().NotBe(originalRollback);
272+
}
273+
274+
[Fact]
275+
public void InstallWithGlobalJsonAndSkipManifestUpdate()
276+
{
277+
SetupWorkloadSetInGlobalJson(out var originalRollback);
278+
279+
VM.CreateRunCommand("dotnet", "workload", "install", "aspire", "--skip-manifest-update")
280+
.WithWorkingDirectory(SdkTestingDirectory)
281+
.Execute().Should().Fail()
282+
.And.HaveStdErrContaining("--skip-manifest-update")
283+
.And.HaveStdErrContaining(Path.Combine(SdkTestingDirectory, "global.json"));
284+
}
285+
286+
[Fact]
287+
public void InstallWithVersionAndSkipManifestUpdate()
288+
{
289+
InstallSdk();
290+
291+
VM.CreateRunCommand("dotnet", "workload", "install", "aspire", "--skip-manifest-update", "--version", "8.0.300-preview.0.24178.1")
292+
.Execute().Should().Fail()
293+
.And.HaveStdErrContaining("--skip-manifest-update")
294+
.And.HaveStdErrContaining("--sdk-version");
264295
}
265296

266297
[Fact]
@@ -305,6 +336,17 @@ public void TurnOffWorkloadSetUpdateMode()
305336
throw new NotImplementedException();
306337
}
307338

339+
string GetWorkloadVersion(string workingDirectory = null)
340+
{
341+
var result = VM.CreateRunCommand("dotnet", "workload", "--version")
342+
.WithWorkingDirectory(workingDirectory)
343+
.WithIsReadOnly(true)
344+
.Execute();
345+
346+
result.Should().Pass();
347+
348+
return result.StdOut;
349+
}
308350
string GetUpdateMode()
309351
{
310352
var result = VM.CreateRunCommand("dotnet", "workload", "config", "--update-mode")

0 commit comments

Comments
 (0)