Skip to content

Commit b179531

Browse files
author
v-wuzhai
authored
Enable container test execution (#48763)
2 parents 0e185be + 4bb250b commit b179531

File tree

6 files changed

+42
-22
lines changed

6 files changed

+42
-22
lines changed

.vsts-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ extends:
6969
centosStream9:
7070
image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9
7171
debian12Amd64:
72-
image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-gcc14-amd64
72+
image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-gcc15-amd64
7373
fedora39:
7474
image: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-39
7575
mariner20CrossArm:

.vsts-pr.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ resources:
3232
- container: centosStream9
3333
image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9
3434
- container: debian12Amd64
35-
image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-gcc14-amd64
35+
image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-gcc15-amd64
3636
- container: fedora39
3737
image: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-39
3838
- container: ubuntu2204DebPkg

eng/pipelines/templates/jobs/sdk-job-matrix.yml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@ parameters:
3232
container: ubuntu2204DebPkg
3333
helixTargetContainer: $(helixTargetContainerPrefix)ubuntu-22.04-helix-amd64
3434
osProperties: $(linuxOsPortableProperties)
35-
# Skipping all container-based testing for now.
36-
# See: https://github.com/dotnet/sdk/issues/40935
37-
runTests: false
35+
runTests: true
3836
- categoryName: ContainerBased
3937
container: fedora39
4038
# No fedora Helix container is available, so use the ubuntu one instead.
@@ -54,9 +52,7 @@ parameters:
5452
container: debian12Amd64
5553
helixTargetContainer: $(helixTargetContainerPrefix)debian-11-helix-amd64
5654
osProperties: /p:OSName=linux /p:BuildSdkDeb=true
57-
# Skipping all container-based testing for now.
58-
# See: https://github.com/dotnet/sdk/issues/40935
59-
runTests: false
55+
runTests: true
6056
- categoryName: ContainerBased
6157
container: alpine319WithNode
6258
helixTargetContainer: $(helixTargetContainerPrefix)alpine-3.18-helix-amd64

test/Microsoft.NET.TestFramework/EnvironmentInfo.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@ public static bool SupportsTargetFramework(string targetFramework)
101101
return false;
102102
}
103103
}
104+
else if (osId.Equals("debian", StringComparison.OrdinalIgnoreCase))
105+
{
106+
if (nugetFramework.Version < new Version(2, 0, 0, 0))
107+
{
108+
return false;
109+
}
110+
}
104111
else if (Version.TryParse(versionString, out Version? osVersion))
105112
{
106113
if (osId.Equals("fedora", StringComparison.OrdinalIgnoreCase))

test/dotnet.Tests/CommandTests/Workload/Restore/GivenDotnetWorkloadRestore.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ public GivenDotnetWorkloadRestore(ITestOutputHelper log) : base(log)
1515
[Fact]
1616
public void ProjectsThatDoNotSupportWorkloadsAreNotInspected()
1717
{
18+
if(IsRunningInContainer())
19+
{
20+
// Skipping test in a Helix container environment due to read-only DOTNET_ROOT, which causes workload restore to fail when writing workload metadata.
21+
return;
22+
}
23+
1824
var projectPath =
1925
_testAssetsManager
2026
.CopyTestAsset(DcProjAssetName)
@@ -32,6 +38,12 @@ public void ProjectsThatDoNotSupportWorkloadsAreNotInspected()
3238
[Fact]
3339
public void ProjectsThatDoNotSupportWorkloadsAndAreTransitivelyReferencedDoNotBreakTheBuild()
3440
{
41+
if(IsRunningInContainer())
42+
{
43+
// Skipping test in a Helix container environment due to read-only DOTNET_ROOT, which causes workload restore to fail when writing workload metadata.
44+
return;
45+
}
46+
3547
var projectPath =
3648
_testAssetsManager
3749
.CopyTestAsset(TransitiveReferenceNoWorkloadsAssetName)
@@ -45,4 +57,9 @@ public void ProjectsThatDoNotSupportWorkloadsAndAreTransitivelyReferencedDoNotBr
4557
// if we did try to restore the esproj in this TestAsset we would fail, so passing means we didn't!
4658
.Pass();
4759
}
60+
61+
private bool IsRunningInContainer()
62+
{
63+
return File.Exists("/.dockerenv") && (RuntimeInformation.OSDescription.Contains("Ubuntu") || RuntimeInformation.OSDescription.Contains("Debian"));
64+
}
4865
}

test/dotnet.Tests/CommandTests/Workload/Update/GivenDotnetWorkloadUpdate.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ public void GivenWorkloadUpdateAcrossFeatureBandsItUpdatesPacks(bool userLocal)
257257
};
258258
Directory.CreateDirectory(Path.GetDirectoryName(installStatePath));
259259
File.WriteAllText(installStatePath, oldInstallState.ToString());
260-
new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"])).Execute().Should().Be(0);
260+
new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]), workloadResolverFactory: workloadResolverFactory).Execute().Should().Be(0);
261261
updateCommand.Execute();
262262
var newInstallState = InstallStateContents.FromPath(installStatePath);
263263
newInstallState.Manifests.Should().BeNull();
@@ -280,7 +280,7 @@ public void GivenWorkloadUpdateAcrossFeatureBandsItUpdatesPacks(bool userLocal)
280280
public void GivenWorkloadUpdateItUpdatesOutOfDatePacks()
281281
{
282282
var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android") };
283-
(_, var command, var installer, _, _, _) = GetTestInstallers(_parseResult, installedWorkloads: mockWorkloadIds, installedFeatureBand: "6.0.100");
283+
(_, var command, var installer, _, _, _, _) = GetTestInstallers(_parseResult, installedWorkloads: mockWorkloadIds, installedFeatureBand: "6.0.100");
284284

285285
command.Execute();
286286

@@ -405,7 +405,7 @@ public void GivenWorkloadUpdateItFindsGreatestWorkloadSetWithSpecifiedComponents
405405
public void GivenWorkloadUpdateItRollsBackOnFailedUpdate()
406406
{
407407
var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android"), new WorkloadId("xamarin-android-build") };
408-
(_, var command, var installer, var workloadResolver, _, _) = GetTestInstallers(_parseResult, installedWorkloads: mockWorkloadIds, failingPack: "Xamarin.Android.Framework", installedFeatureBand: "6.0.100");
408+
(_, var command, var installer, var workloadResolver, _, _, _) = GetTestInstallers(_parseResult, installedWorkloads: mockWorkloadIds, failingPack: "Xamarin.Android.Framework", installedFeatureBand: "6.0.100");
409409

410410

411411
var exceptionThrown = Assert.Throws<GracefulException>(() => command.Execute());
@@ -425,7 +425,7 @@ public void GivenWorkloadUpdateItCanDownloadToOfflineCache()
425425
var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android") };
426426
var cachePath = Path.Combine(_testAssetsManager.CreateTestDirectory(identifier: "cachePath").Path, "mockCachePath");
427427
var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "update", "--download-to-cache", cachePath });
428-
(_, var command, _, _, var manifestUpdater, var packageDownloader) = GetTestInstallers(parseResult, installedWorkloads: mockWorkloadIds, includeInstalledPacks: true, installedFeatureBand: "6.0.100");
428+
(_, var command, _, _, var manifestUpdater, var packageDownloader, _) = GetTestInstallers(parseResult, installedWorkloads: mockWorkloadIds, includeInstalledPacks: true, installedFeatureBand: "6.0.100");
429429

430430
command.Execute();
431431

@@ -446,7 +446,7 @@ public void GivenWorkloadUpdateItCanInstallFromOfflineCache()
446446
var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android") };
447447
var cachePath = "mockCachePath";
448448
var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "update", "--from-cache", cachePath });
449-
(_, var command, var installer, _, _, var nugetDownloader) = GetTestInstallers(parseResult, installedWorkloads: mockWorkloadIds, installedFeatureBand: "6.0.100");
449+
(_, var command, var installer, _, _, var nugetDownloader, _) = GetTestInstallers(parseResult, installedWorkloads: mockWorkloadIds, installedFeatureBand: "6.0.100");
450450

451451
command.Execute();
452452

@@ -462,7 +462,7 @@ public void GivenWorkloadUpdateItPrintsDownloadUrls()
462462
{
463463
var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android") };
464464
var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "update", "--print-download-link-only" });
465-
(_, var command, _, _, _, _) = GetTestInstallers(parseResult, installedWorkloads: mockWorkloadIds, includeInstalledPacks: true, installedFeatureBand: "6.0.100");
465+
(_, var command, _, _, _, _, _) = GetTestInstallers(parseResult, installedWorkloads: mockWorkloadIds, includeInstalledPacks: true, installedFeatureBand: "6.0.100");
466466

467467
command.Execute();
468468

@@ -476,7 +476,7 @@ public void GivenWorkloadUpdateItPrintsDownloadUrlsForNewFeatureBand()
476476
{
477477
var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android") };
478478
var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "update", "--print-download-link-only", "--sdk-version", "7.0.100" });
479-
(_, var command, _, _, _, _) = GetTestInstallers(parseResult, installedWorkloads: mockWorkloadIds, includeInstalledPacks: true, sdkVersion: "6.0.400");
479+
(_, var command, _, _, _, _, _) = GetTestInstallers(parseResult, installedWorkloads: mockWorkloadIds, includeInstalledPacks: true, sdkVersion: "6.0.400");
480480

481481
command.Execute();
482482

@@ -504,7 +504,7 @@ public void GivenWorkloadUpdateWithSdkVersionItErrors()
504504
public void GivenOnlyUpdateAdManifestItSucceeds()
505505
{
506506
var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "update", "--advertising-manifests-only" });
507-
(_, var command, _, _, var manifestUpdater, _) = GetTestInstallers(parseResult, installedFeatureBand: "6.0.100");
507+
(_, var command, _, _, var manifestUpdater, _, _) = GetTestInstallers(parseResult, installedFeatureBand: "6.0.100");
508508

509509
command.Execute();
510510
manifestUpdater.UpdateAdvertisingManifestsCallCount.Should().Be(1);
@@ -514,7 +514,7 @@ public void GivenOnlyUpdateAdManifestItSucceeds()
514514
public void GivenPrintRollbackDefinitionItIncludesAllInstalledManifests()
515515
{
516516
var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "update", "--print-rollback" });
517-
(_, var updateCommand, _, _, _, _) = GetTestInstallers(parseResult, installedFeatureBand: "6.0.100");
517+
(_, var updateCommand, _, _, _, _, _) = GetTestInstallers(parseResult, installedFeatureBand: "6.0.100");
518518

519519

520520
updateCommand.Execute();
@@ -539,10 +539,10 @@ public void ApplyRollbackAcrossFeatureBand(string existingSdkFeatureBand, string
539539
{
540540
new(new ManifestVersionUpdate(new ManifestId("mock-manifest"), new ManifestVersion("2.0.0"), newSdkFeatureBand), null),
541541
};
542-
(var dotnetPath, var updateCommand, var packInstaller, _, _, _) = GetTestInstallers(parseResult, manifestUpdates: manifestsToUpdate, sdkVersion: "6.0.300", identifier: existingSdkFeatureBand + newSdkFeatureBand, installedFeatureBand: existingSdkFeatureBand);
542+
(var dotnetPath, var updateCommand, var packInstaller, _, _, _, var resolverFactory) = GetTestInstallers(parseResult, manifestUpdates: manifestsToUpdate, sdkVersion: "6.0.300", identifier: existingSdkFeatureBand + newSdkFeatureBand, installedFeatureBand: existingSdkFeatureBand);
543543

544544
parseResult = Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]);
545-
WorkloadConfigCommand configCommand = new(parseResult);
545+
WorkloadConfigCommand configCommand = new(parseResult, workloadResolverFactory: resolverFactory);
546546
configCommand.Execute().Should().Be(0);
547547
updateCommand.Execute()
548548
.Should().Be(0);
@@ -571,7 +571,7 @@ public void ApplyRollbackWithMultipleManifestsAcrossFeatureBand()
571571
new(new ManifestVersionUpdate(new ManifestId("mock-manifest-2"), new ManifestVersion("2.0.0"), "6.0.300"), null),
572572
new(new ManifestVersionUpdate(new ManifestId("mock-manifest-3"), new ManifestVersion("2.0.0"), "6.0.100"), null),
573573
};
574-
(_, var updateCommand, var packInstaller, _, _, _) = GetTestInstallers(parseResult, manifestUpdates: manifestsToUpdate, sdkVersion: "6.0.300", installedFeatureBand: "6.0.300");
574+
(_, var updateCommand, var packInstaller, _, _, _, _) = GetTestInstallers(parseResult, manifestUpdates: manifestsToUpdate, sdkVersion: "6.0.300", installedFeatureBand: "6.0.300");
575575

576576
updateCommand.Execute()
577577
.Should().Be(0);
@@ -614,7 +614,7 @@ public void GivenInvalidVersionInRollbackFileItErrors()
614614
exception.InnerException.Message.Should().Contain(string.Format(CliCommandStrings.InvalidVersionForWorkload, "mock.workload", "6.0.0.15"));
615615
}
616616

617-
internal (string, WorkloadUpdateCommand, MockPackWorkloadInstaller, IWorkloadResolver, MockWorkloadManifestUpdater, MockNuGetPackageDownloader) GetTestInstallers(
617+
internal (string, WorkloadUpdateCommand, MockPackWorkloadInstaller, IWorkloadResolver, MockWorkloadManifestUpdater, MockNuGetPackageDownloader, IWorkloadResolverFactory) GetTestInstallers(
618618
ParseResult parseResult,
619619
[CallerMemberName] string testName = "",
620620
string failingWorkload = null,
@@ -657,7 +657,7 @@ public void GivenInvalidVersionInRollbackFileItErrors()
657657
nugetPackageDownloader: nugetDownloader,
658658
workloadManifestUpdater: manifestUpdater);
659659

660-
return (dotnetRoot, installManager, installer, workloadResolver, manifestUpdater, nugetDownloader);
660+
return (dotnetRoot, installManager, installer, workloadResolver, manifestUpdater, nugetDownloader, workloadResolverFactory);
661661
}
662662
}
663663
}

0 commit comments

Comments
 (0)