Skip to content

Commit d0a8ef0

Browse files
authored
Add a functional test to verify that build-time compiled views play w… (#839)
* Add a functional test to verify that build-time compiled views play with DeveloperExceptionPage Use RazorSdk to compile in E2E scenarios Fixes #835 Fixes #836
1 parent 68bb45b commit d0a8ef0

File tree

7 files changed

+125
-43
lines changed

7 files changed

+125
-43
lines changed

build/dependencies.props

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,37 @@
33
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
44
</PropertyGroup>
55
<PropertyGroup Label="Package Versions">
6-
<MicrosoftAspNetCoreAllPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreAllPackageVersion>
7-
<MicrosoftAspNetCoreAspNetCoreModulePackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreAspNetCoreModulePackageVersion>
8-
<MicrosoftAspNetCoreAuthenticationCookiesPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreAuthenticationCookiesPackageVersion>
9-
<MicrosoftAspNetCoreAuthenticationCorePackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreAuthenticationCorePackageVersion>
10-
<MicrosoftAspNetCoreAuthenticationFacebookPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreAuthenticationFacebookPackageVersion>
11-
<MicrosoftAspNetCoreAuthenticationGooglePackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreAuthenticationGooglePackageVersion>
12-
<MicrosoftAspNetCoreAuthenticationMicrosoftAccountPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreAuthenticationMicrosoftAccountPackageVersion>
13-
<MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion>
14-
<MicrosoftAspNetCoreAuthenticationTwitterPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreAuthenticationTwitterPackageVersion>
15-
<MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion>
16-
<MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion>
17-
<MicrosoftAspNetCoreIdentityPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreIdentityPackageVersion>
18-
<MicrosoftAspNetCoreMvcPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreMvcPackageVersion>
19-
<MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion>
20-
<MicrosoftAspNetCorePackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCorePackageVersion>
21-
<MicrosoftAspNetCoreServerHttpSysPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreServerHttpSysPackageVersion>
22-
<MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>0.5.0-preview2-30077</MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>
23-
<MicrosoftAspNetCoreSessionPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreSessionPackageVersion>
24-
<MicrosoftAspNetCoreStaticFilesPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreStaticFilesPackageVersion>
25-
<MicrosoftAspNetCoreWebUtilitiesPackageVersion>2.1.0-preview2-30077</MicrosoftAspNetCoreWebUtilitiesPackageVersion>
26-
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>2.1.0-preview2-30077</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
27-
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>2.1.0-preview2-30077</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
28-
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>2.1.0-preview2-30077</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
29-
<MicrosoftExtensionsConfigurationBinderPackageVersion>2.1.0-preview2-30077</MicrosoftExtensionsConfigurationBinderPackageVersion>
30-
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>2.1.0-preview2-30077</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
31-
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>2.1.0-preview2-30077</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
32-
<MicrosoftExtensionsConfigurationJsonPackageVersion>2.1.0-preview2-30077</MicrosoftExtensionsConfigurationJsonPackageVersion>
33-
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>2.1.0-preview2-30077</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
34-
<MicrosoftExtensionsLoggingConsolePackageVersion>2.1.0-preview2-30077</MicrosoftExtensionsLoggingConsolePackageVersion>
35-
<MicrosoftExtensionsLoggingPackageVersion>2.1.0-preview2-30077</MicrosoftExtensionsLoggingPackageVersion>
36-
<MicrosoftExtensionsLoggingTestingPackageVersion>2.1.0-preview2-30077</MicrosoftExtensionsLoggingTestingPackageVersion>
6+
<MicrosoftAspNetCoreAllPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreAllPackageVersion>
7+
<MicrosoftAspNetCoreAspNetCoreModulePackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreAspNetCoreModulePackageVersion>
8+
<MicrosoftAspNetCoreAuthenticationCookiesPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreAuthenticationCookiesPackageVersion>
9+
<MicrosoftAspNetCoreAuthenticationCorePackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreAuthenticationCorePackageVersion>
10+
<MicrosoftAspNetCoreAuthenticationFacebookPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreAuthenticationFacebookPackageVersion>
11+
<MicrosoftAspNetCoreAuthenticationGooglePackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreAuthenticationGooglePackageVersion>
12+
<MicrosoftAspNetCoreAuthenticationMicrosoftAccountPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreAuthenticationMicrosoftAccountPackageVersion>
13+
<MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion>
14+
<MicrosoftAspNetCoreAuthenticationTwitterPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreAuthenticationTwitterPackageVersion>
15+
<MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion>
16+
<MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion>
17+
<MicrosoftAspNetCoreIdentityPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreIdentityPackageVersion>
18+
<MicrosoftAspNetCoreMvcPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreMvcPackageVersion>
19+
<MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion>
20+
<MicrosoftAspNetCorePackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCorePackageVersion>
21+
<MicrosoftAspNetCoreServerHttpSysPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreServerHttpSysPackageVersion>
22+
<MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>0.5.0-preview2-30106</MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>
23+
<MicrosoftAspNetCoreSessionPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreSessionPackageVersion>
24+
<MicrosoftAspNetCoreStaticFilesPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreStaticFilesPackageVersion>
25+
<MicrosoftAspNetCoreWebUtilitiesPackageVersion>2.1.0-preview2-30106</MicrosoftAspNetCoreWebUtilitiesPackageVersion>
26+
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>2.1.0-preview2-30106</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
27+
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>2.1.0-preview2-30106</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
28+
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>2.1.0-preview2-30106</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
29+
<MicrosoftExtensionsConfigurationBinderPackageVersion>2.1.0-preview2-30106</MicrosoftExtensionsConfigurationBinderPackageVersion>
30+
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>2.1.0-preview2-30106</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
31+
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>2.1.0-preview2-30106</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
32+
<MicrosoftExtensionsConfigurationJsonPackageVersion>2.1.0-preview2-30106</MicrosoftExtensionsConfigurationJsonPackageVersion>
33+
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>2.1.0-preview2-30106</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
34+
<MicrosoftExtensionsLoggingConsolePackageVersion>2.1.0-preview2-30106</MicrosoftExtensionsLoggingConsolePackageVersion>
35+
<MicrosoftExtensionsLoggingPackageVersion>2.1.0-preview2-30106</MicrosoftExtensionsLoggingPackageVersion>
36+
<MicrosoftExtensionsLoggingTestingPackageVersion>2.1.0-preview2-30106</MicrosoftExtensionsLoggingTestingPackageVersion>
3737
<MicrosoftNETCoreApp20PackageVersion>2.0.0</MicrosoftNETCoreApp20PackageVersion>
3838
<MicrosoftNETCoreApp21PackageVersion>2.1.0-preview2-26130-04</MicrosoftNETCoreApp21PackageVersion>
3939
<MicrosoftNETTestSdkPackageVersion>15.3.0</MicrosoftNETTestSdkPackageVersion>

korebuild-lock.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
version:2.1.0-preview2-15698
2-
commithash:7216e5068cb1957e09d45fcbe58a744dd5c2de73
1+
version:2.1.0-preview2-15704
2+
commithash:21fdd9f5254226f407a2b4b3ef963693c2fd7998

samples/MusicStore/MusicStore.csproj

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
<Description>Music store application on ASP.NET Core</Description>
55
<TargetFrameworks>netcoreapp2.1;netcoreapp2.0;net461</TargetFrameworks>
66
<DefineConstants>$(DefineConstants);DEMO</DefineConstants>
7-
<MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
7+
<RazorCompileOnBuild>true</RazorCompileOnBuild>
88
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
99
<RuntimeIdentifiers Condition="'$(Configuration)' != 'RuntimeStore'">win7-x86;win7-x64;linux-x64;osx-x64</RuntimeIdentifiers>
1010
<Configurations>Debug;Release;RuntimeStore</Configurations>
11+
<DebugType Condition="'$(TargetFramework)' == 'net461'">full</DebugType>
1112
</PropertyGroup>
1213

1314
<ItemGroup>
@@ -41,4 +42,14 @@
4142
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(MicrosoftEntityFrameworkCoreSqlServerPackageVersion)" />
4243
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="$(MicrosoftExtensionsConfigurationCommandLinePackageVersion)" />
4344
</ItemGroup>
45+
46+
<Target Name="VerifyPrecompiledViews" AfterTargets="Publish">
47+
<Error Text="Did not use Razor Sdk to compile views. Actual $(ResolvedRazorCompileToolset)" Condition="'$(ResolvedRazorCompileToolset)' != 'RazorSdk'" />
48+
49+
<PropertyGroup>
50+
<ExpectedViewOutput>$(PublishDir)$(RazorTargetName).dll</ExpectedViewOutput>
51+
</PropertyGroup>
52+
53+
<Error Text="Did not precompiled view binary '$(ExpectedViewOutput)'" Condition="!Exists('$(ExpectedViewOutput)')" />
54+
</Target>
4455
</Project>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
@page
2+
@{ throw new InvalidOperationException(); }

test/MusicStore.E2ETests/Implementation/Validator.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,13 @@ public async Task VerifyNtlmHomePage(HttpResponseMessage response)
127127
StringComparison.OrdinalIgnoreCase);
128128
}
129129

130+
public async Task VerifyDeveloperExceptionPage(HttpResponseMessage response)
131+
{
132+
var responseContent = await response.Content.ReadAsStringAsync();
133+
Assert.Contains(responseContent, "PageThatThrows.cshtml");
134+
Assert.Contains(responseContent, "@{ throw new InvalidOperationException(); }");
135+
}
136+
130137
public void ValidateLayoutPage(string responseContent)
131138
{
132139
Assert.Contains("ASP.NET MVC Music Store", responseContent, StringComparison.OrdinalIgnoreCase);
@@ -539,4 +546,4 @@ private IEnumerable<string> GetCookieNames(string uri = null)
539546
.Select(c => c.Name);
540547
}
541548
}
542-
}
549+
}

test/MusicStore.E2ETests/PublishAndRunTestRunner.cs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,58 @@ public async Task RunTests(
8585
}
8686
}
8787
}
88+
89+
public async Task RunDeveloperTests(
90+
ServerType serverType,
91+
RuntimeFlavor runtimeFlavor,
92+
ApplicationType applicationType,
93+
RuntimeArchitecture runtimeArchitecture)
94+
{
95+
var testName = $"PublishAndRunTests_{serverType}_{runtimeFlavor}_{applicationType}";
96+
using (StartLog(out var loggerFactory, testName))
97+
{
98+
var logger = loggerFactory.CreateLogger("Publish_And_Run_Development");
99+
var musicStoreDbName = DbUtils.GetUniqueName();
100+
101+
var deploymentParameters = new DeploymentParameters(
102+
Helpers.GetApplicationPath(applicationType), serverType, runtimeFlavor, runtimeArchitecture)
103+
{
104+
PublishApplicationBeforeDeployment = true,
105+
PreservePublishedApplicationForDebugging = Helpers.PreservePublishedApplicationForDebugging,
106+
TargetFramework = Helpers.GetTargetFramework(runtimeFlavor),
107+
Configuration = Helpers.GetCurrentBuildConfiguration(),
108+
EnvironmentName = "Development",
109+
ApplicationType = applicationType,
110+
UserAdditionalCleanup = parameters =>
111+
{
112+
DbUtils.DropDatabase(musicStoreDbName, logger);
113+
}
114+
};
115+
116+
// Override the connection strings using environment based configuration
117+
deploymentParameters.EnvironmentVariables
118+
.Add(new KeyValuePair<string, string>(
119+
MusicStoreConfig.ConnectionStringKey,
120+
DbUtils.CreateConnectionString(musicStoreDbName)));
121+
122+
using (var deployer = ApplicationDeployerFactory.Create(deploymentParameters, loggerFactory))
123+
{
124+
var deploymentResult = await deployer.DeployAsync();
125+
var httpClientHandler = new HttpClientHandler { UseDefaultCredentials = true };
126+
var httpClient = deploymentResult.CreateHttpClient(httpClientHandler);
127+
128+
// Request to base address and check if various parts of the body are rendered &
129+
// measure the cold startup time.
130+
// Add retry logic since tests are flaky on mono due to connection issues
131+
var validator = new Validator(httpClient, httpClientHandler, logger, deploymentResult);
132+
var response = await RetryHelper.RetryRequest(() => httpClient.GetAsync("PageThatThrows"), logger, cancellationToken: deploymentResult.HostShutdownToken);
133+
134+
logger.LogInformation("Verifying developer exception page");
135+
await validator.VerifyDeveloperExceptionPage(response);
136+
137+
logger.LogInformation("Variation completed successfully.");
138+
}
139+
}
140+
}
88141
}
89142
}

test/MusicStore.E2ETests/PublishAndRunTests_X64.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,21 @@ public PublishAndRunTests_X64(ITestOutputHelper output)
1717
}
1818

1919
[ConditionalFact]
20-
[OSSkipCondition(OperatingSystems.Linux)]
21-
[OSSkipCondition(OperatingSystems.MacOSX)]
20+
[OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)]
2221
public Task PublishAndRunTests_X64_WebListener_CoreCLR_Portable()
2322
{
2423
return RunTests(ServerType.WebListener, RuntimeFlavor.CoreClr, ApplicationType.Portable);
2524
}
2625

2726
[ConditionalFact]
28-
[OSSkipCondition(OperatingSystems.Linux)]
29-
[OSSkipCondition(OperatingSystems.MacOSX)]
27+
[OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)]
3028
public Task PublishAndRunTests_X64_WebListener_CoreCLR_Standalone()
3129
{
3230
return RunTests(ServerType.WebListener, RuntimeFlavor.CoreClr, ApplicationType.Standalone);
3331
}
3432

3533
[ConditionalFact]
36-
[OSSkipCondition(OperatingSystems.Linux)]
37-
[OSSkipCondition(OperatingSystems.MacOSX)]
34+
[OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)]
3835
public Task PublishAndRunTests_X64_WebListener_Clr()
3936
{
4037
// CLR must be published as standalone to perform rid specific deployment
@@ -47,15 +44,27 @@ public Task PublishAndRunTests_X64_Kestrel_CoreClr_Portable()
4744
return RunTests(ServerType.Kestrel, RuntimeFlavor.CoreClr, ApplicationType.Portable);
4845
}
4946

47+
[Fact]
48+
public Task PublishAndRunDevelopmentTests_X64_Kestrel_CoreClr_Portable()
49+
{
50+
return _testRunner.RunTests(ServerType.Kestrel, RuntimeFlavor.CoreClr, ApplicationType.Portable, RuntimeArchitecture.x64);
51+
}
52+
53+
[ConditionalFact]
54+
[OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)]
55+
public Task PublishAndRunDevelopmentTests_X64_Kestrel_Clr_Portable()
56+
{
57+
return _testRunner.RunTests(ServerType.Kestrel, RuntimeFlavor.Clr, ApplicationType.Portable, RuntimeArchitecture.x64);
58+
}
59+
5060
[Fact]
5161
public Task PublishAndRunTests_X64_Kestrel_CoreClr_Standalone()
5262
{
5363
return RunTests(ServerType.Kestrel, RuntimeFlavor.CoreClr, ApplicationType.Standalone);
5464
}
5565

5666
[ConditionalFact]
57-
[OSSkipCondition(OperatingSystems.Linux)]
58-
[OSSkipCondition(OperatingSystems.MacOSX)]
67+
[OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)]
5968
public Task PublishAndRunTests_X64_Kestrel_Clr()
6069
{
6170
// CLR must be published as standalone to perform rid specific deployment

0 commit comments

Comments
 (0)