diff --git a/eng/Dependencies.props b/eng/Dependencies.props index 8dd976051839..8b2bd9ca7d15 100644 --- a/eng/Dependencies.props +++ b/eng/Dependencies.props @@ -181,6 +181,7 @@ and are generated based on the last package release. + diff --git a/eng/Versions.props b/eng/Versions.props index 96cc0344e36d..f2a6c48cf541 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -252,6 +252,7 @@ 89.0.4389.2300-beta 4.0.0-beta1 1.4.0 + 2.0.0 4.0.0 2.0.593 3.1.1 diff --git a/eng/helix/content/RunTests/TestRunner.cs b/eng/helix/content/RunTests/TestRunner.cs index 2a48452d7356..993365dd97dc 100644 --- a/eng/helix/content/RunTests/TestRunner.cs +++ b/eng/helix/content/RunTests/TestRunner.cs @@ -48,6 +48,9 @@ public bool SetupEnvironment() var playwrightBrowsers = Path.Combine(helixDir, "ms-playwright"); Console.WriteLine($"Setting PLAYWRIGHT_BROWSERS_PATH: {playwrightBrowsers}"); EnvironmentVariables.Add("PLAYWRIGHT_BROWSERS_PATH", playwrightBrowsers); + + Console.WriteLine($"Setting playwright console logging to warning: Logging__Console__LogLevel__PlaywrightSharp = Warning"); + EnvironmentVariables.Add("Logging__Console__LogLevel__PlaywrightSharp", "Warning"); #endif Console.WriteLine($"Creating nuget restore directory: {nugetRestore}"); diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorServerTemplateTest.cs b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorServerTemplateTest.cs index 0fc61a174167..bb8f2961ccb6 100644 --- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorServerTemplateTest.cs +++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorServerTemplateTest.cs @@ -9,6 +9,8 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.BrowserTesting; using Microsoft.AspNetCore.Testing; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Testing; using PlaywrightSharp; using ProjectTemplates.Tests.Infrastructure; using Templates.Test.Helpers; @@ -17,19 +19,16 @@ namespace Templates.Test { + [LogLevel(LogLevel.Debug)] public class BlazorServerTemplateTest : BlazorTemplateTest { - public BlazorServerTemplateTest(ProjectFactoryFixture projectFactory, PlaywrightFixture fixture, ITestOutputHelper output) + public BlazorServerTemplateTest(ProjectFactoryFixture projectFactory, PlaywrightFixture fixture) : base(fixture) { ProjectFactory = projectFactory; ; - Output = output; - BrowserContextInfo = new ContextInformation(CreateFactory(output)); } public ProjectFactoryFixture ProjectFactory { get; set; } - public ITestOutputHelper Output { get; } - public ContextInformation BrowserContextInfo { get; } public Project Project { get; private set; } @@ -40,7 +39,7 @@ public async Task BlazorServerTemplateWorks_NoAuth(BrowserKind browserKind) // Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278 Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true"); - Project = await ProjectFactory.GetOrCreateProject("blazorservernoauth" + browserKind.ToString(), Output); + Project = await ProjectFactory.GetOrCreateProject("blazorservernoauth" + browserKind.ToString(), TestOutputHelper ); var createResult = await Project.RunDotNetNewAsync("blazorserver"); Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult)); @@ -111,7 +110,7 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi // Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278 Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true"); - Project = await ProjectFactory.GetOrCreateProject("blazorserverindividual" + browserKind + (useLocalDB ? "uld" : ""), Output); + Project = await ProjectFactory.GetOrCreateProject("blazorserverindividual" + browserKind + (useLocalDB ? "uld" : ""), TestOutputHelper ); var createResult = await Project.RunDotNetNewAsync("blazorserver", auth: "Individual", useLocalDB: useLocalDB); Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult)); @@ -216,7 +215,7 @@ private async Task TestBasicNavigation(IPage page) [InlineData("SingleOrg", new string[] { "--calls-graph" })] public async Task BlazorServerTemplat_IdentityWeb_BuildAndPublish(string auth, string[] args) { - Project = await ProjectFactory.GetOrCreateProject("blazorserveridweb" + Guid.NewGuid().ToString().Substring(0, 10).ToLowerInvariant(), Output); + Project = await ProjectFactory.GetOrCreateProject("blazorserveridweb" + Guid.NewGuid().ToString().Substring(0, 10).ToLowerInvariant(), TestOutputHelper ); var createResult = await Project.RunDotNetNewAsync("blazorserver", auth: auth, args: args); Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", Project, createResult)); diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplateTest.cs b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplateTest.cs index 4057e99fec6a..0c28674a9a7c 100644 --- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplateTest.cs +++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplateTest.cs @@ -1,8 +1,10 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Reflection; using System.Runtime.InteropServices; using Microsoft.AspNetCore.BrowserTesting; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Testing; using ProjectTemplates.Tests.Infrastructure; @@ -11,7 +13,7 @@ namespace Templates.Test { - public class BlazorTemplateTest + public class BlazorTemplateTest : LoggedTest { public BlazorTemplateTest(PlaywrightFixture browserFixture) { @@ -19,18 +21,18 @@ public BlazorTemplateTest(PlaywrightFixture browserFix } public PlaywrightFixture Fixture { get; } + public ContextInformation BrowserContextInfo { get; private set; } - - public static ILoggerFactory CreateFactory(ITestOutputHelper output) + public override void Initialize(TestContext context, MethodInfo methodInfo, object[] testMethodArguments, ITestOutputHelper testOutputHelper) { - var testSink = new TestSink(); - testSink.MessageLogged += LogMessage; - var loggerFactory = new TestLoggerFactory(testSink, enabled: true); - return loggerFactory; + base.Initialize(context, methodInfo, testMethodArguments, testOutputHelper); + TestSink.MessageLogged += LogMessage; + BrowserContextInfo = new ContextInformation(LoggerFactory); + void LogMessage(WriteContext ctx) { - output.WriteLine($"{MapLogLevel(ctx)}: [Browser]{ctx.Message}"); + testOutputHelper.WriteLine($"{MapLogLevel(ctx)}: [Browser]{ctx.Message}"); static string MapLogLevel(WriteContext obj) => obj.LogLevel switch { diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj index 8001d254d00c..b8c36467abc6 100644 --- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj +++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj @@ -45,6 +45,7 @@ + false true diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs index d917e71ca32a..5d285975c541 100644 --- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs +++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs @@ -15,6 +15,8 @@ using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.CommandLineUtils; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Testing; using Newtonsoft.Json.Linq; using PlaywrightSharp; using ProjectTemplates.Tests.Infrastructure; @@ -24,22 +26,17 @@ namespace Templates.Test { + [LogLevel(LogLevel.Debug)] public class BlazorWasmTemplateTest : BlazorTemplateTest { - public BlazorWasmTemplateTest(ProjectFactoryFixture projectFactory, PlaywrightFixture browserFixture, ITestOutputHelper output) + public BlazorWasmTemplateTest(ProjectFactoryFixture projectFactory, PlaywrightFixture browserFixture) : base(browserFixture) { ProjectFactory = projectFactory; - Output = output; - BrowserContextInfo = new ContextInformation(CreateFactory(output)); } public ProjectFactoryFixture ProjectFactory { get; set; } - public ITestOutputHelper Output { get; } - - public ContextInformation BrowserContextInfo { get; } - [Theory] [InlineData(BrowserKind.Chromium)] public async Task BlazorWasmStandaloneTemplate_Works(BrowserKind browserKind) @@ -47,7 +44,7 @@ public async Task BlazorWasmStandaloneTemplate_Works(BrowserKind browserKind) // Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278 Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true"); - var project = await ProjectFactory.GetOrCreateProject("blazorstandalone" + browserKind, Output); + var project = await ProjectFactory.GetOrCreateProject("blazorstandalone" + browserKind, TestOutputHelper); var createResult = await project.RunDotNetNewAsync("blazorwasm"); Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult)); @@ -67,7 +64,7 @@ public async Task BlazorWasmStandaloneTemplate_Works(BrowserKind browserKind) var (serveProcess, listeningUri) = RunPublishedStandaloneBlazorProject(project); using (serveProcess) { - Output.WriteLine($"Opening browser at {listeningUri}..."); + TestOutputHelper.WriteLine($"Opening browser at {listeningUri}..."); if (Fixture.BrowserManager.IsAvailable(browserKind)) { await using var browser = await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo); @@ -79,6 +76,8 @@ public async Task BlazorWasmStandaloneTemplate_Works(BrowserKind browserKind) EnsureBrowserAvailable(browserKind); } } + + Assert.True(0 == 1); } private async Task NavigateToPage(IBrowserContext browser, string listeningUri) @@ -95,7 +94,7 @@ public async Task BlazorWasmHostedTemplate_Works(BrowserKind browserKind) // Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278 Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true"); - var project = await ProjectFactory.GetOrCreateProject("blazorhosted" + browserKind, Output); + var project = await ProjectFactory.GetOrCreateProject("blazorhosted" + browserKind, TestOutputHelper); var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] { "--hosted" }); Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult)); @@ -154,7 +153,7 @@ public async Task BlazorWasmStandalonePwaTemplate_Works(BrowserKind browserKind) // Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278 Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true"); - var project = await ProjectFactory.GetOrCreateProject("blazorstandalonepwa", Output); + var project = await ProjectFactory.GetOrCreateProject("blazorstandalonepwa", TestOutputHelper); var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] { "--pwa" }); Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult)); @@ -173,7 +172,7 @@ public async Task BlazorWasmStandalonePwaTemplate_Works(BrowserKind browserKind) { var (serveProcess, listeningUri) = RunPublishedStandaloneBlazorProject(project); await using var browser = await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo); - Output.WriteLine($"Opening browser at {listeningUri}..."); + TestOutputHelper.WriteLine($"Opening browser at {listeningUri}..."); var page = await NavigateToPage(browser, listeningUri); using (serveProcess) { @@ -201,7 +200,7 @@ public async Task BlazorWasmHostedPwaTemplate_Works(BrowserKind browserKind) // Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278 Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true"); - var project = await ProjectFactory.GetOrCreateProject("blazorhostedpwa", Output); + var project = await ProjectFactory.GetOrCreateProject("blazorhostedpwa", TestOutputHelper); var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] { "--hosted", "--pwa" }); Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult)); @@ -297,7 +296,7 @@ private async Task BlazorWasmHostedTemplate_IndividualAuth_Works(BrowserKind bro // Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278 Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true"); - var project = await ProjectFactory.GetOrCreateProject("blazorhostedindividual" + browserKind + (useLocalDb ? "uld" : ""), Output); + var project = await ProjectFactory.GetOrCreateProject("blazorhostedindividual" + browserKind + (useLocalDb ? "uld" : ""), TestOutputHelper); var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] { "--hosted", "-au", "Individual", useLocalDb ? "-uld" : "" }); Assert.True(0 == createResult.ExitCode, ErrorMessages.GetFailedProcessMessage("create/restore", project, createResult)); @@ -370,7 +369,7 @@ public async Task BlazorWasmStandaloneTemplate_IndividualAuth_Works(BrowserKind // Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278 Environment.SetEnvironmentVariable("EnableDefaultScopedCssItems", "true"); - var project = await ProjectFactory.GetOrCreateProject("blazorstandaloneindividual" + browserKind, Output); + var project = await ProjectFactory.GetOrCreateProject("blazorstandaloneindividual" + browserKind, TestOutputHelper); var createResult = await project.RunDotNetNewAsync("blazorwasm", args: new[] { "-au", @@ -402,7 +401,7 @@ public async Task BlazorWasmStandaloneTemplate_IndividualAuth_Works(BrowserKind var (serveProcess, listeningUri) = RunPublishedStandaloneBlazorProject(project); using (serveProcess) { - Output.WriteLine($"Opening browser at {listeningUri}..."); + TestOutputHelper.WriteLine($"Opening browser at {listeningUri}..."); await using var browser = await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo); var page = await NavigateToPage(browser, listeningUri); await TestBasicNavigation(project.ProjectName, page); @@ -483,7 +482,7 @@ public TemplateInstance(string name, params string[] arguments) [MemberData(nameof(TemplateData))] public async Task BlazorWasmHostedTemplate_AzureActiveDirectoryTemplate_Works(TemplateInstance instance) { - var project = await ProjectFactory.GetOrCreateProject(instance.Name, Output); + var project = await ProjectFactory.GetOrCreateProject(instance.Name, TestOutputHelper); project.TargetFramework = "netstandard2.1"; var createResult = await project.RunDotNetNewAsync("blazorwasm", args: instance.Arguments); @@ -652,7 +651,7 @@ private void UpdatePublishedSettings(Project serverProject) { var publishDir = Path.Combine(project.TemplatePublishDir, "wwwroot"); - Output.WriteLine("Running dotnet serve on published output..."); + TestOutputHelper.WriteLine("Running dotnet serve on published output..."); var developmentCertificate = DevelopmentCertificate.Create(project.TemplateOutputDir); var args = $"-S --pfx \"{developmentCertificate.CertificatePath}\" --pfx-pwd \"{developmentCertificate.CertificatePassword}\" --port 0"; var command = DotNetMuxer.MuxerPathOrDefault(); @@ -666,7 +665,7 @@ private void UpdatePublishedSettings(Project serverProject) args = "--roll-forward LatestMajor " + args; // dotnet-serve targets net5.0 by default } - var serveProcess = ProcessEx.Run(Output, publishDir, command, args); + var serveProcess = ProcessEx.Run(TestOutputHelper, publishDir, command, args); var listeningUri = ResolveListeningUrl(serveProcess); return (serveProcess, listeningUri); } diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/PlaywrightFixture.cs b/src/ProjectTemplates/BlazorTemplates.Tests/PlaywrightFixture.cs index f5ad94c908d3..842919f2c968 100644 --- a/src/ProjectTemplates/BlazorTemplates.Tests/PlaywrightFixture.cs +++ b/src/ProjectTemplates/BlazorTemplates.Tests/PlaywrightFixture.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.BrowserTesting; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Testing; using Xunit; using Xunit.Abstractions; @@ -65,6 +66,11 @@ public async Task InitializeAsync() var sink = new TestSink(); sink.MessageLogged += LogBrowserManagerMessage; var factory = new TestLoggerFactory(sink, enabled: true); + var helixUploadDir = Environment.GetEnvironmentVariable("HELIX_WORKITEM_UPLOAD_ROOT"); + if (!string.IsNullOrEmpty(helixUploadDir)) + { + factory.AddFile(Path.Combine(helixUploadDir, "playwright-fixture.log")); + } BrowserManager = await BrowserManager.CreateAsync(_configuration, factory); } diff --git a/src/Shared/BrowserTesting/src/BrowserManager.cs b/src/Shared/BrowserTesting/src/BrowserManager.cs index 20f970736e27..ede459195318 100644 --- a/src/Shared/BrowserTesting/src/BrowserManager.cs +++ b/src/Shared/BrowserTesting/src/BrowserManager.cs @@ -46,7 +46,7 @@ private async Task InitializeAsync() async Task InitializeCore() { - Playwright = await PlaywrightSharp.Playwright.CreateAsync(_loggerFactory/*, debug: "pw:api"*/); + Playwright = await PlaywrightSharp.Playwright.CreateAsync(_loggerFactory, debug: "pw:api"); foreach (var (browserName, options) in _browserManagerConfiguration.BrowserOptions) { if (!_launchBrowsers.ContainsKey(browserName))