Enable auth tests on IIS (#1511)

* Enable auth tests on IIS

* FB
This commit is contained in:
Pavel Krymets 2018-10-13 10:54:20 -07:00 committed by GitHub
parent 897386ab3f
commit 0b5973e501
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 69 additions and 16 deletions

View File

@ -43,14 +43,22 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
public static void SetWindowsAuth(this IISDeploymentParameters parameters, bool enabled = true)
{
parameters.EnsureSection("windowsAuthentication", "system.webServer", "security", "windowsAuthentication");
parameters.EnableModule("WindowsAuthenticationModule", "%IIS_BIN%\\authsspi.dll");
parameters.AddServerConfigAction(
element =>
{
element.Descendants("windowsAuthentication")
.Single()
.SetAttributeValue("enabled", enabled);
var windowsAuthentication = element
.RequiredElement("system.webServer")
.RequiredElement("security")
.RequiredElement("authentication")
.GetOrAdd("windowsAuthentication");
windowsAuthentication.SetAttributeValue("enabled", enabled);
var providers = windowsAuthentication.GetOrAdd("providers");
providers.GetOrAdd("add", "value", "Negotiate");
providers.GetOrAdd("add", "value", "NTLM");
});
}
@ -59,8 +67,11 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
parameters.AddServerConfigAction(
element =>
{
element.Descendants("anonymousAuthentication")
.Single()
element
.RequiredElement("system.webServer")
.RequiredElement("security")
.RequiredElement("authentication")
.GetOrAdd("anonymousAuthentication")
.SetAttributeValue("enabled", enabled);
});
}
@ -72,12 +83,33 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
parameters.AddServerConfigAction(
element =>
{
element.Descendants("basicAuthentication")
.Single()
element
.RequiredElement("system.webServer")
.RequiredElement("security")
.RequiredElement("authentication")
.GetOrAdd("basicAuthentication")
.SetAttributeValue("enabled", enabled);
});
}
public static void EnsureSection(this IISDeploymentParameters parameters, string name, params string[] path)
{
parameters.ServerConfigActionList.Add(
(config, _) => {
var element = config
.RequiredElement("configSections");
foreach (var s in path)
{
element = element.GetOrAdd("sectionGroup", "name", s);
}
element.GetOrAdd("section", "name", "applicationInitialization")
.SetAttributeValue("overrideModeDefault", "Allow");
});
}
public static void EnableLogging(this IISDeploymentParameters deploymentParameters, string path)
{
deploymentParameters.WebConfigActionList.Add(

View File

@ -32,7 +32,8 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
.WithAllAncmVersions()
.WithAllHostingModels();
[ConditionalTheory(Skip = "This test is manual. To run it set ASPNETCORE_MODULE_TEST_USER and ASPNETCORE_MODULE_TEST_PASSWORD environment variables to existing user")]
[ConditionalTheory]
[RequiresEnvironmentVariable("ASPNETCORE_MODULE_TEST_USER")]
[RequiresIIS(IISCapability.BasicAuthentication)]
[MemberData(nameof(TestVariants))]
public async Task BasicAuthTest(TestVariant variant)
@ -63,7 +64,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
else
{
// We expect out-of-proc not allowing basic auth
Assert.Equal("Windows:", responseText);
Assert.Equal("Windows", responseText);
}
}
}

View File

@ -0,0 +1,24 @@
// 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 Microsoft.AspNetCore.Server.IntegrationTesting;
using Microsoft.AspNetCore.Testing.xunit;
namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
{
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)]
public sealed class RequiresEnvironmentVariableAttribute : Attribute, ITestCondition
{
private readonly string _name;
public RequiresEnvironmentVariableAttribute(string name)
{
_name = name;
}
public bool IsMet => !string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable(_name));
public string SkipReason => $"Environment variable {_name} is required to run this test.";
}
}

View File

@ -78,13 +78,9 @@ namespace IIS.FunctionalTests
private static void EnablePreload(IISDeploymentParameters baseDeploymentParameters)
{
baseDeploymentParameters.EnsureSection("applicationInitialization", "system.webServer");
baseDeploymentParameters.ServerConfigActionList.Add(
(config, _) => {
config
.RequiredElement("configSections")
.GetOrAdd("sectionGroup", "name", "system.webServer")
.GetOrAdd("section", "name", "applicationInitialization")
.SetAttributeValue("overrideModeDefault", "Allow");
config
.RequiredElement("system.applicationHost")

View File

@ -57,8 +57,8 @@ function Setup-appverif($application)
function Shutdown-appverif($application)
{
setx APPVERIFIER_ENABLED_CODES "`"`"";
setx APPVERIFIER_LEVEL "`"`"";
setx APPVERIFIER_ENABLED_CODES "NONE";
setx APPVERIFIER_LEVEL "NONE";
appverif.exe -disable * -for $application
}