add sb test for runtime packs in self-contained publish (#16783)

This commit is contained in:
Oleksandr Didyk 2023-07-18 19:30:23 +02:00 committed by GitHub
parent de811d8fdb
commit a7815af504
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 5 deletions

View file

@ -14,7 +14,8 @@ public enum DotNetActions
Run = 2, Run = 2,
RunWeb = 4, RunWeb = 4,
Publish = 8, Publish = 8,
PublishComplex = 16, PublishSelfContained = 16,
PublishR2R = 32, PublishComplex = 32,
Test = 64, PublishR2R = 64,
Test = 128,
} }

View file

@ -2,6 +2,9 @@
// The .NET Foundation licenses this file to you under the MIT license. // The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information. // See the LICENSE file in the project root for more information.
using System;
using System.IO;
namespace Microsoft.DotNet.SourceBuild.SmokeTests; namespace Microsoft.DotNet.SourceBuild.SmokeTests;
public class TestScenario public class TestScenario
@ -11,13 +14,15 @@ public class TestScenario
public bool NoHttps { get; set; } = Config.TargetRid.Contains("osx"); public bool NoHttps { get; set; } = Config.TargetRid.Contains("osx");
public string ScenarioName { get; } public string ScenarioName { get; }
public DotNetTemplate Template { get; } public DotNetTemplate Template { get; }
public Action<string>? Validate { get; }
public TestScenario(string scenarioName, DotNetLanguage language, DotNetTemplate template, DotNetActions commands = DotNetActions.None) public TestScenario(string scenarioName, DotNetLanguage language, DotNetTemplate template, DotNetActions commands = DotNetActions.None, Action<string>? validate = null)
{ {
ScenarioName = scenarioName; ScenarioName = scenarioName;
Template = template; Template = template;
Language = language; Language = language;
Commands = commands; Commands = commands;
Validate = validate;
} }
internal void Execute(DotNetHelper dotNetHelper) internal void Execute(DotNetHelper dotNetHelper)
@ -46,6 +51,10 @@ public class TestScenario
{ {
dotNetHelper.ExecutePublish(projectName, Template); dotNetHelper.ExecutePublish(projectName, Template);
} }
if (Commands.HasFlag(DotNetActions.PublishSelfContained))
{
dotNetHelper.ExecutePublish(projectName, Template, selfContained: true, rid: Config.TargetRid);
}
if (Commands.HasFlag(DotNetActions.PublishComplex)) if (Commands.HasFlag(DotNetActions.PublishComplex))
{ {
dotNetHelper.ExecutePublish(projectName, Template, selfContained: false); dotNetHelper.ExecutePublish(projectName, Template, selfContained: false);
@ -60,5 +69,8 @@ public class TestScenario
{ {
dotNetHelper.ExecuteTest(projectName); dotNetHelper.ExecuteTest(projectName);
} }
string projectPath = Path.Combine(DotNetHelper.ProjectsDirectory, projectName);
Validate?.Invoke(projectPath);
} }
} }

View file

@ -3,7 +3,9 @@
// See the LICENSE file in the project root for more information. // See the LICENSE file in the project root for more information.
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Text.Json.Nodes;
using Xunit; using Xunit;
using Xunit.Abstractions; using Xunit.Abstractions;
@ -41,7 +43,22 @@ public class WebScenarioTests : SmokeTests
yield return new(nameof(WebScenarioTests), DotNetLanguage.CSharp, DotNetTemplate.Razor, DotNetActions.Build | DotNetActions.Run | DotNetActions.Publish); yield return new(nameof(WebScenarioTests), DotNetLanguage.CSharp, DotNetTemplate.Razor, DotNetActions.Build | DotNetActions.Run | DotNetActions.Publish);
yield return new(nameof(WebScenarioTests), DotNetLanguage.CSharp, DotNetTemplate.BlazorWasm, DotNetActions.Build | DotNetActions.Run | DotNetActions.Publish); yield return new(nameof(WebScenarioTests), DotNetLanguage.CSharp, DotNetTemplate.BlazorWasm, DotNetActions.Build | DotNetActions.Run | DotNetActions.Publish);
yield return new(nameof(WebScenarioTests), DotNetLanguage.CSharp, DotNetTemplate.WebApp, DotNetActions.PublishSelfContained, VerifyRuntimePacksForSelfContained);
yield return new(nameof(WebScenarioTests), DotNetLanguage.CSharp, DotNetTemplate.Worker); yield return new(nameof(WebScenarioTests), DotNetLanguage.CSharp, DotNetTemplate.Worker);
yield return new(nameof(WebScenarioTests), DotNetLanguage.CSharp, DotNetTemplate.Angular); yield return new(nameof(WebScenarioTests), DotNetLanguage.CSharp, DotNetTemplate.Angular);
} }
private static void VerifyRuntimePacksForSelfContained(string projectPath)
{
// 'expectedPackageFiles' key in project.nuget.cache' will contain paths to restored packages
// Since we are publishing an emtpy template, the only packages that could end up there are the ref packs we are after
string projNugetCachePath = Path.Combine(projectPath, "obj", "project.nuget.cache");
JsonNode? projNugetCache = JsonNode.Parse(File.ReadAllText(projNugetCachePath));
string? restoredPackageFiles = projNugetCache?["expectedPackageFiles"]?.ToString();
Assert.True(restoredPackageFiles is not null, "Failed to parse project.nuget.cache");
Assert.True("[]" == restoredPackageFiles, "Runtime packs were retrieved from NuGet instead of the SDK");
}
} }