[Helix] Reenable some Templates tests 2.0 (#19383)

This commit is contained in:
Hao Kung 2020-03-02 11:43:34 -08:00 committed by GitHub
parent d08ecf003a
commit 5e2a7726c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 62 additions and 26 deletions

View File

@ -9,6 +9,7 @@ set $runtimeVersion=%3
set $helixQueue=%4 set $helixQueue=%4
set $arch=%5 set $arch=%5
set $quarantined=%6 set $quarantined=%6
set $efVersion=%7
set DOTNET_HOME=%HELIX_CORRELATION_PAYLOAD%\sdk set DOTNET_HOME=%HELIX_CORRELATION_PAYLOAD%\sdk
set DOTNET_ROOT=%DOTNET_HOME%\%$arch% set DOTNET_ROOT=%DOTNET_HOME%\%$arch%
@ -24,6 +25,14 @@ powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePo
if EXIST ".\Microsoft.AspNetCore.App" ( if EXIST ".\Microsoft.AspNetCore.App" (
echo "Found Microsoft.AspNetCore.App, copying to %DOTNET_ROOT%\shared\Microsoft.AspNetCore.App\%runtimeVersion%" echo "Found Microsoft.AspNetCore.App, copying to %DOTNET_ROOT%\shared\Microsoft.AspNetCore.App\%runtimeVersion%"
xcopy /i /y ".\Microsoft.AspNetCore.App" %DOTNET_ROOT%\shared\Microsoft.AspNetCore.App\%runtimeVersion%\ xcopy /i /y ".\Microsoft.AspNetCore.App" %DOTNET_ROOT%\shared\Microsoft.AspNetCore.App\%runtimeVersion%\
echo "Adding current directory to nuget sources: %HELIX_WORKITEM_ROOT%"
dotnet nuget add source %HELIX_WORKITEM_ROOT%
dotnet nuget add source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json
dotnet nuget list source
dotnet tool install dotnet-ef --global --version %$efVersion%
set PATH=%PATH%;%DOTNET_CLI_HOME%\.dotnet\tools
) )
echo "Current Directory: %HELIX_WORKITEM_ROOT%" echo "Current Directory: %HELIX_WORKITEM_ROOT%"
@ -31,6 +40,8 @@ set HELIX=%$helixQueue%
set HELIX_DIR=%HELIX_WORKITEM_ROOT% set HELIX_DIR=%HELIX_WORKITEM_ROOT%
set NUGET_FALLBACK_PACKAGES=%HELIX_DIR% set NUGET_FALLBACK_PACKAGES=%HELIX_DIR%
set NUGET_RESTORE=%HELIX_DIR%\nugetRestore set NUGET_RESTORE=%HELIX_DIR%\nugetRestore
set DotNetEfFullPath=%HELIX_DIR%\nugetRestore\dotnet-ef\%$efVersion%\tools\netcoreapp3.1\any\dotnet-ef.exe
echo "Set DotNetEfFullPath: %DotNetEfFullPath%"
echo "Setting HELIX_DIR: %HELIX_DIR%" echo "Setting HELIX_DIR: %HELIX_DIR%"
echo Creating nuget restore directory: %NUGET_RESTORE% echo Creating nuget restore directory: %NUGET_RESTORE%
mkdir %NUGET_RESTORE% mkdir %NUGET_RESTORE%

View File

@ -6,6 +6,7 @@ dotnet_runtime_version="$3"
helix_queue_name="$4" helix_queue_name="$4"
target_arch="$5" target_arch="$5"
quarantined="$6" quarantined="$6"
efVersion="$7"
RESET="\033[0m" RESET="\033[0m"
RED="\033[0;31m" RED="\033[0;31m"
@ -33,6 +34,8 @@ export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
export helix="$helix_queue_name" export helix="$helix_queue_name"
export HELIX_DIR="$DIR" export HELIX_DIR="$DIR"
export NUGET_FALLBACK_PACKAGES="$DIR" export NUGET_FALLBACK_PACKAGES="$DIR"
export DotNetEfFullPath=$DIR\nugetRestore\dotnet-ef\$efVersion\tools\netcoreapp3.1\any\dotnet-ef.dll
echo "Set DotNetEfFullPath: $DotNetEfFullPath"
export NUGET_RESTORE="$DIR/nugetRestore" export NUGET_RESTORE="$DIR/nugetRestore"
echo "Creating nugetRestore directory: $NUGET_RESTORE" echo "Creating nugetRestore directory: $NUGET_RESTORE"
mkdir $NUGET_RESTORE mkdir $NUGET_RESTORE
@ -95,6 +98,17 @@ if [ -d "Microsoft.AspNetCore.App" ]
then then
echo "Found Microsoft.AspNetCore.App directory, copying to $DOTNET_ROOT/shared/Microsoft.AspNetCore.App/$dotnet_runtime_version." echo "Found Microsoft.AspNetCore.App directory, copying to $DOTNET_ROOT/shared/Microsoft.AspNetCore.App/$dotnet_runtime_version."
cp -r Microsoft.AspNetCore.App $DOTNET_ROOT/shared/Microsoft.AspNetCore.App/$dotnet_runtime_version cp -r Microsoft.AspNetCore.App $DOTNET_ROOT/shared/Microsoft.AspNetCore.App/$dotnet_runtime_version
echo "Adding current directory to nuget sources: $DIR"
dotnet nuget add source $DIR
dotnet nuget add source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json
dotnet nuget list source
dotnet tool install dotnet-ef --global --version $efVersion
# Ensure tools are on on PATH
export PATH="$PATH:$DOTNET_CLI_HOME/.dotnet/tools"
fi fi
if [ -e /proc/self/coredump_filter ]; then if [ -e /proc/self/coredump_filter ]; then

View File

@ -120,8 +120,8 @@ Usage: dotnet msbuild /t:Helix src/MyTestProject.csproj
<TestAssembly>$(TargetFileName)</TestAssembly> <TestAssembly>$(TargetFileName)</TestAssembly>
<PreCommands>@(HelixPreCommand)</PreCommands> <PreCommands>@(HelixPreCommand)</PreCommands>
<PostCommands>@(HelixPostCommand)</PostCommands> <PostCommands>@(HelixPostCommand)</PostCommands>
<Command Condition="$(IsWindowsHelixQueue)">call runtests.cmd $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests)</Command> <Command Condition="$(IsWindowsHelixQueue)">call runtests.cmd $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion)</Command>
<Command Condition="!$(IsWindowsHelixQueue)">./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests)</Command> <Command Condition="!$(IsWindowsHelixQueue)">./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion)</Command>
<Command Condition="$(HelixCommand) != ''">$(HelixCommand)</Command> <Command Condition="$(HelixCommand) != ''">$(HelixCommand)</Command>
<Timeout>$(HelixTimeout)</Timeout> <Timeout>$(HelixTimeout)</Timeout>
</HelixWorkItem> </HelixWorkItem>

View File

@ -7,6 +7,7 @@ using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.CommandLineUtils; using Microsoft.Extensions.CommandLineUtils;
@ -28,12 +29,11 @@ namespace Templates.Test.Helpers
? GetAssemblyMetadata("ArtifactsLogDir") ? GetAssemblyMetadata("ArtifactsLogDir")
: Path.Combine(Environment.GetEnvironmentVariable("HELIX_DIR"), "logs"); : Path.Combine(Environment.GetEnvironmentVariable("HELIX_DIR"), "logs");
// FIGURE OUT EF PATH public static string DotNetEfFullPath => (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DotNetEfFullPath")))
public static string DotNetEfFullPath => (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("helix")))
? typeof(ProjectFactoryFixture).Assembly.GetCustomAttributes<AssemblyMetadataAttribute>() ? typeof(ProjectFactoryFixture).Assembly.GetCustomAttributes<AssemblyMetadataAttribute>()
.First(attribute => attribute.Key == "DotNetEfFullPath") .First(attribute => attribute.Key == "DotNetEfFullPath")
.Value .Value
: Path.Combine("NuGetPackageRoot", "dotnet-ef/$(DotnetEfPackageVersion)/tools/netcoreapp3.1/any/dotnet-ef.dll"); : Environment.GetEnvironmentVariable("DotNetEfFullPath");
public SemaphoreSlim DotNetNewLock { get; set; } public SemaphoreSlim DotNetNewLock { get; set; }
public SemaphoreSlim NodeLock { get; set; } public SemaphoreSlim NodeLock { get; set; }
@ -306,14 +306,24 @@ namespace Templates.Test.Helpers
internal async Task<ProcessEx> RunDotNetEfCreateMigrationAsync(string migrationName) internal async Task<ProcessEx> RunDotNetEfCreateMigrationAsync(string migrationName)
{ {
var args = $"\"{DotNetEfFullPath}\" --verbose --no-build migrations add {migrationName}"; var args = $"--verbose --no-build migrations add {migrationName}";
// Only run one instance of 'dotnet new' at once, as a workaround for // Only run one instance of 'dotnet new' at once, as a workaround for
// https://github.com/aspnet/templating/issues/63 // https://github.com/aspnet/templating/issues/63
await DotNetNewLock.WaitAsync(); await DotNetNewLock.WaitAsync();
try try
{ {
var result = ProcessEx.Run(Output, TemplateOutputDir, DotNetMuxer.MuxerPathOrDefault(), args); var command = DotNetMuxer.MuxerPathOrDefault();
if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DotNetEfFullPath")))
{
args = $"\"{DotNetEfFullPath}\" " + args;
}
else
{
command = "dotnet-ef";
}
var result = ProcessEx.Run(Output, TemplateOutputDir, command, args);
await result.Exited; await result.Exited;
return result; return result;
} }
@ -325,14 +335,24 @@ namespace Templates.Test.Helpers
internal async Task<ProcessEx> RunDotNetEfUpdateDatabaseAsync() internal async Task<ProcessEx> RunDotNetEfUpdateDatabaseAsync()
{ {
var args = $"\"{DotNetEfFullPath}\" --verbose --no-build database update"; var args = "--verbose --no-build database update";
// Only run one instance of 'dotnet new' at once, as a workaround for // Only run one instance of 'dotnet new' at once, as a workaround for
// https://github.com/aspnet/templating/issues/63 // https://github.com/aspnet/templating/issues/63
await DotNetNewLock.WaitAsync(); await DotNetNewLock.WaitAsync();
try try
{ {
var result = ProcessEx.Run(Output, TemplateOutputDir, DotNetMuxer.MuxerPathOrDefault(), args); var command = DotNetMuxer.MuxerPathOrDefault();
if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DotNetEfFullPath")))
{
args = $"\"{DotNetEfFullPath}\" " + args;
}
else
{
command = "dotnet-ef";
}
var result = ProcessEx.Run(Output, TemplateOutputDir, command, args);
await result.Exited; await result.Exited;
return result; return result;
} }

View File

@ -5,7 +5,6 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Testing;
using Templates.Test.Helpers; using Templates.Test.Helpers;
using Xunit; using Xunit;
using Xunit.Abstractions; using Xunit.Abstractions;
@ -118,9 +117,8 @@ namespace Templates.Test
"Identity/lib/jquery-validation-unobtrusive/LICENSE.txt", "Identity/lib/jquery-validation-unobtrusive/LICENSE.txt",
}; };
[ConditionalTheory] [Theory]
[MemberData(nameof(MSBuildIdentityUIPackageOptions))] [MemberData(nameof(MSBuildIdentityUIPackageOptions))]
[SkipOnHelix("ef restore no worky")]
public async Task IdentityUIPackage_WorksWithDifferentOptions(IDictionary<string, string> packageOptions, string versionValidator, string[] expectedFiles) public async Task IdentityUIPackage_WorksWithDifferentOptions(IDictionary<string, string> packageOptions, string versionValidator, string[] expectedFiles)
{ {
Project = await ProjectFactory.GetOrCreateProject("identityuipackage" + string.Concat(packageOptions.Values), Output); Project = await ProjectFactory.GetOrCreateProject("identityuipackage" + string.Concat(packageOptions.Values), Output);

View File

@ -104,10 +104,9 @@ namespace Templates.Test
} }
} }
[ConditionalTheory] [Theory]
[InlineData(true)] [InlineData(true)]
[InlineData(false)] [InlineData(false)]
[SkipOnHelix("ef restore no worky")]
public async Task MvcTemplate_IndividualAuth(bool useLocalDB) public async Task MvcTemplate_IndividualAuth(bool useLocalDB)
{ {
Project = await ProjectFactory.GetOrCreateProject("mvcindividual" + (useLocalDB ? "uld" : ""), Output); Project = await ProjectFactory.GetOrCreateProject("mvcindividual" + (useLocalDB ? "uld" : ""), Output);
@ -222,8 +221,7 @@ namespace Templates.Test
} }
} }
[ConditionalFact] [Fact]
[SkipOnHelix("razor compilation restore no worky")]
public async Task MvcTemplate_RazorRuntimeCompilation_BuildsAndPublishes() public async Task MvcTemplate_RazorRuntimeCompilation_BuildsAndPublishes()
{ {
Project = await ProjectFactory.GetOrCreateProject("mvc_rc", Output); Project = await ProjectFactory.GetOrCreateProject("mvc_rc", Output);

View File

@ -5,7 +5,6 @@ using System.Threading.Tasks;
using Templates.Test.Helpers; using Templates.Test.Helpers;
using Xunit; using Xunit;
using Xunit.Abstractions; using Xunit.Abstractions;
using Microsoft.AspNetCore.Testing;
namespace Templates.Test namespace Templates.Test
{ {
@ -41,8 +40,7 @@ namespace Templates.Test
Assert.True(0 == buildResult.ExitCode, ErrorMessages.GetFailedProcessMessage("build", Project, buildResult)); Assert.True(0 == buildResult.ExitCode, ErrorMessages.GetFailedProcessMessage("build", Project, buildResult));
} }
[ConditionalFact] [Fact]
[SkipOnHelix("restore no worky")]
public async Task RazorClassLibraryTemplateAsync() public async Task RazorClassLibraryTemplateAsync()
{ {
Project = await ProjectFactory.GetOrCreateProject("razorclasslib", Output); Project = await ProjectFactory.GetOrCreateProject("razorclasslib", Output);

View File

@ -94,10 +94,9 @@ namespace Templates.Test
} }
} }
[ConditionalTheory] [Theory]
[InlineData(false)] [InlineData(false)]
[InlineData(true)] [InlineData(true)]
[SkipOnHelix("ef restore no worky")]
public async Task RazorPagesTemplate_IndividualAuth(bool useLocalDB) public async Task RazorPagesTemplate_IndividualAuth(bool useLocalDB)
{ {
Project = await ProjectFactory.GetOrCreateProject("razorpagesindividual" + (useLocalDB ? "uld" : ""), Output); Project = await ProjectFactory.GetOrCreateProject("razorpagesindividual" + (useLocalDB ? "uld" : ""), Output);
@ -212,8 +211,7 @@ namespace Templates.Test
} }
} }
[ConditionalFact] [Fact]
[SkipOnHelix("runtime compliation restore no worky")]
public async Task RazorPagesTemplate_RazorRuntimeCompilation_BuildsAndPublishes() public async Task RazorPagesTemplate_RazorRuntimeCompilation_BuildsAndPublishes()
{ {
Project = await ProjectFactory.GetOrCreateProject("razorpages_rc", Output); Project = await ProjectFactory.GetOrCreateProject("razorpages_rc", Output);

View File

@ -21,8 +21,7 @@ namespace Templates.Test
public ProjectFactoryFixture ProjectFactory { get; } public ProjectFactoryFixture ProjectFactory { get; }
public ITestOutputHelper Output { get; } public ITestOutputHelper Output { get; }
[ConditionalFact] [Fact]
[SkipOnHelix("restore no worky")]
public async Task WorkerTemplateAsync() public async Task WorkerTemplateAsync()
{ {
Project = await ProjectFactory.GetOrCreateProject("worker", Output); Project = await ProjectFactory.GetOrCreateProject("worker", Output);