Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .vsts-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ extends:
centosStream9:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9
debian12Amd64:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-gcc14-amd64
image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-gcc15-amd64
fedora39:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-39
mariner20CrossArm:
Expand Down
2 changes: 1 addition & 1 deletion .vsts-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ resources:
- container: centosStream9
image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9
- container: debian12Amd64
image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-gcc14-amd64
image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-gcc15-amd64
- container: fedora39
image: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-39
- container: ubuntu2204DebPkg
Expand Down
8 changes: 2 additions & 6 deletions eng/pipelines/templates/jobs/sdk-job-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,7 @@ parameters:
container: ubuntu2204DebPkg
helixTargetContainer: $(helixTargetContainerPrefix)ubuntu-22.04-helix-amd64
osProperties: $(linuxOsPortableProperties)
# Skipping all container-based testing for now.
# See: https://github.com/dotnet/sdk/issues/40935
runTests: false
runTests: true
- categoryName: ContainerBased
container: fedora39
# No fedora Helix container is available, so use the ubuntu one instead.
Expand All @@ -54,9 +52,7 @@ parameters:
container: debian12Amd64
helixTargetContainer: $(helixTargetContainerPrefix)debian-11-helix-amd64
osProperties: /p:OSName=linux /p:BuildSdkDeb=true
# Skipping all container-based testing for now.
# See: https://github.com/dotnet/sdk/issues/40935
runTests: false
runTests: true
- categoryName: ContainerBased
container: alpine319WithNode
helixTargetContainer: $(helixTargetContainerPrefix)alpine-3.18-helix-amd64
Expand Down
7 changes: 7 additions & 0 deletions test/Microsoft.NET.TestFramework/EnvironmentInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,13 @@ public static bool SupportsTargetFramework(string targetFramework)
return false;
}
}
else if (osId.Equals("debian", StringComparison.OrdinalIgnoreCase))
{
if (nugetFramework.Version < new Version(2, 0, 0, 0))
{
return false;
}
}
else if (Version.TryParse(versionString, out Version? osVersion))
{
if (osId.Equals("fedora", StringComparison.OrdinalIgnoreCase))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ public GivenDotnetWorkloadRestore(ITestOutputHelper log) : base(log)
[Fact]
public void ProjectsThatDoNotSupportWorkloadsAreNotInspected()
{
if(IsRunningInContainer())
{
// Skipping test in a Helix container environment due to read-only DOTNET_ROOT, which causes workload restore to fail when writing workload metadata.
return;
}

var projectPath =
_testAssetsManager
.CopyTestAsset(DcProjAssetName)
Expand All @@ -32,6 +38,12 @@ public void ProjectsThatDoNotSupportWorkloadsAreNotInspected()
[Fact]
public void ProjectsThatDoNotSupportWorkloadsAndAreTransitivelyReferencedDoNotBreakTheBuild()
{
if(IsRunningInContainer())
{
// Skipping test in a Helix container environment due to read-only DOTNET_ROOT, which causes workload restore to fail when writing workload metadata.
return;
}

var projectPath =
_testAssetsManager
.CopyTestAsset(TransitiveReferenceNoWorkloadsAssetName)
Expand All @@ -45,4 +57,9 @@ public void ProjectsThatDoNotSupportWorkloadsAndAreTransitivelyReferencedDoNotBr
// if we did try to restore the esproj in this TestAsset we would fail, so passing means we didn't!
.Pass();
}

private bool IsRunningInContainer()
{
return File.Exists("/.dockerenv") && (RuntimeInformation.OSDescription.Contains("Ubuntu") || RuntimeInformation.OSDescription.Contains("Debian"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,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().Be(0);
new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]), workloadResolverFactory: workloadResolverFactory).Execute().Should().Be(0);
updateCommand.Execute();
var newInstallState = InstallStateContents.FromPath(installStatePath);
newInstallState.Manifests.Should().BeNull();
Expand All @@ -280,7 +280,7 @@ public void GivenWorkloadUpdateAcrossFeatureBandsItUpdatesPacks(bool userLocal)
public void GivenWorkloadUpdateItUpdatesOutOfDatePacks()
{
var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android") };
(_, var command, var installer, _, _, _) = GetTestInstallers(_parseResult, installedWorkloads: mockWorkloadIds, installedFeatureBand: "6.0.100");
(_, var command, var installer, _, _, _, _) = GetTestInstallers(_parseResult, installedWorkloads: mockWorkloadIds, installedFeatureBand: "6.0.100");

command.Execute();

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


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

command.Execute();

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

command.Execute();

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

command.Execute();

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

command.Execute();

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

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


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

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

updateCommand.Execute()
.Should().Be(0);
Expand Down Expand Up @@ -614,7 +614,7 @@ public void GivenInvalidVersionInRollbackFileItErrors()
exception.InnerException.Message.Should().Contain(string.Format(CliCommandStrings.InvalidVersionForWorkload, "mock.workload", "6.0.0.15"));
}

internal (string, WorkloadUpdateCommand, MockPackWorkloadInstaller, IWorkloadResolver, MockWorkloadManifestUpdater, MockNuGetPackageDownloader) GetTestInstallers(
internal (string, WorkloadUpdateCommand, MockPackWorkloadInstaller, IWorkloadResolver, MockWorkloadManifestUpdater, MockNuGetPackageDownloader, IWorkloadResolverFactory) GetTestInstallers(
ParseResult parseResult,
[CallerMemberName] string testName = "",
string failingWorkload = null,
Expand Down Expand Up @@ -657,7 +657,7 @@ public void GivenInvalidVersionInRollbackFileItErrors()
nugetPackageDownloader: nugetDownloader,
workloadManifestUpdater: manifestUpdater);

return (dotnetRoot, installManager, installer, workloadResolver, manifestUpdater, nugetDownloader);
return (dotnetRoot, installManager, installer, workloadResolver, manifestUpdater, nugetDownloader, workloadResolverFactory);
}
}
}
Loading