diff --git a/IISIntegration.NoV1.sln b/IISIntegration.NoV1.sln index c2bd1b9ade..04bda53889 100644 --- a/IISIntegration.NoV1.sln +++ b/IISIntegration.NoV1.sln @@ -49,7 +49,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{7E80C58E build\testsite.props = build\testsite.props EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISIntegration.FunctionalTests", "test\IISIntegration.FunctionalTests\IISIntegration.FunctionalTests.csproj", "{4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISExpress.FunctionalTests", "test\IISExpress.FunctionalTests\IISExpress.FunctionalTests.csproj", "{4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}" ProjectSection(ProjectDependencies) = postProject {7F87406C-A3C8-4139-A68D-E4C344294A67} = {7F87406C-A3C8-4139-A68D-E4C344294A67} EndProjectSection @@ -109,6 +109,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "test\gtest\gtest.v EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RequestHandlerLib", "src\AspNetCoreModuleV2\RequestHandlerLib\RequestHandlerLib.vcxproj", "{1533E271-F61B-441B-8B74-59FB61DF0552}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.FunctionalTests", "test\IIS.FunctionalTests\IIS.FunctionalTests.csproj", "{D182103F-8405-4647-B158-C36F598657EF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -353,6 +355,18 @@ Global {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x64.Build.0 = Release|x64 {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x86.ActiveCfg = Release|Win32 {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x86.Build.0 = Release|Win32 + {D182103F-8405-4647-B158-C36F598657EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D182103F-8405-4647-B158-C36F598657EF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D182103F-8405-4647-B158-C36F598657EF}.Debug|x64.ActiveCfg = Debug|Any CPU + {D182103F-8405-4647-B158-C36F598657EF}.Debug|x64.Build.0 = Debug|Any CPU + {D182103F-8405-4647-B158-C36F598657EF}.Debug|x86.ActiveCfg = Debug|Any CPU + {D182103F-8405-4647-B158-C36F598657EF}.Debug|x86.Build.0 = Debug|Any CPU + {D182103F-8405-4647-B158-C36F598657EF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D182103F-8405-4647-B158-C36F598657EF}.Release|Any CPU.Build.0 = Release|Any CPU + {D182103F-8405-4647-B158-C36F598657EF}.Release|x64.ActiveCfg = Release|Any CPU + {D182103F-8405-4647-B158-C36F598657EF}.Release|x64.Build.0 = Release|Any CPU + {D182103F-8405-4647-B158-C36F598657EF}.Release|x86.ActiveCfg = Release|Any CPU + {D182103F-8405-4647-B158-C36F598657EF}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -381,6 +395,7 @@ Global {340C59FC-C682-4CBA-81F8-791821EC8EDE} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} {CAC1267B-8778-4257-AAC6-CAF481723B01} = {EF30B533-D715-421A-92B7-92FEF460AC9C} {1533E271-F61B-441B-8B74-59FB61DF0552} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} + {D182103F-8405-4647-B158-C36F598657EF} = {EF30B533-D715-421A-92B7-92FEF460AC9C} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DB4F868D-E1AE-4FD7-9333-69FA15B268C5} diff --git a/IISIntegration.sln b/IISIntegration.sln index 86393ab4b7..d3e7ca4de0 100644 --- a/IISIntegration.sln +++ b/IISIntegration.sln @@ -49,7 +49,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{7E80C58E build\testsite.props = build\testsite.props EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISIntegration.FunctionalTests", "test\IISIntegration.FunctionalTests\IISIntegration.FunctionalTests.csproj", "{4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISExpress.FunctionalTests", "test\IISExpress.FunctionalTests\IISExpress.FunctionalTests.csproj", "{4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}" ProjectSection(ProjectDependencies) = postProject {7F87406C-A3C8-4139-A68D-E4C344294A67} = {7F87406C-A3C8-4139-A68D-E4C344294A67} EndProjectSection @@ -116,6 +116,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "test\gtest\gtest.v EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RequestHandlerLib", "src\AspNetCoreModuleV2\RequestHandlerLib\RequestHandlerLib.vcxproj", "{1533E271-F61B-441B-8B74-59FB61DF0552}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.FunctionalTests", "test\IIS.FunctionalTests\IIS.FunctionalTests.csproj", "{1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -380,6 +382,18 @@ Global {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x64.Build.0 = Release|x64 {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x86.ActiveCfg = Release|Win32 {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x86.Build.0 = Release|Win32 + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Debug|x64.ActiveCfg = Debug|Any CPU + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Debug|x64.Build.0 = Debug|Any CPU + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Debug|x86.ActiveCfg = Debug|Any CPU + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Debug|x86.Build.0 = Debug|Any CPU + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|Any CPU.Build.0 = Release|Any CPU + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|x64.ActiveCfg = Release|Any CPU + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|x64.Build.0 = Release|Any CPU + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|x86.ActiveCfg = Release|Any CPU + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -411,6 +425,7 @@ Global {340C59FC-C682-4CBA-81F8-791821EC8EDE} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} {CAC1267B-8778-4257-AAC6-CAF481723B01} = {EF30B533-D715-421A-92B7-92FEF460AC9C} {1533E271-F61B-441B-8B74-59FB61DF0552} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} + {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712} = {EF30B533-D715-421A-92B7-92FEF460AC9C} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DB4F868D-E1AE-4FD7-9333-69FA15B268C5} diff --git a/benchmarks/IIS.Performance/IIS.Performance.csproj b/benchmarks/IIS.Performance/IIS.Performance.csproj index 179e042514..87102ca7ed 100644 --- a/benchmarks/IIS.Performance/IIS.Performance.csproj +++ b/benchmarks/IIS.Performance/IIS.Performance.csproj @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ - + False diff --git a/benchmarks/IIS.Performance/StartupTimeBenchmark.cs b/benchmarks/IIS.Performance/StartupTimeBenchmark.cs index 4e16e33b49..ef66b6b671 100644 --- a/benchmarks/IIS.Performance/StartupTimeBenchmark.cs +++ b/benchmarks/IIS.Performance/StartupTimeBenchmark.cs @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Performance RuntimeFlavor.CoreClr, RuntimeArchitecture.x64) { - ServerConfigTemplateContent = File.ReadAllText("Http.config"), + ServerConfigTemplateContent = File.ReadAllText("IISExpress.config"), SiteName = "HttpTestSite", TargetFramework = "netcoreapp2.1", ApplicationType = ApplicationType.Portable, diff --git a/build/repo.props b/build/repo.props index 93ca7cd881..ba3cca9388 100644 --- a/build/repo.props +++ b/build/repo.props @@ -9,11 +9,6 @@ - - - - - diff --git a/test/AspNetCoreModuleTests/AspNetCoreModuleTests.vcxproj b/test/AspNetCoreModuleTests/AspNetCoreModuleTests.vcxproj deleted file mode 100644 index fe6851d189..0000000000 --- a/test/AspNetCoreModuleTests/AspNetCoreModuleTests.vcxproj +++ /dev/null @@ -1,178 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 15.0 - {0692D963-DB10-4387-B3EA-460FBB9BD9A3} - Win32Proj - AspNetCoreModuleTests - 10.0.15063.0 - NativeUnitTestProject - - - - DynamicLibrary - true - v141 - Unicode - false - - - DynamicLibrary - false - v141 - true - Unicode - false - - - DynamicLibrary - true - v141 - Unicode - false - - - DynamicLibrary - false - v141 - true - Unicode - false - - - - - - - - - - - - - - - - - - - - - true - - - true - - - true - - - true - - - - Use - Level3 - Disabled - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\CommonLib;..\..\src\AspNetCoreModuleV2\IISLib - _DEBUG;%(PreprocessorDefinitions) - true - MultiThreadedDebug - - - Windows - $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - - - Use - Level3 - Disabled - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\CommonLib;..\..\src\AspNetCoreModuleV2\IISLib - WIN32;_DEBUG;%(PreprocessorDefinitions) - true - MultiThreadedDebug - - - Windows - $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - - - Level3 - Use - MaxSpeed - true - true - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\CommonLib;..\..\src\AspNetCoreModuleV2\IISLib - WIN32;NDEBUG;%(PreprocessorDefinitions) - true - MultiThreaded - - - Windows - true - true - $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - - - Level3 - Use - MaxSpeed - true - true - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\CommonLib;..\..\src\AspNetCoreModuleV2\IISLib - NDEBUG;%(PreprocessorDefinitions) - true - MultiThreaded - - - Windows - true - true - $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - - - - - - - - - - - {55494e58-e061-4c4c-a0a8-837008e72f85} - - - {4787a64f-9a3e-4867-a55a-70cb4b2b2ffe} - - - - - - - \ No newline at end of file diff --git a/test/AspNetCoreModuleTests/stdafx.h b/test/AspNetCoreModuleTests/stdafx.h deleted file mode 100644 index 67bd5aa27b..0000000000 --- a/test/AspNetCoreModuleTests/stdafx.h +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#include "targetver.h" - -#define WIN32_LEAN_AND_MEAN - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include "stringa.h" -#include "stringu.h" -#include "dbgutil.h" -#include "ahutil.h" -#include "multisz.h" -#include "multisza.h" -#include "base64.h" -#include -#include -#include -#include -#include - -#include "..\..\src\AspNetCoreModuleV2\IISLib\hashtable.h" -#include "..\..\src\AspNetCoreModuleV2\IISLib\stringu.h" -#include "..\..\src\AspNetCoreModuleV2\IISLib\stringa.h" -#include "..\..\src\AspNetCoreModuleV2\IISLib\multisz.h" -#include "..\..\src\AspNetCoreModuleV2\IISLib\dbgutil.h" -#include "..\..\src\AspNetCoreModuleV2\IISLib\ahutil.h" -#include "..\..\src\AspNetCoreModuleV2\IISLib\hashfn.h" - -#include "..\..\src\AspNetCoreModuleV2\CommonLib\hostfxr_utility.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\environmentvariablehash.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\aspnetcoreconfig.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\application.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\utility.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\debugutil.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\requesthandler.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\resources.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\aspnetcore_msg.h" - -#include "CppUnitTest.h" diff --git a/test/IISIntegration.FunctionalTests/AppHostConfig/TestServer.config b/test/Common.FunctionalTests/AppHostConfig/HostableWebCore.config similarity index 100% rename from test/IISIntegration.FunctionalTests/AppHostConfig/TestServer.config rename to test/Common.FunctionalTests/AppHostConfig/HostableWebCore.config diff --git a/test/Common.FunctionalTests/AppHostConfig/IIS.config b/test/Common.FunctionalTests/AppHostConfig/IIS.config new file mode 100644 index 0000000000..4d30d2ad0f --- /dev/null +++ b/test/Common.FunctionalTests/AppHostConfig/IIS.config @@ -0,0 +1,741 @@ + + + + + + + + +
+
+
+
+
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ + +
+
+
+
+ +
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/IISIntegration.FunctionalTests/AppHostConfig/Http.config b/test/Common.FunctionalTests/AppHostConfig/IISExpress.config similarity index 99% rename from test/IISIntegration.FunctionalTests/AppHostConfig/Http.config rename to test/Common.FunctionalTests/AppHostConfig/IISExpress.config index b0de53397c..9dfe324091 100644 --- a/test/IISIntegration.FunctionalTests/AppHostConfig/Http.config +++ b/test/Common.FunctionalTests/AppHostConfig/IISExpress.config @@ -344,7 +344,6 @@ - @@ -1033,14 +1032,4 @@ - - - - - - - - - - diff --git a/test/IISIntegration.FunctionalTests/Inprocess/EnvironmentVariableTests.cs b/test/Common.FunctionalTests/Inprocess/EnvironmentVariableTests.cs similarity index 95% rename from test/IISIntegration.FunctionalTests/Inprocess/EnvironmentVariableTests.cs rename to test/Common.FunctionalTests/Inprocess/EnvironmentVariableTests.cs index 16467095d8..413aa4c35f 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/EnvironmentVariableTests.cs +++ b/test/Common.FunctionalTests/Inprocess/EnvironmentVariableTests.cs @@ -2,14 +2,12 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.IntegrationTesting; using Microsoft.AspNetCore.Testing.xunit; using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { [Collection(IISTestSiteCollection.Name)] - [SkipIfIISExpressSchemaMissingInProcess] public class EnvironmentVariableTests { private readonly IISTestSiteFixture _fixture; diff --git a/test/IISIntegration.FunctionalTests/Inprocess/FeatureCollectionTests.cs b/test/Common.FunctionalTests/Inprocess/FeatureCollectionTests.cs similarity index 89% rename from test/IISIntegration.FunctionalTests/Inprocess/FeatureCollectionTests.cs rename to test/Common.FunctionalTests/Inprocess/FeatureCollectionTests.cs index b946446db7..e31dc3dbaa 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/FeatureCollectionTests.cs +++ b/test/Common.FunctionalTests/Inprocess/FeatureCollectionTests.cs @@ -1,16 +1,13 @@ // 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.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.IntegrationTesting; using Microsoft.AspNetCore.Testing.xunit; using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { [Collection(IISTestSiteCollection.Name)] - [SkipIfIISExpressSchemaMissingInProcess] public class FeatureCollectionTest { private readonly IISTestSiteFixture _fixture; diff --git a/test/IISIntegration.FunctionalTests/Inprocess/HelloWorldTests.cs b/test/Common.FunctionalTests/Inprocess/HelloWorldTests.cs similarity index 89% rename from test/IISIntegration.FunctionalTests/Inprocess/HelloWorldTests.cs rename to test/Common.FunctionalTests/Inprocess/HelloWorldTests.cs index ebc67312df..1b2ad70600 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/HelloWorldTests.cs +++ b/test/Common.FunctionalTests/Inprocess/HelloWorldTests.cs @@ -1,16 +1,13 @@ // 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.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.IntegrationTesting; using Microsoft.AspNetCore.Testing.xunit; using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { [Collection(IISTestSiteCollection.Name)] - [SkipIfIISExpressSchemaMissingInProcess] public class HelloWorldInProcessTests { private readonly IISTestSiteFixture _fixture; diff --git a/test/IISIntegration.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs b/test/Common.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs similarity index 97% rename from test/IISIntegration.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs rename to test/Common.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs index ae27eb426e..95c05308bd 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs +++ b/test/Common.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs @@ -3,14 +3,12 @@ using System.Net.Http; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.IntegrationTesting; using Microsoft.AspNetCore.Testing.xunit; using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { [Collection(IISTestSiteCollection.Name)] - [SkipIfIISExpressSchemaMissingInProcess] public class InvalidReadWriteOperationTests { private readonly IISTestSiteFixture _fixture; diff --git a/test/IISIntegration.FunctionalTests/Inprocess/LargeResponseBodyTests.cs b/test/Common.FunctionalTests/Inprocess/LargeResponseBodyTests.cs similarity index 92% rename from test/IISIntegration.FunctionalTests/Inprocess/LargeResponseBodyTests.cs rename to test/Common.FunctionalTests/Inprocess/LargeResponseBodyTests.cs index 3578718ef6..40db2cfdb8 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/LargeResponseBodyTests.cs +++ b/test/Common.FunctionalTests/Inprocess/LargeResponseBodyTests.cs @@ -2,14 +2,12 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.IntegrationTesting; using Microsoft.AspNetCore.Testing.xunit; using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { [Collection(IISTestSiteCollection.Name)] - [SkipIfIISExpressSchemaMissingInProcess] public class LargeResponseBodyTests { private readonly IISTestSiteFixture _fixture; diff --git a/test/IISIntegration.FunctionalTests/Inprocess/ResponseHeaderTests.cs b/test/Common.FunctionalTests/Inprocess/ResponseHeaderTests.cs similarity index 96% rename from test/IISIntegration.FunctionalTests/Inprocess/ResponseHeaderTests.cs rename to test/Common.FunctionalTests/Inprocess/ResponseHeaderTests.cs index 09e3688fbf..3f433b155f 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/ResponseHeaderTests.cs +++ b/test/Common.FunctionalTests/Inprocess/ResponseHeaderTests.cs @@ -1,11 +1,9 @@ // 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.Linq; using System.Net; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.IntegrationTesting; using Microsoft.AspNetCore.Testing.xunit; using Microsoft.Net.Http.Headers; using Xunit; @@ -13,7 +11,6 @@ using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { [Collection(IISTestSiteCollection.Name)] - [SkipIfIISExpressSchemaMissingInProcess] public class ResponseHeaders { private readonly IISTestSiteFixture _fixture; diff --git a/test/IISIntegration.FunctionalTests/Inprocess/ResponseInvalidOrderingTests.cs b/test/Common.FunctionalTests/Inprocess/ResponseInvalidOrderingTests.cs similarity index 95% rename from test/IISIntegration.FunctionalTests/Inprocess/ResponseInvalidOrderingTests.cs rename to test/Common.FunctionalTests/Inprocess/ResponseInvalidOrderingTests.cs index 1bf0f1a483..c39e155e77 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/ResponseInvalidOrderingTests.cs +++ b/test/Common.FunctionalTests/Inprocess/ResponseInvalidOrderingTests.cs @@ -9,7 +9,6 @@ using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { [Collection(IISTestSiteCollection.Name)] - [SkipIfIISExpressSchemaMissingInProcess] public class ResponseInvalidOrderingTest { private readonly IISTestSiteFixture _fixture; diff --git a/test/IISIntegration.FunctionalTests/Inprocess/ServerVariablesTest.cs b/test/Common.FunctionalTests/Inprocess/ServerVariablesTest.cs similarity index 98% rename from test/IISIntegration.FunctionalTests/Inprocess/ServerVariablesTest.cs rename to test/Common.FunctionalTests/Inprocess/ServerVariablesTest.cs index 020ef00213..74af2e00cb 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/ServerVariablesTest.cs +++ b/test/Common.FunctionalTests/Inprocess/ServerVariablesTest.cs @@ -11,7 +11,6 @@ using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { [Collection(IISTestSiteCollection.Name)] - [SkipIfIISExpressSchemaMissingInProcess] public class ServerVariablesTest { private readonly IISTestSiteFixture _fixture; diff --git a/test/IISIntegration.FunctionalTests/Inprocess/SynchronousReadAndWriteTests.cs b/test/Common.FunctionalTests/Inprocess/SynchronousReadAndWriteTests.cs similarity index 99% rename from test/IISIntegration.FunctionalTests/Inprocess/SynchronousReadAndWriteTests.cs rename to test/Common.FunctionalTests/Inprocess/SynchronousReadAndWriteTests.cs index 122b67f005..9b57d4996b 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/SynchronousReadAndWriteTests.cs +++ b/test/Common.FunctionalTests/Inprocess/SynchronousReadAndWriteTests.cs @@ -13,7 +13,6 @@ using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { [Collection(IISTestSiteCollection.Name)] - [SkipIfIISExpressSchemaMissingInProcess] public class SynchronousReadAndWriteTests { private readonly IISTestSiteFixture _fixture; diff --git a/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs b/test/Common.FunctionalTests/OutOfProcess/HelloWorldTest.cs similarity index 85% rename from test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs rename to test/Common.FunctionalTests/OutOfProcess/HelloWorldTest.cs index 659487f51d..876b8e010f 100644 --- a/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs +++ b/test/Common.FunctionalTests/OutOfProcess/HelloWorldTest.cs @@ -1,8 +1,9 @@ // 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.IO; using System.Threading.Tasks; -using IISIntegration.FunctionalTests.Utilities; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; using Microsoft.AspNetCore.Server.IntegrationTesting; using Microsoft.AspNetCore.Testing.xunit; using Xunit; @@ -17,7 +18,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests } public static TestMatrix TestVariants - => TestMatrix.ForServers(ServerType.IISExpress) + => TestMatrix.ForServers(DeployerSelector.ServerType) .WithTfms(Tfm.NetCoreApp22, Tfm.Net461) .WithAllApplicationTypes() .WithAllAncmVersions(); @@ -26,9 +27,11 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests [MemberData(nameof(TestVariants))] public async Task HelloWorld(TestVariant variant) { + // The default in hosting sets windows auth to true. + // Set it to the IISExpress.config file var deploymentParameters = new DeploymentParameters(variant) { - ApplicationPath = Helpers.GetOutOfProcessTestSitesPath(), + ApplicationPath = Helpers.GetOutOfProcessTestSitesPath() }; var deploymentResult = await DeployAsync(deploymentParameters); @@ -53,9 +56,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests response = await deploymentResult.HttpClient.GetAsync("/Auth"); responseText = await response.Content.ReadAsStringAsync(); - // We adapted the Http.config file to be used for inprocess too. We specify WindowsAuth is enabled - // We now expect that windows auth is enabled rather than disabled. - Assert.True("backcompat;Windows".Equals(responseText) || "latest;Windows".Equals(responseText), "Auth"); + Assert.True("backcompat;Windows".Equals(responseText) || "latest;null".Equals(responseText), "Auth"); } } } diff --git a/test/IISIntegration.FunctionalTests/Properties/AssemblyInfo.cs b/test/Common.FunctionalTests/Properties/AssemblyInfo.cs similarity index 72% rename from test/IISIntegration.FunctionalTests/Properties/AssemblyInfo.cs rename to test/Common.FunctionalTests/Properties/AssemblyInfo.cs index a150572c1f..a3ad8b187e 100644 --- a/test/IISIntegration.FunctionalTests/Properties/AssemblyInfo.cs +++ b/test/Common.FunctionalTests/Properties/AssemblyInfo.cs @@ -1,7 +1,8 @@ // 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. -// All functional tests in this project require a version of IIS express with an updated schema +using Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests; using Xunit; [assembly: CollectionBehavior(DisableTestParallelization = true)] +[assembly: RequiresIIS] diff --git a/test/IISIntegration.FunctionalTests/Utilities/FunctionalTestsBase.cs b/test/Common.FunctionalTests/Utilities/FunctionalTestsBase.cs similarity index 79% rename from test/IISIntegration.FunctionalTests/Utilities/FunctionalTestsBase.cs rename to test/Common.FunctionalTests/Utilities/FunctionalTestsBase.cs index a30387f0dd..c2a9c3682a 100644 --- a/test/IISIntegration.FunctionalTests/Utilities/FunctionalTestsBase.cs +++ b/test/Common.FunctionalTests/Utilities/FunctionalTestsBase.cs @@ -1,6 +1,7 @@ // 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.IO; using System.Threading.Tasks; using Microsoft.Extensions.Logging.Testing; using Xunit.Abstractions; @@ -24,14 +25,15 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting parameters.EnvironmentVariables[DebugEnvironmentVariable] = "4"; } - // Currently hosting throws if the Servertype = IIS. if (parameters.ServerType == ServerType.IIS) { + // Currently hosting throws if the Servertype = IIS. _deployer = new IISDeployer(parameters, LoggerFactory); } - else + else if (parameters.ServerType == ServerType.IISExpress) { - _deployer = ApplicationDeployerFactory.Create(parameters, LoggerFactory); + parameters.ServerConfigTemplateContent = parameters.ServerConfigTemplateContent ?? File.ReadAllText("IISExpress.config"); + _deployer = new IISExpressDeployer(parameters, LoggerFactory); } var result = await _deployer.DeployAsync(); diff --git a/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs b/test/Common.FunctionalTests/Utilities/Helpers.cs similarity index 97% rename from test/IISIntegration.FunctionalTests/Utilities/Helpers.cs rename to test/Common.FunctionalTests/Utilities/Helpers.cs index cfee3377f2..6915d955ec 100644 --- a/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs +++ b/test/Common.FunctionalTests/Utilities/Helpers.cs @@ -55,7 +55,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests // Defaults to inprocess specific deployment parameters public static DeploymentParameters GetBaseDeploymentParameters(string site = "InProcessWebSite") { - return new DeploymentParameters(Helpers.GetTestWebSitePath(site), ServerType.IISExpress, RuntimeFlavor.CoreClr, RuntimeArchitecture.x64) + return new DeploymentParameters(Helpers.GetTestWebSitePath(site), DeployerSelector.ServerType, RuntimeFlavor.CoreClr, RuntimeArchitecture.x64) { TargetFramework = Tfm.NetCoreApp22, ApplicationType = ApplicationType.Portable, diff --git a/test/IISIntegration.FunctionalTests/Utilities/IISApplication.cs b/test/Common.FunctionalTests/Utilities/IISApplication.cs similarity index 83% rename from test/IISIntegration.FunctionalTests/Utilities/IISApplication.cs rename to test/Common.FunctionalTests/Utilities/IISApplication.cs index faba405c06..662f9315a6 100644 --- a/test/IISIntegration.FunctionalTests/Utilities/IISApplication.cs +++ b/test/Common.FunctionalTests/Utilities/IISApplication.cs @@ -19,13 +19,13 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting /// internal class IISApplication { - private static readonly TimeSpan _timeout = TimeSpan.FromSeconds(2); - private static readonly TimeSpan _retryDelay = TimeSpan.FromMilliseconds(100); + private static readonly TimeSpan _timeout = TimeSpan.FromSeconds(5); + private static readonly TimeSpan _retryDelay = TimeSpan.FromMilliseconds(200); private readonly ServerManager _serverManager = new ServerManager(); private readonly DeploymentParameters _deploymentParameters; private readonly ILogger _logger; private readonly string _ancmVersion; - private readonly object _syncLock = new object(); + private readonly string _ancmDllName; private readonly string _apphostConfigBackupPath; private static readonly string _apphostConfigPath = Path.Combine( Environment.SystemDirectory, @@ -38,6 +38,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting _deploymentParameters = deploymentParameters; _logger = logger; _ancmVersion = deploymentParameters.AncmVersion.ToString(); + _ancmDllName = deploymentParameters.AncmVersion == AncmVersion.AspNetCoreModuleV2 ? "aspnetcorev2.dll" : "aspnetcore.dll"; WebSiteName = CreateTestSiteName(); AppPoolName = $"{WebSiteName}Pool"; _apphostConfigBackupPath = Path.Combine( @@ -56,12 +57,12 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting // Backup currently deployed apphost.config file using (_logger.BeginScope("StartIIS")) { - AddTemporaryAppHostConfig(); var port = uri.Port; if (port == 0) { throw new NotSupportedException("Cannot set port 0 for IIS."); } + AddTemporaryAppHostConfig(); ConfigureAppPool(contentRoot); @@ -177,32 +178,60 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting private void AddTemporaryAppHostConfig() { - File.Copy(_apphostConfigPath, _apphostConfigBackupPath); + RetryFileOperation(() => File.Move(_apphostConfigPath, _apphostConfigBackupPath), + e => _logger.LogWarning($"Failed to backup apphost.config: {e.Message}")); + _logger.LogInformation($"Backed up {_apphostConfigPath} to {_apphostConfigBackupPath}"); + + RetryFileOperation( + () => File.WriteAllText(_apphostConfigPath, _deploymentParameters.ServerConfigTemplateContent ?? File.ReadAllText("IIS.config")), + e => _logger.LogWarning($"Failed to copy IIS.config to apphost.config: {e.Message}")); + + _logger.LogInformation($"Copied contents of IIS.config to {_apphostConfigPath}"); } private void RestoreAppHostConfig() { - RetryHelper.RetryOperation( - () => File.Delete(_apphostConfigPath), - e => _logger.LogWarning($"Failed to delete directory : {e.Message}"), - retryCount: 3, - retryDelayMilliseconds: 100); + if (File.Exists(_apphostConfigPath)) + { + RetryFileOperation( + () => File.Delete(_apphostConfigPath), + e => _logger.LogWarning($"Failed to delete file : {e.Message}")); + } + + RetryFileOperation( + () => File.Move(_apphostConfigBackupPath, _apphostConfigPath), + e => _logger.LogError($"Failed to backup apphost.config: {e.Message}")); - File.Move(_apphostConfigBackupPath, _apphostConfigPath); _logger.LogInformation($"Restored {_apphostConfigPath}."); } + private void RetryFileOperation(Action retryBlock, Action exceptionBlock) + { + RetryHelper.RetryOperation(retryBlock, + exceptionBlock, + retryCount: 10, + retryDelayMilliseconds: 100); + } + private ApplicationPool ConfigureAppPool(string contentRoot) { - var pool = _serverManager.ApplicationPools.Add(AppPoolName); - pool.ProcessModel.IdentityType = ProcessModelIdentityType.LocalSystem; - pool.ManagedRuntimeVersion = string.Empty; + try + { + var pool = _serverManager.ApplicationPools.Add(AppPoolName); + pool.ProcessModel.IdentityType = ProcessModelIdentityType.LocalSystem; + pool.ManagedRuntimeVersion = string.Empty; - AddEnvironmentVariables(contentRoot, pool); + AddEnvironmentVariables(contentRoot, pool); - _logger.LogInformation($"Configured AppPool {AppPoolName}"); - return pool; + _logger.LogInformation($"Configured AppPool {AppPoolName}"); + return pool; + } + catch (COMException comException) + { + _logger.LogError(File.ReadAllText(_apphostConfigPath)); + throw comException; + } } private void AddEnvironmentVariables(string contentRoot, ApplicationPool pool) @@ -215,6 +244,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting { AddEnvironmentVariableToAppPool(envCollection, tuple.Key, tuple.Value); } + AddEnvironmentVariableToAppPool(envCollection, "ASPNETCORE_MODULE_DEBUG_FILE", $"{WebSiteName}.txt"); } catch (COMException comException) { @@ -301,11 +331,11 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting private string GetAncmLocation(string dllRoot) { - var arch = _deploymentParameters.RuntimeArchitecture == RuntimeArchitecture.x64 ? @"x64\aspnetcorev2.dll" : @"x86\aspnetcorev2.dll"; + var arch = _deploymentParameters.RuntimeArchitecture == RuntimeArchitecture.x64 ? $@"x64\{_ancmDllName}" : $@"x86\{_ancmDllName}"; var ancmFile = Path.Combine(dllRoot, arch); if (!File.Exists(Environment.ExpandEnvironmentVariables(ancmFile))) { - ancmFile = Path.Combine(dllRoot, "aspnetcorev2.dll"); + ancmFile = Path.Combine(dllRoot, _ancmDllName); if (!File.Exists(Environment.ExpandEnvironmentVariables(ancmFile))) { throw new FileNotFoundException("AspNetCoreModule could not be found.", ancmFile); diff --git a/test/IISIntegration.FunctionalTests/Utilities/IISDeployer.cs b/test/Common.FunctionalTests/Utilities/IISDeployer.cs similarity index 93% rename from test/IISIntegration.FunctionalTests/Utilities/IISDeployer.cs rename to test/Common.FunctionalTests/Utilities/IISDeployer.cs index 4f0d5252c9..f3f9d8e7b9 100644 --- a/test/IISIntegration.FunctionalTests/Utilities/IISDeployer.cs +++ b/test/Common.FunctionalTests/Utilities/IISDeployer.cs @@ -49,6 +49,11 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting StartTimer(); var contentRoot = string.Empty; + if (string.IsNullOrEmpty(DeploymentParameters.ServerConfigTemplateContent)) + { + DeploymentParameters.ServerConfigTemplateContent = File.ReadAllText("IIS.config"); + } + _application = new IISApplication(DeploymentParameters, Logger); // For now, only support using published output @@ -90,6 +95,5 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting Logger.LogInformation(line); } } - } } diff --git a/test/IISIntegration.FunctionalTests/Utilities/IISDeploymentResult.cs b/test/Common.FunctionalTests/Utilities/IISDeploymentResult.cs similarity index 100% rename from test/IISIntegration.FunctionalTests/Utilities/IISDeploymentResult.cs rename to test/Common.FunctionalTests/Utilities/IISDeploymentResult.cs diff --git a/test/IISIntegration.FunctionalTests/Utilities/IISFunctionalTestBase.cs b/test/Common.FunctionalTests/Utilities/IISFunctionalTestBase.cs similarity index 66% rename from test/IISIntegration.FunctionalTests/Utilities/IISFunctionalTestBase.cs rename to test/Common.FunctionalTests/Utilities/IISFunctionalTestBase.cs index 9c6ba61513..d4c74c551b 100644 --- a/test/IISIntegration.FunctionalTests/Utilities/IISFunctionalTestBase.cs +++ b/test/Common.FunctionalTests/Utilities/IISFunctionalTestBase.cs @@ -5,10 +5,11 @@ using System; using System.Linq; using System.Threading.Tasks; using System.Xml.Linq; +using Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests; using Microsoft.AspNetCore.Server.IntegrationTesting; using Xunit.Abstractions; -namespace IISIntegration.FunctionalTests.Utilities +namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities { public class IISFunctionalTestBase : FunctionalTestsBase { @@ -18,7 +19,7 @@ namespace IISIntegration.FunctionalTests.Utilities protected string GetServerConfig(Action transform) { - var doc = XDocument.Load("AppHostConfig/Http.config"); + var doc = XDocument.Load(DeployerSelector.ServerType == ServerType.IIS ? "IIS.config" : "IISExpress.config"); transform?.Invoke(doc.Root); return doc.ToString(); } @@ -36,5 +37,15 @@ namespace IISIntegration.FunctionalTests.Utilities .SetAttributeValue("sslFlags", "Ssl, SslNegotiateCert"); }); } + + protected string GetWindowsAuthConfig() + { + return GetServerConfig( + element => { + element.Descendants("windowsAuthentication") + .Single() + .SetAttributeValue("enabled", "true"); + }); + } } } diff --git a/test/IISIntegration.FunctionalTests/Utilities/IISTestSiteCollection.cs b/test/Common.FunctionalTests/Utilities/IISTestSiteCollection.cs similarity index 100% rename from test/IISIntegration.FunctionalTests/Utilities/IISTestSiteCollection.cs rename to test/Common.FunctionalTests/Utilities/IISTestSiteCollection.cs diff --git a/test/IISIntegration.FunctionalTests/Utilities/IISTestSiteFixture.cs b/test/Common.FunctionalTests/Utilities/IISTestSiteFixture.cs similarity index 75% rename from test/IISIntegration.FunctionalTests/Utilities/IISTestSiteFixture.cs rename to test/Common.FunctionalTests/Utilities/IISTestSiteFixture.cs index 3cbaefa9e6..d19dad36d0 100644 --- a/test/IISIntegration.FunctionalTests/Utilities/IISTestSiteFixture.cs +++ b/test/Common.FunctionalTests/Utilities/IISTestSiteFixture.cs @@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests var logging = AssemblyTestLog.ForAssembly(typeof(IISTestSiteFixture).Assembly); var deploymentParameters = new DeploymentParameters(Helpers.GetInProcessTestSitesPath(), - ServerType.IISExpress, + DeployerSelector.ServerType, RuntimeFlavor.CoreClr, RuntimeArchitecture.x64) { @@ -30,7 +30,16 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests PublishApplicationBeforeDeployment = true, }; - _deployer = ApplicationDeployerFactory.Create(deploymentParameters, logging.CreateLoggerFactory(null, nameof(IISTestSiteFixture))); + if (deploymentParameters.ServerType == ServerType.IIS) + { + // Currently hosting throws if the Servertype = IIS. + _deployer = new IISDeployer(deploymentParameters, logging.CreateLoggerFactory(null, nameof(IISTestSiteFixture))); + } + else if (deploymentParameters.ServerType == ServerType.IISExpress) + { + _deployer = new IISExpressDeployer(deploymentParameters, logging.CreateLoggerFactory(null, nameof(IISTestSiteFixture))); + } + DeploymentResult = _deployer.DeployAsync().Result; Client = DeploymentResult.HttpClient; BaseUri = DeploymentResult.ApplicationBaseUri; diff --git a/test/IISIntegration.FunctionalTests/Utilities/LoggingHandler.cs b/test/Common.FunctionalTests/Utilities/LoggingHandler.cs similarity index 100% rename from test/IISIntegration.FunctionalTests/Utilities/LoggingHandler.cs rename to test/Common.FunctionalTests/Utilities/LoggingHandler.cs diff --git a/test/IISIntegration.FunctionalTests/Utilities/RetryHandler.cs b/test/Common.FunctionalTests/Utilities/RetryHandler.cs similarity index 100% rename from test/IISIntegration.FunctionalTests/Utilities/RetryHandler.cs rename to test/Common.FunctionalTests/Utilities/RetryHandler.cs diff --git a/test/IISIntegration.FunctionalTests/Utilities/SkipIfHostableWebCoreNotAvailibleAttribute.cs b/test/Common.FunctionalTests/Utilities/SkipIfHostableWebCoreNotAvailibleAttribute.cs similarity index 100% rename from test/IISIntegration.FunctionalTests/Utilities/SkipIfHostableWebCoreNotAvailibleAttribute.cs rename to test/Common.FunctionalTests/Utilities/SkipIfHostableWebCoreNotAvailibleAttribute.cs diff --git a/test/IISIntegration.FunctionalTests/Utilities/TestConnections.cs b/test/Common.FunctionalTests/Utilities/TestConnections.cs similarity index 100% rename from test/IISIntegration.FunctionalTests/Utilities/TestConnections.cs rename to test/Common.FunctionalTests/Utilities/TestConnections.cs diff --git a/test/IISIntegration.FunctionalTests/Utilities/TestIISUriHelper.cs b/test/Common.FunctionalTests/Utilities/TestIISUriHelper.cs similarity index 100% rename from test/IISIntegration.FunctionalTests/Utilities/TestIISUriHelper.cs rename to test/Common.FunctionalTests/Utilities/TestIISUriHelper.cs diff --git a/test/IISIntegration.FunctionalTests/Utilities/TestServer.cs b/test/Common.FunctionalTests/Utilities/TestServer.cs similarity index 97% rename from test/IISIntegration.FunctionalTests/Utilities/TestServer.cs rename to test/Common.FunctionalTests/Utilities/TestServer.cs index 6cd61b1459..5eaaaf3440 100644 --- a/test/IISIntegration.FunctionalTests/Utilities/TestServer.cs +++ b/test/Common.FunctionalTests/Utilities/TestServer.cs @@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests private static readonly SemaphoreSlim WebCoreLock = new SemaphoreSlim(1, 1); - // Currently this is hardcoded in TestServer.config + // Currently this is hardcoded in HostableWebCore.config private static readonly int BasePort = 50691; private static readonly Uri BaseUri = new Uri("http://localhost:" + BasePort); @@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests LoadLibrary(AspNetCoreModuleDll); set_main_handler(Main); - var startResult = WebCoreActivate(Path.GetFullPath("AppHostConfig/TestServer.config"), null, "Instance"); + var startResult = WebCoreActivate(Path.GetFullPath("HostableWebCore.config"), null, "Instance"); if (startResult != 0) { throw new InvalidOperationException($"Error while running WebCoreActivate: {startResult}"); diff --git a/test/IIS.FunctionalTests/DeployerSelector.cs b/test/IIS.FunctionalTests/DeployerSelector.cs new file mode 100644 index 0000000000..2032b716b9 --- /dev/null +++ b/test/IIS.FunctionalTests/DeployerSelector.cs @@ -0,0 +1,12 @@ +// 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 Microsoft.AspNetCore.Server.IntegrationTesting; + +namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests +{ + public static class DeployerSelector + { + public static ServerType ServerType => ServerType.IIS; + } +} diff --git a/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj b/test/IIS.FunctionalTests/IIS.FunctionalTests.csproj similarity index 90% rename from test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj rename to test/IIS.FunctionalTests/IIS.FunctionalTests.csproj index 544cde26ee..718053f101 100644 --- a/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj +++ b/test/IIS.FunctionalTests/IIS.FunctionalTests.csproj @@ -5,10 +5,7 @@ - - - Never - + @@ -19,6 +16,10 @@ + + + + @@ -26,9 +27,6 @@ - - - @@ -45,7 +43,11 @@ - + + + + + PreserveNewest diff --git a/test/IISIntegration.FunctionalTests/Utilities/SkipIfIISCannotRunAttribute.cs b/test/IIS.FunctionalTests/SkipIISTestAttribute.cs similarity index 92% rename from test/IISIntegration.FunctionalTests/Utilities/SkipIfIISCannotRunAttribute.cs rename to test/IIS.FunctionalTests/SkipIISTestAttribute.cs index aa6c3abd75..6602d1125c 100644 --- a/test/IISIntegration.FunctionalTests/Utilities/SkipIfIISCannotRunAttribute.cs +++ b/test/IIS.FunctionalTests/SkipIISTestAttribute.cs @@ -7,13 +7,12 @@ using System.Linq; using System.Runtime.InteropServices; using System.Security.Principal; using System.Xml.Linq; -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 SkipIfIISCannotRunAttribute : Attribute, ITestCondition + public sealed class RequiresIISAttribute : Attribute, ITestCondition { private static readonly bool _isMet; public static readonly string _skipReason; @@ -21,7 +20,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests public bool IsMet => _isMet; public string SkipReason => _skipReason; - static SkipIfIISCannotRunAttribute() + static RequiresIISAttribute() { if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { diff --git a/test/IISExpress.FunctionalTests/DeployerSelector.cs b/test/IISExpress.FunctionalTests/DeployerSelector.cs new file mode 100644 index 0000000000..5344cbacf0 --- /dev/null +++ b/test/IISExpress.FunctionalTests/DeployerSelector.cs @@ -0,0 +1,12 @@ +// 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 Microsoft.AspNetCore.Server.IntegrationTesting; + +namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests +{ + public static class DeployerSelector + { + public static ServerType ServerType => ServerType.IISExpress; + } +} diff --git a/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj b/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj new file mode 100644 index 0000000000..718053f101 --- /dev/null +++ b/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj @@ -0,0 +1,55 @@ + + + + netcoreapp2.2 + + + + + + + + + + + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + diff --git a/test/IISIntegration.FunctionalTests/Inprocess/AppOfflineTests.cs b/test/IISExpress.FunctionalTests/InProcess/AppOfflineTests.cs similarity index 95% rename from test/IISIntegration.FunctionalTests/Inprocess/AppOfflineTests.cs rename to test/IISExpress.FunctionalTests/InProcess/AppOfflineTests.cs index d88fad5d21..5cfd7fe7c0 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/AppOfflineTests.cs +++ b/test/IISExpress.FunctionalTests/InProcess/AppOfflineTests.cs @@ -6,7 +6,7 @@ using System.IO; using System.Net; using System.Net.Http; using System.Threading.Tasks; -using IISIntegration.FunctionalTests.Utilities; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests; using Microsoft.AspNetCore.Server.IntegrationTesting; @@ -14,11 +14,11 @@ using Microsoft.AspNetCore.Testing.xunit; using Microsoft.Extensions.Logging; using Xunit; -namespace IISIntegration.FunctionalTests.Inprocess +namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests.Inprocess { - [SkipIfIISExpressSchemaMissingInProcess] public class AppOfflineTests : IISFunctionalTestBase { + // TODO these will differ between IIS and IISExpress [ConditionalFact] public async Task AppOfflineDroppedWhileSiteIsDown_SiteReturns503() { diff --git a/test/IISIntegration.FunctionalTests/Inprocess/AuthenticationTests.cs b/test/IISExpress.FunctionalTests/InProcess/AuthenticationTests.cs similarity index 71% rename from test/IISIntegration.FunctionalTests/Inprocess/AuthenticationTests.cs rename to test/IISExpress.FunctionalTests/InProcess/AuthenticationTests.cs index a9cc151e6f..c3540d51ee 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/AuthenticationTests.cs +++ b/test/IISExpress.FunctionalTests/InProcess/AuthenticationTests.cs @@ -4,50 +4,48 @@ using System.Net; using System.Net.Http; using System.Threading.Tasks; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; using Microsoft.AspNetCore.Testing.xunit; -using Microsoft.AspNetCore.Server.IntegrationTesting; using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { - [Collection(IISTestSiteCollection.Name)] - [SkipIfIISExpressSchemaMissingInProcess] - public class AuthenticationTests + public class AuthenticationTests : IISFunctionalTestBase { - private readonly IISTestSiteFixture _fixture; - public AuthenticationTests(IISTestSiteFixture fixture) - { - _fixture = fixture; - } [ConditionalFact] public async Task Authentication_InProcess() { - var response = await _fixture.Client.GetAsync("/AuthenticationAnonymous"); + var deploymentParameters = Helpers.GetBaseDeploymentParameters(); + deploymentParameters.ServerConfigTemplateContent = GetWindowsAuthConfig(); + + var deploymentResult = await DeployAsync(deploymentParameters); + + var response = await deploymentResult.RetryingHttpClient.GetAsync("/AuthenticationAnonymous"); var responseText = await response.Content.ReadAsStringAsync(); Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal("Anonymous?True", responseText); - response = await _fixture.Client.GetAsync("/AuthenticationRestricted"); + response = await deploymentResult.RetryingHttpClient.GetAsync("/AuthenticationRestricted"); responseText = await response.Content.ReadAsStringAsync(); Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); Assert.Contains("NTLM", response.Headers.WwwAuthenticate.ToString()); Assert.Contains("Negotiate", response.Headers.WwwAuthenticate.ToString()); - response = await _fixture.Client.GetAsync("/AuthenticationRestrictedNTLM"); + response = await deploymentResult.RetryingHttpClient.GetAsync("/AuthenticationRestrictedNTLM"); responseText = await response.Content.ReadAsStringAsync(); Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); Assert.Contains("NTLM", response.Headers.WwwAuthenticate.ToString()); // Note we can't restrict a challenge to a specific auth type, the native auth modules always add themselves. Assert.Contains("Negotiate", response.Headers.WwwAuthenticate.ToString()); - response = await _fixture.Client.GetAsync("/AuthenticationForbidden"); + response = await deploymentResult.RetryingHttpClient.GetAsync("/AuthenticationForbidden"); responseText = await response.Content.ReadAsStringAsync(); Assert.Equal(HttpStatusCode.Forbidden, response.StatusCode); var httpClientHandler = new HttpClientHandler() { UseDefaultCredentials = true }; - var httpClient = _fixture.DeploymentResult.CreateHttpClient(httpClientHandler); + var httpClient = deploymentResult.DeploymentResult.CreateHttpClient(httpClientHandler); response = await httpClient.GetAsync("/AuthenticationAnonymous"); responseText = await response.Content.ReadAsStringAsync(); diff --git a/test/IISIntegration.FunctionalTests/Inprocess/LoggingTests.cs b/test/IISExpress.FunctionalTests/InProcess/LoggingTests.cs similarity index 95% rename from test/IISIntegration.FunctionalTests/Inprocess/LoggingTests.cs rename to test/IISExpress.FunctionalTests/InProcess/LoggingTests.cs index 611434f560..856bf1669f 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/LoggingTests.cs +++ b/test/IISExpress.FunctionalTests/InProcess/LoggingTests.cs @@ -5,8 +5,9 @@ using System; using System.IO; using System.Linq; using System.Threading.Tasks; -using IISIntegration.FunctionalTests.Utilities; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; using Microsoft.AspNetCore.Server.IntegrationTesting; +using Microsoft.AspNetCore.Testing.xunit; using Microsoft.Extensions.Logging; using Xunit; @@ -14,7 +15,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { public class LoggingTests : IISFunctionalTestBase { - [Theory] + [ConditionalTheory] [InlineData("CheckErrLogFile")] [InlineData("CheckLogFile")] public async Task CheckStdoutLogging(string path) @@ -66,7 +67,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests } } - [Fact] + [ConditionalFact] public async Task StartupMessagesAreLoggedIntoDebugLogFile() { var tempFile = Path.GetTempFileName(); diff --git a/test/IISIntegration.FunctionalTests/Inprocess/ShutdownTests.cs b/test/IISExpress.FunctionalTests/InProcess/ShutdownTests.cs similarity index 86% rename from test/IISIntegration.FunctionalTests/Inprocess/ShutdownTests.cs rename to test/IISExpress.FunctionalTests/InProcess/ShutdownTests.cs index 9b1eb28eab..69eacfbc43 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/ShutdownTests.cs +++ b/test/IISExpress.FunctionalTests/InProcess/ShutdownTests.cs @@ -2,15 +2,13 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Threading.Tasks; -using IISIntegration.FunctionalTests.Utilities; -using Microsoft.AspNetCore.Server.IntegrationTesting; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; using Microsoft.AspNetCore.Testing.xunit; using Xunit; using Xunit.Abstractions; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { - [SkipIfIISExpressSchemaMissingInProcess] public class ShutdownTests : IISFunctionalTestBase { diff --git a/test/IISIntegration.FunctionalTests/Inprocess/StartupExceptionTests.cs b/test/IISExpress.FunctionalTests/InProcess/StartupExceptionTests.cs similarity index 91% rename from test/IISIntegration.FunctionalTests/Inprocess/StartupExceptionTests.cs rename to test/IISExpress.FunctionalTests/InProcess/StartupExceptionTests.cs index 0b09c7a465..00b75c3a7c 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/StartupExceptionTests.cs +++ b/test/IISExpress.FunctionalTests/InProcess/StartupExceptionTests.cs @@ -4,15 +4,17 @@ using System; using System.Net; using System.Threading.Tasks; -using IISIntegration.FunctionalTests.Utilities; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; +using Microsoft.AspNetCore.Testing.xunit; using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { + public class StartupExceptionTests : IISFunctionalTestBase { // TODO FileNotFound here. - [Theory] + [ConditionalTheory] [InlineData("CheckLogFile")] [InlineData("CheckErrLogFile")] public async Task CheckStdoutWithRandomNumber(string path) @@ -33,13 +35,15 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests Assert.Contains(TestSink.Writes, context => context.Message.Contains($"Random number: {randomNumberString}")); } - [Theory] + [ConditionalTheory] [InlineData("CheckLargeStdErrWrites")] [InlineData("CheckLargeStdOutWrites")] [InlineData("CheckOversizedStdErrWrites")] [InlineData("CheckOversizedStdOutWrites")] public async Task CheckStdoutWithLargeWrites(string path) { + // Need a web.config + // Also publish issues. var deploymentParameters = Helpers.GetBaseDeploymentParameters("StartupExceptionWebsite"); deploymentParameters.EnvironmentVariables["ASPNETCORE_INPROCESS_STARTUP_VALUE"] = path; @@ -54,7 +58,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests Assert.Contains(TestSink.Writes, context => context.Message.Contains(new string('a', 4096))); } - [Fact] + [ConditionalFact] public async Task Gets500_30_ErrorPage() { var deploymentParameters = Helpers.GetBaseDeploymentParameters("StartupExceptionWebsite"); diff --git a/test/IISIntegration.FunctionalTests/Inprocess/StartupTests.cs b/test/IISExpress.FunctionalTests/InProcess/StartupTests.cs similarity index 96% rename from test/IISIntegration.FunctionalTests/Inprocess/StartupTests.cs rename to test/IISExpress.FunctionalTests/InProcess/StartupTests.cs index eda231066a..14bdceb024 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/StartupTests.cs +++ b/test/IISExpress.FunctionalTests/InProcess/StartupTests.cs @@ -6,7 +6,7 @@ using System.IO; using System.Linq; using System.Net; using System.Threading.Tasks; -using IISIntegration.FunctionalTests.Utilities; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; using Microsoft.AspNetCore.Server.IntegrationTesting; using Microsoft.AspNetCore.Testing.xunit; using Microsoft.Extensions.CommandLineUtils; @@ -15,7 +15,6 @@ using Xunit.Abstractions; namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { - [SkipIfIISExpressSchemaMissingInProcess] public class StartupTests : IISFunctionalTestBase { private readonly string _dotnetLocation = DotNetMuxer.MuxerPathOrDefault(); @@ -98,7 +97,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests } public static TestMatrix TestVariants - => TestMatrix.ForServers(ServerType.IISExpress) + => TestMatrix.ForServers(DeployerSelector.ServerType) .WithTfms(Tfm.NetCoreApp22) .WithAllApplicationTypes() .WithAncmV2InProcess(); @@ -136,7 +135,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests // Defaults to inprocess specific deployment parameters public static DeploymentParameters GetBaseDeploymentParameters(string site = "InProcessWebSite") { - return new DeploymentParameters(Helpers.GetTestWebSitePath(site), ServerType.IISExpress, RuntimeFlavor.CoreClr, RuntimeArchitecture.x64) + return new DeploymentParameters(Helpers.GetTestWebSitePath(site), DeployerSelector.ServerType, RuntimeFlavor.CoreClr, RuntimeArchitecture.x64) { TargetFramework = Tfm.NetCoreApp22, ApplicationType = ApplicationType.Portable, diff --git a/test/IISIntegration.FunctionalTests/Inprocess/TestServerTest.cs b/test/IISExpress.FunctionalTests/InProcess/TestServerTest.cs similarity index 95% rename from test/IISIntegration.FunctionalTests/Inprocess/TestServerTest.cs rename to test/IISExpress.FunctionalTests/InProcess/TestServerTest.cs index 4b4d3f25c8..a9a7b89fe7 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/TestServerTest.cs +++ b/test/IISExpress.FunctionalTests/InProcess/TestServerTest.cs @@ -2,7 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Threading.Tasks; -using IISIntegration.FunctionalTests.Utilities; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Testing.xunit; using Microsoft.Extensions.Logging.Testing; diff --git a/test/IISIntegration.FunctionalTests/Inprocess/WebSocketTests.cs b/test/IISExpress.FunctionalTests/InProcess/WebSocketTests.cs similarity index 100% rename from test/IISIntegration.FunctionalTests/Inprocess/WebSocketTests.cs rename to test/IISExpress.FunctionalTests/InProcess/WebSocketTests.cs diff --git a/test/IISIntegration.FunctionalTests/OutOfProcess/GlobalVersionTests.cs b/test/IISExpress.FunctionalTests/OutOfProcess/GlobalVersionTests.cs similarity index 97% rename from test/IISIntegration.FunctionalTests/OutOfProcess/GlobalVersionTests.cs rename to test/IISExpress.FunctionalTests/OutOfProcess/GlobalVersionTests.cs index 2bef2b3c16..3edfdafb22 100644 --- a/test/IISIntegration.FunctionalTests/OutOfProcess/GlobalVersionTests.cs +++ b/test/IISExpress.FunctionalTests/OutOfProcess/GlobalVersionTests.cs @@ -6,7 +6,7 @@ using System.IO; using System.Linq; using System.Threading.Tasks; using System.Xml.Linq; -using IISIntegration.FunctionalTests.Utilities; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; using Microsoft.AspNetCore.Server.IntegrationTesting; using Xunit; using Xunit.Abstractions; @@ -141,7 +141,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests private DeploymentParameters GetGlobalVersionBaseDeploymentParameters() { - return new DeploymentParameters(Helpers.GetOutOfProcessTestSitesPath(), ServerType.IISExpress, RuntimeFlavor.CoreClr, RuntimeArchitecture.x64) + return new DeploymentParameters(Helpers.GetOutOfProcessTestSitesPath(), DeployerSelector.ServerType, RuntimeFlavor.CoreClr, RuntimeArchitecture.x64) { TargetFramework = Tfm.NetCoreApp22, ApplicationType = ApplicationType.Portable, diff --git a/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs b/test/IISExpress.FunctionalTests/OutOfProcess/HttpsTest.cs similarity index 97% rename from test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs rename to test/IISExpress.FunctionalTests/OutOfProcess/HttpsTest.cs index 15f3c5f3b9..543481ee14 100644 --- a/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs +++ b/test/IISExpress.FunctionalTests/OutOfProcess/HttpsTest.cs @@ -4,7 +4,7 @@ using System.Net.Http; using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; -using IISIntegration.FunctionalTests.Utilities; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; using Microsoft.AspNetCore.Server.IntegrationTesting; using Microsoft.AspNetCore.Server.IntegrationTesting.Common; using Microsoft.AspNetCore.Testing.xunit; @@ -16,6 +16,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests // IIS Express preregisteres 44300-44399 ports with SSL bindings. // So these tests always have to use ports in this range, and we can't rely on OS-allocated ports without a whole lot of ceremony around // creating self-signed certificates and registering SSL bindings with HTTP.sys + // Test specific to IISExpress public class HttpsTest : IISFunctionalTestBase { public HttpsTest(ITestOutputHelper output) : base(output) @@ -23,7 +24,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests } public static TestMatrix TestVariants - => TestMatrix.ForServers(ServerType.IISExpress) + => TestMatrix.ForServers(DeployerSelector.ServerType) .WithTfms(Tfm.NetCoreApp22, Tfm.Net461) .WithAllAncmVersions(); diff --git a/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs b/test/IISExpress.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs similarity index 88% rename from test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs rename to test/IISExpress.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs index 39ae2fe0e3..9aab93a56f 100644 --- a/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs +++ b/test/IISExpress.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs @@ -4,7 +4,7 @@ using System.Net; using System.Net.Http; using System.Threading.Tasks; -using IISIntegration.FunctionalTests.Utilities; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; using Microsoft.AspNetCore.Server.IntegrationTesting; using Microsoft.AspNetCore.Testing.xunit; using Xunit; @@ -14,12 +14,16 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { public class NtlmAuthenticationTests : IISFunctionalTestBase { + // Test only runs on IISExpress today as our CI machines do not have + // Windows auth installed globally. + // TODO either enable windows auth on our CI or use containers to test this + // behavior public NtlmAuthenticationTests(ITestOutputHelper output) : base(output) { } public static TestMatrix TestVariants - => TestMatrix.ForServers(ServerType.IISExpress) + => TestMatrix.ForServers(DeployerSelector.ServerType) .WithTfms(Tfm.NetCoreApp22, Tfm.Net461) .WithAllAncmVersions(); @@ -31,6 +35,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { ApplicationPath = Helpers.GetOutOfProcessTestSitesPath(), ApplicationBaseUriHint = $"http://localhost:0/", + ServerConfigTemplateContent = GetWindowsAuthConfig() }; var result = await DeployAsync(deploymentParameters); diff --git a/test/IISExpress.FunctionalTests/OutOfProcess/WindowsAuthTests.cs b/test/IISExpress.FunctionalTests/OutOfProcess/WindowsAuthTests.cs new file mode 100644 index 0000000000..83d6a8e20a --- /dev/null +++ b/test/IISExpress.FunctionalTests/OutOfProcess/WindowsAuthTests.cs @@ -0,0 +1,45 @@ +// 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.IO; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; +using Microsoft.AspNetCore.Server.IntegrationTesting; +using Microsoft.AspNetCore.Testing.xunit; +using Xunit; +using Xunit.Abstractions; + +namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests +{ + public class WindowsAuthTests : IISFunctionalTestBase + { + public WindowsAuthTests(ITestOutputHelper output = null) : base(output) + { + } + + public static TestMatrix TestVariants + => TestMatrix.ForServers(DeployerSelector.ServerType) + .WithTfms(Tfm.NetCoreApp22, Tfm.Net461) + .WithAllApplicationTypes() + .WithAllAncmVersions(); + + [ConditionalTheory] + [MemberData(nameof(TestVariants))] + public async Task WindowsAuthTest(TestVariant variant) + { + var deploymentParameters = new DeploymentParameters(variant) + { + ApplicationPath = Helpers.GetOutOfProcessTestSitesPath(), + ServerConfigTemplateContent = GetWindowsAuthConfig() + }; + + // The default in hosting sets windows auth to true. + var deploymentResult = await DeployAsync(deploymentParameters); + + var response = await deploymentResult.HttpClient.GetAsync("/Auth"); + var responseText = await response.Content.ReadAsStringAsync(); + + Assert.True("backcompat;Windows".Equals(responseText) || "latest;Windows".Equals(responseText), "Auth"); + } + } +} diff --git a/test/IISExpress.FunctionalTests/SkipIISTestAttribute.cs b/test/IISExpress.FunctionalTests/SkipIISTestAttribute.cs new file mode 100644 index 0000000000..15bbb9c26c --- /dev/null +++ b/test/IISExpress.FunctionalTests/SkipIISTestAttribute.cs @@ -0,0 +1,17 @@ +// 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 RequiresIISAttribute : Attribute, ITestCondition + { + public bool IsMet => IISExpressAncmSchema.SupportsInProcessHosting; + + public string SkipReason => IISExpressAncmSchema.SkipReason; + } +} diff --git a/test/IISIntegration.FunctionalTests/UpgradeFeatureDetectionTests.cs b/test/IISExpress.FunctionalTests/UpgradeFeatureDetectionTests.cs similarity index 81% rename from test/IISIntegration.FunctionalTests/UpgradeFeatureDetectionTests.cs rename to test/IISExpress.FunctionalTests/UpgradeFeatureDetectionTests.cs index bc54543067..dc64262d00 100644 --- a/test/IISIntegration.FunctionalTests/UpgradeFeatureDetectionTests.cs +++ b/test/IISExpress.FunctionalTests/UpgradeFeatureDetectionTests.cs @@ -2,11 +2,11 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.IO; using System.Linq; using System.Threading.Tasks; -using IISIntegration.FunctionalTests.Utilities; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities; using Microsoft.AspNetCore.Server.IntegrationTesting; +using Microsoft.AspNetCore.Testing.xunit; using Xunit; using Xunit.Abstractions; @@ -20,17 +20,18 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests { } - [Fact] - public Task UpgradeFeatureDetectionDisabled_InProcess_IISExpress() + [ConditionalFact] + public Task UpgradeFeatureDetectionDisabled_InProcess() { + // fails due to not modifying the apphost.config file. return UpgradeFeatureDetectionDeployer( disableWebSocket: true, Helpers.GetInProcessTestSitesPath(), "Disabled", HostingModel.InProcess); } - [Fact] - public Task UpgradeFeatureDetectionEnabled_InProcess_IISExpress() + [ConditionalFact] + public Task UpgradeFeatureDetectionEnabled_InProcess() { return UpgradeFeatureDetectionDeployer( disableWebSocket: false, @@ -38,8 +39,8 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests _isWebsocketsSupported, HostingModel.InProcess); } - [Fact] - public Task UpgradeFeatureDetectionDisabled_OutOfProcess_IISExpress() + [ConditionalFact] + public Task UpgradeFeatureDetectionDisabled_OutOfProcess() { return UpgradeFeatureDetectionDeployer( disableWebSocket: true, @@ -47,8 +48,8 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests "Disabled", HostingModel.OutOfProcess); } - [Fact] - public Task UpgradeFeatureDetectionEnabled_OutOfProcess_IISExpress() + [ConditionalFact] + public Task UpgradeFeatureDetectionEnabled_OutOfProcess() { return UpgradeFeatureDetectionDeployer( disableWebSocket: false, @@ -58,17 +59,18 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests private async Task UpgradeFeatureDetectionDeployer(bool disableWebSocket, string sitePath, string expected, HostingModel hostingModel) { - var deploymentParameters = new DeploymentParameters(sitePath, ServerType.IISExpress, RuntimeFlavor.CoreClr, RuntimeArchitecture.x64) + var deploymentParameters = new DeploymentParameters(sitePath, DeployerSelector.ServerType, RuntimeFlavor.CoreClr, RuntimeArchitecture.x64) { TargetFramework = Tfm.NetCoreApp22, ApplicationType = ApplicationType.Portable, AncmVersion = AncmVersion.AspNetCoreModuleV2, HostingModel = hostingModel, - PublishApplicationBeforeDeployment = hostingModel == HostingModel.InProcess, + PublishApplicationBeforeDeployment = hostingModel == HostingModel.InProcess }; if (disableWebSocket) { + // For IIS, we need to modify the apphost.config file deploymentParameters.ServerConfigTemplateContent = GetServerConfig( element => element.Descendants("webSocket") .Single() diff --git a/test/IISIntegration.FunctionalTests/Inprocess/IISTests.cs b/test/IISIntegration.FunctionalTests/Inprocess/IISTests.cs deleted file mode 100644 index 040f03fcad..0000000000 --- a/test/IISIntegration.FunctionalTests/Inprocess/IISTests.cs +++ /dev/null @@ -1,40 +0,0 @@ -// 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.Threading.Tasks; -using Microsoft.AspNetCore.Server.IntegrationTesting; -using Microsoft.AspNetCore.Testing.xunit; -using Xunit; - -namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests -{ - [SkipIfIISCannotRun] - public class IISTests : FunctionalTestsBase - { - [ConditionalFact] - public Task HelloWorld_IIS_CoreClr_X64_Standalone() - { - return HelloWorld(RuntimeFlavor.CoreClr, ApplicationType.Standalone); - } - - [ConditionalFact] - public Task HelloWorld_IIS_CoreClr_X64_Portable() - { - return HelloWorld(RuntimeFlavor.CoreClr, ApplicationType.Portable); - } - - private async Task HelloWorld(RuntimeFlavor runtimeFlavor, ApplicationType applicationType) - { - var deploymentParameters = Helpers.GetBaseDeploymentParameters(); - deploymentParameters.ServerType = ServerType.IIS; - deploymentParameters.ApplicationType = applicationType; - - var deploymentResult = await DeployAsync(deploymentParameters); - - var response = await deploymentResult.RetryingHttpClient.GetAsync("HelloWorld"); - var responseText = await response.Content.ReadAsStringAsync(); - - Assert.Equal("Hello World", responseText); - } - } -} diff --git a/test/WebSites/InProcessWebSite/Startup.WebSockets.cs b/test/WebSites/InProcessWebSite/Startup.WebSockets.cs index f3fcdb3a1d..e83ae2a72f 100644 --- a/test/WebSites/InProcessWebSite/Startup.WebSockets.cs +++ b/test/WebSites/InProcessWebSite/Startup.WebSockets.cs @@ -8,7 +8,7 @@ using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks; -using IISIntegration.FunctionalTests; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; diff --git a/test/WebSites/OutOfProcessWebSite/Startup.cs b/test/WebSites/OutOfProcessWebSite/Startup.cs index fc7021c992..185aecb7f4 100644 --- a/test/WebSites/OutOfProcessWebSite/Startup.cs +++ b/test/WebSites/OutOfProcessWebSite/Startup.cs @@ -98,6 +98,7 @@ namespace TestSites } catch(UnauthorizedAccessException) { + // TODO calling delete on the file will succeed when running with IIS return context.Response.WriteAsync("Hello World"); } diff --git a/test/WebSites/StressTestWebSite/Startup.cs b/test/WebSites/StressTestWebSite/Startup.cs index 41eea8728c..68f6eb1f77 100644 --- a/test/WebSites/StressTestWebSite/Startup.cs +++ b/test/WebSites/StressTestWebSite/Startup.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; using System.Threading; using System.Text; using System.Net.WebSockets; -using IISIntegration.FunctionalTests; +using Microsoft.AspNetCore.Server.IIS.FunctionalTests; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; diff --git a/test/WebSites/shared/WebSockets/Constants.cs b/test/WebSites/shared/WebSockets/Constants.cs index 3a27d854f5..95b53003cc 100644 --- a/test/WebSites/shared/WebSockets/Constants.cs +++ b/test/WebSites/shared/WebSockets/Constants.cs @@ -1,7 +1,7 @@ // 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. -namespace IISIntegration.FunctionalTests +namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests { public static class Constants { diff --git a/test/WebSites/shared/WebSockets/HandshakeHelpers.cs b/test/WebSites/shared/WebSockets/HandshakeHelpers.cs index d477f9113b..b079ea3f85 100644 --- a/test/WebSites/shared/WebSockets/HandshakeHelpers.cs +++ b/test/WebSites/shared/WebSockets/HandshakeHelpers.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Security.Cryptography; using System.Text; -namespace IISIntegration.FunctionalTests +namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests { internal static class HandshakeHelpers {