Add test that uses site extension and bundled aspnetcore version (#91)

This commit is contained in:
Pavel Krymets 2017-08-24 14:27:41 -07:00 committed by GitHub
parent 224c9898c0
commit 80194511f5
5 changed files with 96 additions and 14 deletions

View File

@ -2,7 +2,7 @@
<PropertyGroup>
<SiteExtensionProjectDirectory>$(RepositoryRoot)src\Microsoft.AspNetCore.AzureAppServices.TestBundle\</SiteExtensionProjectDirectory>
<PublishFeed Condition="$(PublishFeed) == ''">https://dotnet.myget.org/F/aspnetcore-ci-dev/</PublishFeed>
<SiteExtensionFeed Condition="$(SiteExtensionFeed) == ''">https://dotnet.myget.org/F/aspnetcore-ci-dev/</SiteExtensionFeed>
<DotnetChannel>master</DotnetChannel>
<DotnetVersion>coherent</DotnetVersion>
</PropertyGroup>
@ -30,9 +30,9 @@
<PushNuGetPackages
Packages="@(RepositoryNupkgs)"
Feed="$(PublishFeed)"
Feed="$(SiteExtensionFeed)"
ApiKey="$(APIKey)"
Timeout="6000"/>
TimeoutSeconds="600"/>
</Target>

View File

@ -68,7 +68,7 @@ namespace Microsoft.AspNetCore.AzureAppServices.FunctionalTests
.Create();
}
private static string GetRequiredEnvironmentVariable(string name)
public static string GetRequiredEnvironmentVariable(string name)
{
var authFile = Environment.GetEnvironmentVariable(name);
if (string.IsNullOrEmpty(authFile))

View File

@ -1,10 +1,15 @@
// 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;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using System.Xml.Linq;
using Microsoft.Azure.Management.AppService.Fluent;
using Microsoft.Azure.Management.AppService.Fluent.Models;
using Xunit;
@ -35,20 +40,15 @@ namespace Microsoft.AspNetCore.AzureAppServices.FunctionalTests
using (var logger = GetLogger(testId))
{
Assert.NotNull(_fixture.Azure);
var site = await _fixture.Deploy("Templates\\BasicAppServices.json", baseName: testId);
var testDirectory = GetTestDirectory(testId);
var dotnet = DotNet(logger, testDirectory);
var result = await dotnet.ExecuteAsync("new " + template);
result.AssertSuccess();
await dotnet.ExecuteAndAssertAsync("new " + template);
await site.BuildPublishProfileAsync(testDirectory.FullName);
result = await dotnet.ExecuteAsync("publish /p:PublishProfile=Profile");
result.AssertSuccess();
await dotnet.ExecuteAndAssertAsync("publish /p:PublishProfile=Profile");
using (var httpClient = site.CreateClient())
{
@ -59,6 +59,81 @@ namespace Microsoft.AspNetCore.AzureAppServices.FunctionalTests
}
}
[Theory]
[InlineData("web", "Hello World!")]
[InlineData("razor", "Learn how to build ASP.NET apps that can run anywhere.")]
[InlineData("mvc", "Learn how to build ASP.NET apps that can run anywhere.")]
public async Task DotnetNewWebRunsWebAppOnLatestRuntime(string template, string expected)
{
var testId = nameof(DotnetNewWebRunsWebAppOnLatestRuntime) + template;
using (var logger = GetLogger(testId))
{
var site = await _fixture.Deploy("Templates\\AppServicesWithSiteExtensions.json",
baseName: testId,
additionalArguments: new Dictionary<string, string>
{
{ "extensionFeed", AzureFixture.GetRequiredEnvironmentVariable("SiteExtensionFeed") },
{ "extensionName", "AspNetCoreTestBundle" },
{ "extensionVersion", GetAssemblyInformationalVersion() },
});
var testDirectory = GetTestDirectory(testId);
var dotnet = DotNet(logger, testDirectory);
await dotnet.ExecuteAndAssertAsync("new " + template);
FixAspNetCoreVersion(testDirectory);
await dotnet.ExecuteAndAssertAsync("restore");
await site.BuildPublishProfileAsync(testDirectory.FullName);
await dotnet.ExecuteAndAssertAsync("publish /p:PublishProfile=Profile");
using (var httpClient = site.CreateClient())
{
var getResult = await httpClient.GetAsync("/");
getResult.EnsureSuccessStatusCode();
Assert.Contains(expected, await getResult.Content.ReadAsStringAsync());
}
}
}
private static void FixAspNetCoreVersion(DirectoryInfo testDirectory)
{
// TODO: Temporary workaround for broken templates in latest CLI
var csproj = testDirectory.GetFiles("*.csproj").Single().FullName;
var projectContents = XDocument.Load(csproj);
var packageReference = projectContents
.Descendants("PackageReference")
.Single(element => (string) element.Attribute("Include") == "Microsoft.AspNetCore.All");
// Detect what version of aspnet core was shipped with this CLI installation
var aspnetCoreVersion =
new DirectoryInfo(
Path.Combine(
Path.GetDirectoryName(TestCommand.DotnetPath),
"store", "x86", "netcoreapp2.0", "microsoft.aspnetcore"))
.GetDirectories()
.Single()
.Name;
packageReference.Attribute("Version").Value = aspnetCoreVersion;
projectContents.Save(csproj);
}
private string GetAssemblyInformationalVersion()
{
var assemblyInformationalVersionAttribute = typeof(TemplateFunctionalTests).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
if (assemblyInformationalVersionAttribute == null)
{
throw new InvalidOperationException("Tests assembly lacks AssemblyInformationalVersionAttribute");
}
return assemblyInformationalVersionAttribute.InformationalVersion;
}
private TestLogger GetLogger([CallerMemberName] string callerName = null)
{
_fixture.TestLog.StartTestLog(_outputHelper, nameof(TemplateFunctionalTests), out var factory, callerName);

View File

@ -32,7 +32,7 @@
},
"resources": [
{
"type": "extensions",
"type": "siteextensions",
"name": "[parameters('extensionName')]",
"apiVersion": "2015-08-01",
"location": "West US 2",

View File

@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.AzureAppServices.FunctionalTests
{
public class TestCommand
{
private string _dotnetPath = GetDotnetPath();
public static string DotnetPath { get; } = GetDotnetPath();
private static string GetDotnetPath()
{
@ -77,6 +77,13 @@ namespace Microsoft.AspNetCore.AzureAppServices.FunctionalTests
return await ExecuteAsyncInternal(resolvedCommand, args);
}
public virtual async Task<CommandResult> ExecuteAndAssertAsync(string args = "")
{
var result = await ExecuteAsync(args);
result.AssertSuccess();
return result;
}
private async Task<CommandResult> ExecuteAsyncInternal(string executable, string args)
{
var stdOut = new List<String>();
@ -200,7 +207,7 @@ namespace Microsoft.AspNetCore.AzureAppServices.FunctionalTests
{
if (executable == "dotnet")
{
executable = _dotnetPath;
executable = DotnetPath;
return;
}