diff --git a/build/dependencies.props b/build/dependencies.props index 7a1ec97818..3bba6726e8 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -19,7 +19,7 @@ 2.2.0-preview1-34255 2.2.0-preview1-34255 2.2.0-preview1-34255 - 0.6.0-preview1-34255 + 0.6.0-a-preview1-tratcher-x86-17041 2.2.0-preview1-34255 2.2.0-preview1-34255 2.2.0-preview1-34255 diff --git a/build/repo.props b/build/repo.props index 1add62910e..5e78326f66 100644 --- a/build/repo.props +++ b/build/repo.props @@ -11,5 +11,8 @@ + + + diff --git a/samples/MusicStore/Program.cs b/samples/MusicStore/Program.cs index 195f5ec95e..03df598626 100644 --- a/samples/MusicStore/Program.cs +++ b/samples/MusicStore/Program.cs @@ -17,7 +17,6 @@ namespace MusicStore .Build(); var builder = new WebHostBuilder() - .UseContentRoot(Directory.GetCurrentDirectory()) .UseConfiguration(config) .UseIISIntegration() .UseStartup("MusicStore") diff --git a/samples/MusicStore/Startup.cs b/samples/MusicStore/Startup.cs index 2ca1de0f34..df643e027b 100644 --- a/samples/MusicStore/Startup.cs +++ b/samples/MusicStore/Startup.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Runtime.InteropServices; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Identity; @@ -182,6 +183,12 @@ namespace MusicStore SupportedUICultures = supportedCultures }); + app.Use((context, next) => + { + context.Response.Headers["Arch"] = RuntimeInformation.ProcessArchitecture.ToString(); + return next(); + }); + // Configure Session. app.UseSession(); diff --git a/samples/MusicStore/StartupNtlmAuthentication.cs b/samples/MusicStore/StartupNtlmAuthentication.cs index 136ea1a864..c6c57e540e 100644 --- a/samples/MusicStore/StartupNtlmAuthentication.cs +++ b/samples/MusicStore/StartupNtlmAuthentication.cs @@ -1,5 +1,6 @@ using System; using System.Globalization; +using System.Runtime.InteropServices; using System.Security.Claims; using System.Security.Principal; using Microsoft.AspNetCore.Builder; @@ -115,6 +116,12 @@ namespace MusicStore app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); + app.Use((context, next) => + { + context.Response.Headers["Arch"] = RuntimeInformation.ProcessArchitecture.ToString(); + return next(); + }); + app.Use(async (context, next) => { // Who will get admin access? For demo sake I'm listing the currently logged on user as the application diff --git a/test/MusicStore.E2ETests/DotnetRunTests.cs b/test/MusicStore.E2ETests/DotnetRunTests.cs index c9e6177d5f..c0f1648572 100644 --- a/test/MusicStore.E2ETests/DotnetRunTests.cs +++ b/test/MusicStore.E2ETests/DotnetRunTests.cs @@ -17,7 +17,6 @@ namespace E2ETests { public static TestMatrix TestVariants => TestMatrix.ForServers(ServerType.Kestrel) - .WithAllApplicationTypes() .WithTfms(Tfm.NetCoreApp22, Tfm.NetCoreApp21, Tfm.NetCoreApp20, Tfm.Net461); [ConditionalTheory] diff --git a/test/MusicStore.E2ETests/Implementation/Validator.cs b/test/MusicStore.E2ETests/Implementation/Validator.cs index dfe425b2a6..de2848fc85 100644 --- a/test/MusicStore.E2ETests/Implementation/Validator.cs +++ b/test/MusicStore.E2ETests/Implementation/Validator.cs @@ -119,6 +119,12 @@ namespace E2ETests Assert.Contains("MusicStore.Views, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", responseContent); } + public void VerifyArchitecture(HttpResponseMessage response, RuntimeArchitecture arch) + { + Assert.True(response.Headers.TryGetValues("Arch", out var values), "Missing Arch header"); + Assert.Equal(arch.ToString(), values.First(), ignoreCase: true); + } + public async Task VerifyNtlmHomePage(HttpResponseMessage response) { await VerifyHomePage(response, useNtlmAuthentication: true); diff --git a/test/MusicStore.E2ETests/NtlmAuthentationTest.cs b/test/MusicStore.E2ETests/NtlmAuthentationTest.cs index f54ac664a5..e390b6896a 100644 --- a/test/MusicStore.E2ETests/NtlmAuthentationTest.cs +++ b/test/MusicStore.E2ETests/NtlmAuthentationTest.cs @@ -18,7 +18,8 @@ namespace E2ETests public static TestMatrix TestVariants => TestMatrix.ForServers(ServerType.IISExpress, ServerType.HttpSys) .WithTfms(Tfm.NetCoreApp22, Tfm.NetCoreApp21, Tfm.NetCoreApp20, Tfm.Net461) - .WithAllApplicationTypes(); + .WithAllApplicationTypes() + .WithAllArchitectures(); [ConditionalTheory] [MemberData(nameof(TestVariants))] @@ -70,6 +71,9 @@ namespace E2ETests logger.LogInformation("Verifying home page"); await validator.VerifyNtlmHomePage(response); + logger.LogInformation("Verifying architecture"); + validator.VerifyArchitecture(response, deploymentResult.DeploymentParameters.RuntimeArchitecture); + logger.LogInformation("Verifying access to store with permissions"); await validator.AccessStoreWithPermissions(); diff --git a/test/MusicStore.E2ETests/PublishAndRunTests.cs b/test/MusicStore.E2ETests/PublishAndRunTests.cs index d55e8e9254..36aba6ecf1 100644 --- a/test/MusicStore.E2ETests/PublishAndRunTests.cs +++ b/test/MusicStore.E2ETests/PublishAndRunTests.cs @@ -8,7 +8,6 @@ using Microsoft.AspNetCore.Testing.xunit; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Testing; using Xunit; -using Xunit.Abstractions; namespace E2ETests { @@ -19,9 +18,7 @@ namespace E2ETests => TestMatrix.ForServers(ServerType.IISExpress, ServerType.Kestrel, ServerType.HttpSys) .WithTfms(Tfm.NetCoreApp22, Tfm.NetCoreApp21, Tfm.NetCoreApp20, Tfm.Net461) .WithAllApplicationTypes() - .WithAllArchitectures() - .Skip("https://github.com/aspnet/Hosting/issues/601", - v => v.Tfm != Tfm.Net461 && v.Architecture == RuntimeArchitecture.x86); + .WithAllArchitectures(); [ConditionalTheory] [MemberData(nameof(TestVariants))] @@ -71,6 +68,9 @@ namespace E2ETests logger.LogInformation("Verifying home page"); await validator.VerifyHomePage(response); + logger.LogInformation("Verifying architecture"); + validator.VerifyArchitecture(response, deploymentResult.DeploymentParameters.RuntimeArchitecture); + logger.LogInformation("Verifying static files are served from static file middleware"); await validator.VerifyStaticContentServed();