From f1b125d69f29fc2fa3ff7b38add95a20a4b5e594 Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Fri, 21 Dec 2018 11:02:18 -0800 Subject: [PATCH] Restore IISIntegration Unit test project (#6068) --- src/Servers/IIS/IISIntegration.NoV1.sln | 130 +++--- .../IISIntegration.Tests/IISExtensionTests.cs | 33 ++ .../IISMiddlewareTests.cs | 420 ++++++++++++++++++ ...NetCore.Server.IISIntegration.Tests.csproj | 17 + 4 files changed, 524 insertions(+), 76 deletions(-) create mode 100644 src/Servers/IIS/test/IISIntegration.Tests/IISExtensionTests.cs create mode 100644 src/Servers/IIS/test/IISIntegration.Tests/IISMiddlewareTests.cs create mode 100644 src/Servers/IIS/test/IISIntegration.Tests/MIcrosoft.AspNetCore.Server.IISIntegration.Tests.csproj diff --git a/src/Servers/IIS/IISIntegration.NoV1.sln b/src/Servers/IIS/IISIntegration.NoV1.sln index 1200436098..43cbf1fc02 100644 --- a/src/Servers/IIS/IISIntegration.NoV1.sln +++ b/src/Servers/IIS/IISIntegration.NoV1.sln @@ -30,8 +30,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server {46A8612B-418B-4D70-B3A7-A21DD0627473} = {46A8612B-418B-4D70-B3A7-A21DD0627473} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration.Tests", "test\Microsoft.AspNetCore.Server.IISIntegration.Tests\Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj", "{4106DB10-E09F-480E-9CE6-B39235512EE6}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{7E80C58E-9CC8-450C-8A8D-94FC76428150}" ProjectSection(SolutionItems) = preProject build\applicationhost.config = build\applicationhost.config @@ -54,8 +52,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISExpress.FunctionalTests" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NativeIISSample", "samples\NativeIISSample\NativeIISSample.csproj", "{9BC4AFCB-325D-4C81-8228-8CF301CE2F97}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InProcessWebSite", "test\WebSites\InProcessWebSite\InProcessWebSite.csproj", "{679FA2A2-898B-4320-884E-C2D294A97CE1}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IIS", "src\Microsoft.AspNetCore.Server.IIS\Microsoft.AspNetCore.Server.IIS.csproj", "{46A8612B-418B-4D70-B3A7-A21DD0627473}" ProjectSection(ProjectDependencies) = postProject {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} = {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} @@ -64,11 +60,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server {D57EA297-6DC2-4BC0-8C91-334863327863} = {D57EA297-6DC2-4BC0-8C91-334863327863} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StressTestWebSite", "test\WebSites\StressTestWebSite\StressTestWebSite.csproj", "{13FD8F12-FFBE-4D01-B4AC-444F2994B04F}" - ProjectSection(ProjectDependencies) = postProject - {46A8612B-418B-4D70-B3A7-A21DD0627473} = {46A8612B-418B-4D70-B3A7-A21DD0627473} - EndProjectSection -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebSites", "WebSites", "{744ACDC6-F6A0-4FF9-9421-F25C5F2DC520}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLibTests", "test\CommonLibTests\CommonLibTests.vcxproj", "{1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}" @@ -81,8 +72,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLib", "src\AspNetCore EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IISLib", "src\AspNetCoreModuleV2\IISLib\IISLib.vcxproj", "{09D9D1D6-2951-4E14-BC35-76A23CF9391A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OutOfProcessWebSite", "test\WebSites\OutOfProcessWebSite\OutOfProcessWebSite.csproj", "{42E60F88-E23F-417A-8143-0CCEC05E1D02}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{622D35C9-627B-466E-8D15-752968CC79AF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.Performance", "benchmarks\IIS.Performance\IIS.Performance.csproj", "{48F46909-E76A-4788-BCE1-E543C0E140FE}" @@ -113,10 +102,16 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.BackwardsCompatibility. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.ForwardsCompatibility.FunctionalTests", "test\IIS.ForwardsCompatibility.FunctionalTests\IIS.ForwardsCompatibility.FunctionalTests.csproj", "{D1EA5D99-28FD-4197-81DE-17098846B38B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InProcessWebSite", "test\WebSites\InProcessForwardsCompatWebSite\InProcessWebSite.csproj", "{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestTasks", "test\testassets\TestTasks\TestTasks.csproj", "{2DD1269D-131C-4531-BB0D-7BE0EF8E56D0}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InProcessWebSite", "test\testassets\InProcessWebSite\InProcessWebSite.csproj", "{E685D546-FDCD-4A4C-9183-728C308A9A9E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OutOfProcessWebSite", "test\testassets\OutOfProcessWebSite\OutOfProcessWebSite.csproj", "{CFC23E23-7AD5-4D7D-9F3C-DBD241231E70}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StressTestWebSite", "test\testassets\StressTestWebSite\StressTestWebSite.csproj", "{7C0B25FC-DADA-489D-A3FB-F3D732FC8ECE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MIcrosoft.AspNetCore.Server.IISIntegration.Tests", "test\IISIntegration.Tests\MIcrosoft.AspNetCore.Server.IISIntegration.Tests.csproj", "{ACCF17D6-CEA0-4008-8F36-70085163CAE7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -151,18 +146,6 @@ Global {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x64.Build.0 = Release|Any CPU {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x86.ActiveCfg = Release|Any CPU {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x86.Build.0 = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x64.ActiveCfg = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x64.Build.0 = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x86.ActiveCfg = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x86.Build.0 = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|Any CPU.Build.0 = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x64.ActiveCfg = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x64.Build.0 = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x86.ActiveCfg = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x86.Build.0 = Release|Any CPU {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|Any CPU.Build.0 = Debug|Any CPU {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -187,18 +170,6 @@ Global {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|x64.Build.0 = Release|x64 {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|x86.ActiveCfg = Release|x86 {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|x86.Build.0 = Release|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|Any CPU.ActiveCfg = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|Any CPU.Build.0 = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|x64.ActiveCfg = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|x64.Build.0 = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|x86.ActiveCfg = Debug|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|x86.Build.0 = Debug|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|Any CPU.ActiveCfg = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|Any CPU.Build.0 = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|x64.ActiveCfg = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|x64.Build.0 = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|x86.ActiveCfg = Release|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|x86.Build.0 = Release|x86 {46A8612B-418B-4D70-B3A7-A21DD0627473}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {46A8612B-418B-4D70-B3A7-A21DD0627473}.Debug|Any CPU.Build.0 = Debug|Any CPU {46A8612B-418B-4D70-B3A7-A21DD0627473}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -211,18 +182,6 @@ Global {46A8612B-418B-4D70-B3A7-A21DD0627473}.Release|x64.Build.0 = Release|Any CPU {46A8612B-418B-4D70-B3A7-A21DD0627473}.Release|x86.ActiveCfg = Release|Any CPU {46A8612B-418B-4D70-B3A7-A21DD0627473}.Release|x86.Build.0 = Release|Any CPU - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|Any CPU.ActiveCfg = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|Any CPU.Build.0 = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|x64.ActiveCfg = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|x64.Build.0 = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|x86.ActiveCfg = Debug|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|x86.Build.0 = Debug|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|Any CPU.ActiveCfg = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|Any CPU.Build.0 = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|x64.ActiveCfg = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|x64.Build.0 = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|x86.ActiveCfg = Release|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|x86.Build.0 = Release|x86 {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|Any CPU.ActiveCfg = Debug|Win32 {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x64.ActiveCfg = Debug|x64 {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x64.Build.0 = Debug|x64 @@ -263,18 +222,6 @@ Global {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x64.Build.0 = Release|x64 {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x86.ActiveCfg = Release|Win32 {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x86.Build.0 = Release|Win32 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Debug|Any CPU.ActiveCfg = Debug|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Debug|Any CPU.Build.0 = Debug|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Debug|x64.ActiveCfg = Debug|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Debug|x64.Build.0 = Debug|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Debug|x86.ActiveCfg = Debug|x86 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Debug|x86.Build.0 = Debug|x86 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Release|Any CPU.ActiveCfg = Release|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Release|Any CPU.Build.0 = Release|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Release|x64.ActiveCfg = Release|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Release|x64.Build.0 = Release|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Release|x86.ActiveCfg = Release|x86 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Release|x86.Build.0 = Release|x86 {48F46909-E76A-4788-BCE1-E543C0E140FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {48F46909-E76A-4788-BCE1-E543C0E140FE}.Debug|Any CPU.Build.0 = Debug|Any CPU {48F46909-E76A-4788-BCE1-E543C0E140FE}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -399,16 +346,6 @@ Global {D1EA5D99-28FD-4197-81DE-17098846B38B}.Release|x64.Build.0 = Release|Any CPU {D1EA5D99-28FD-4197-81DE-17098846B38B}.Release|x86.ActiveCfg = Release|Any CPU {D1EA5D99-28FD-4197-81DE-17098846B38B}.Release|x86.Build.0 = Release|Any CPU - {BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Debug|Any CPU.ActiveCfg = Debug|x86 - {BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Debug|x64.ActiveCfg = Debug|x64 - {BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Debug|x64.Build.0 = Debug|x64 - {BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Debug|x86.ActiveCfg = Debug|x86 - {BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Debug|x86.Build.0 = Debug|x86 - {BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Release|Any CPU.ActiveCfg = Release|x86 - {BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Release|x64.ActiveCfg = Release|x64 - {BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Release|x64.Build.0 = Release|x64 - {BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Release|x86.ActiveCfg = Release|x86 - {BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Release|x86.Build.0 = Release|x86 {2DD1269D-131C-4531-BB0D-7BE0EF8E56D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2DD1269D-131C-4531-BB0D-7BE0EF8E56D0}.Debug|Any CPU.Build.0 = Debug|Any CPU {2DD1269D-131C-4531-BB0D-7BE0EF8E56D0}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -421,6 +358,48 @@ Global {2DD1269D-131C-4531-BB0D-7BE0EF8E56D0}.Release|x64.Build.0 = Release|Any CPU {2DD1269D-131C-4531-BB0D-7BE0EF8E56D0}.Release|x86.ActiveCfg = Release|Any CPU {2DD1269D-131C-4531-BB0D-7BE0EF8E56D0}.Release|x86.Build.0 = Release|Any CPU + {E685D546-FDCD-4A4C-9183-728C308A9A9E}.Debug|Any CPU.ActiveCfg = Debug|x86 + {E685D546-FDCD-4A4C-9183-728C308A9A9E}.Debug|x64.ActiveCfg = Debug|x64 + {E685D546-FDCD-4A4C-9183-728C308A9A9E}.Debug|x64.Build.0 = Debug|x64 + {E685D546-FDCD-4A4C-9183-728C308A9A9E}.Debug|x86.ActiveCfg = Debug|x86 + {E685D546-FDCD-4A4C-9183-728C308A9A9E}.Debug|x86.Build.0 = Debug|x86 + {E685D546-FDCD-4A4C-9183-728C308A9A9E}.Release|Any CPU.ActiveCfg = Release|x86 + {E685D546-FDCD-4A4C-9183-728C308A9A9E}.Release|x64.ActiveCfg = Release|x64 + {E685D546-FDCD-4A4C-9183-728C308A9A9E}.Release|x64.Build.0 = Release|x64 + {E685D546-FDCD-4A4C-9183-728C308A9A9E}.Release|x86.ActiveCfg = Release|x86 + {E685D546-FDCD-4A4C-9183-728C308A9A9E}.Release|x86.Build.0 = Release|x86 + {CFC23E23-7AD5-4D7D-9F3C-DBD241231E70}.Debug|Any CPU.ActiveCfg = Debug|x86 + {CFC23E23-7AD5-4D7D-9F3C-DBD241231E70}.Debug|x64.ActiveCfg = Debug|x64 + {CFC23E23-7AD5-4D7D-9F3C-DBD241231E70}.Debug|x64.Build.0 = Debug|x64 + {CFC23E23-7AD5-4D7D-9F3C-DBD241231E70}.Debug|x86.ActiveCfg = Debug|x86 + {CFC23E23-7AD5-4D7D-9F3C-DBD241231E70}.Debug|x86.Build.0 = Debug|x86 + {CFC23E23-7AD5-4D7D-9F3C-DBD241231E70}.Release|Any CPU.ActiveCfg = Release|x86 + {CFC23E23-7AD5-4D7D-9F3C-DBD241231E70}.Release|x64.ActiveCfg = Release|x64 + {CFC23E23-7AD5-4D7D-9F3C-DBD241231E70}.Release|x64.Build.0 = Release|x64 + {CFC23E23-7AD5-4D7D-9F3C-DBD241231E70}.Release|x86.ActiveCfg = Release|x86 + {CFC23E23-7AD5-4D7D-9F3C-DBD241231E70}.Release|x86.Build.0 = Release|x86 + {7C0B25FC-DADA-489D-A3FB-F3D732FC8ECE}.Debug|Any CPU.ActiveCfg = Debug|x86 + {7C0B25FC-DADA-489D-A3FB-F3D732FC8ECE}.Debug|x64.ActiveCfg = Debug|x64 + {7C0B25FC-DADA-489D-A3FB-F3D732FC8ECE}.Debug|x64.Build.0 = Debug|x64 + {7C0B25FC-DADA-489D-A3FB-F3D732FC8ECE}.Debug|x86.ActiveCfg = Debug|x86 + {7C0B25FC-DADA-489D-A3FB-F3D732FC8ECE}.Debug|x86.Build.0 = Debug|x86 + {7C0B25FC-DADA-489D-A3FB-F3D732FC8ECE}.Release|Any CPU.ActiveCfg = Release|x86 + {7C0B25FC-DADA-489D-A3FB-F3D732FC8ECE}.Release|x64.ActiveCfg = Release|x64 + {7C0B25FC-DADA-489D-A3FB-F3D732FC8ECE}.Release|x64.Build.0 = Release|x64 + {7C0B25FC-DADA-489D-A3FB-F3D732FC8ECE}.Release|x86.ActiveCfg = Release|x86 + {7C0B25FC-DADA-489D-A3FB-F3D732FC8ECE}.Release|x86.Build.0 = Release|x86 + {ACCF17D6-CEA0-4008-8F36-70085163CAE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ACCF17D6-CEA0-4008-8F36-70085163CAE7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ACCF17D6-CEA0-4008-8F36-70085163CAE7}.Debug|x64.ActiveCfg = Debug|Any CPU + {ACCF17D6-CEA0-4008-8F36-70085163CAE7}.Debug|x64.Build.0 = Debug|Any CPU + {ACCF17D6-CEA0-4008-8F36-70085163CAE7}.Debug|x86.ActiveCfg = Debug|Any CPU + {ACCF17D6-CEA0-4008-8F36-70085163CAE7}.Debug|x86.Build.0 = Debug|Any CPU + {ACCF17D6-CEA0-4008-8F36-70085163CAE7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ACCF17D6-CEA0-4008-8F36-70085163CAE7}.Release|Any CPU.Build.0 = Release|Any CPU + {ACCF17D6-CEA0-4008-8F36-70085163CAE7}.Release|x64.ActiveCfg = Release|Any CPU + {ACCF17D6-CEA0-4008-8F36-70085163CAE7}.Release|x64.Build.0 = Release|Any CPU + {ACCF17D6-CEA0-4008-8F36-70085163CAE7}.Release|x86.ActiveCfg = Release|Any CPU + {ACCF17D6-CEA0-4008-8F36-70085163CAE7}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -428,19 +407,15 @@ Global GlobalSection(NestedProjects) = preSolution {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64} = {C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9} {8B3446E8-E6A8-4591-AA63-A95837C6E97C} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} - {4106DB10-E09F-480E-9CE6-B39235512EE6} = {EF30B533-D715-421A-92B7-92FEF460AC9C} {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA} = {EF30B533-D715-421A-92B7-92FEF460AC9C} {9BC4AFCB-325D-4C81-8228-8CF301CE2F97} = {C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9} - {679FA2A2-898B-4320-884E-C2D294A97CE1} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} {46A8612B-418B-4D70-B3A7-A21DD0627473} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} = {EF30B533-D715-421A-92B7-92FEF460AC9C} {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1} = {EF30B533-D715-421A-92B7-92FEF460AC9C} {06CA2C2B-83B0-4D83-905A-E0C74790009E} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} {55494E58-E061-4C4C-A0A8-837008E72F85} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} {09D9D1D6-2951-4E14-BC35-76A23CF9391A} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} - {42E60F88-E23F-417A-8143-0CCEC05E1D02} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} {48F46909-E76A-4788-BCE1-E543C0E140FE} = {622D35C9-627B-466E-8D15-752968CC79AF} {D57EA297-6DC2-4BC0-8C91-334863327863} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} {7F87406C-A3C8-4139-A68D-E4C344294A67} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} @@ -452,8 +427,11 @@ Global {D17B7B35-5361-4A50-B499-E03E5C3CC095} = {EF30B533-D715-421A-92B7-92FEF460AC9C} {582B07BC-73F4-4689-8557-B039298BD82C} = {EF30B533-D715-421A-92B7-92FEF460AC9C} {D1EA5D99-28FD-4197-81DE-17098846B38B} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {BBBC85B2-5D7A-4D09-90B1-8DBCC9059493} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} {2DD1269D-131C-4531-BB0D-7BE0EF8E56D0} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + {E685D546-FDCD-4A4C-9183-728C308A9A9E} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} + {CFC23E23-7AD5-4D7D-9F3C-DBD241231E70} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} + {7C0B25FC-DADA-489D-A3FB-F3D732FC8ECE} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} + {ACCF17D6-CEA0-4008-8F36-70085163CAE7} = {EF30B533-D715-421A-92B7-92FEF460AC9C} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DB4F868D-E1AE-4FD7-9333-69FA15B268C5} diff --git a/src/Servers/IIS/test/IISIntegration.Tests/IISExtensionTests.cs b/src/Servers/IIS/test/IISIntegration.Tests/IISExtensionTests.cs new file mode 100644 index 0000000000..deae44471d --- /dev/null +++ b/src/Servers/IIS/test/IISIntegration.Tests/IISExtensionTests.cs @@ -0,0 +1,33 @@ +// 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.Linq; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +namespace Microsoft.AspNetCore.Server.IISIntegration +{ + public class IISExtensionTests + { + [Fact] + public void CallingUseIISIntegrationMultipleTimesWorks() + { + + var builder = new WebHostBuilder() + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .UseIISIntegration() + .Configure(app => { }); + var server = new TestServer(builder); + + var filters = server.Host.Services.GetServices() + .OfType(); + + Assert.Single(filters); + } + } +} \ No newline at end of file diff --git a/src/Servers/IIS/test/IISIntegration.Tests/IISMiddlewareTests.cs b/src/Servers/IIS/test/IISIntegration.Tests/IISMiddlewareTests.cs new file mode 100644 index 0000000000..c5ef78b911 --- /dev/null +++ b/src/Servers/IIS/test/IISIntegration.Tests/IISMiddlewareTests.cs @@ -0,0 +1,420 @@ +// 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.Net; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http.Features.Authentication; +using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +namespace Microsoft.AspNetCore.Server.IISIntegration +{ + public class IISMiddlewareTests + { + [Fact] + public async Task MiddlewareSkippedIfTokenIsMissing() + { + var assertsExecuted = false; + + var builder = new WebHostBuilder() + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => + { + var auth = context.Features.Get(); + Assert.Null(auth); + assertsExecuted = true; + return Task.FromResult(0); + }); + }); + var server = new TestServer(builder); + + var req = new HttpRequestMessage(HttpMethod.Get, ""); + req.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); + var response = await server.CreateClient().SendAsync(req); + Assert.True(assertsExecuted); + response.EnsureSuccessStatusCode(); + } + + [Fact] + public async Task MiddlewareRejectsRequestIfTokenHeaderIsMissing() + { + var assertsExecuted = false; + + var builder = new WebHostBuilder() + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => + { + var auth = context.Features.Get(); + Assert.Null(auth); + assertsExecuted = true; + return Task.FromResult(0); + }); + }); + var server = new TestServer(builder); + + var req = new HttpRequestMessage(HttpMethod.Get, ""); + var response = await server.CreateClient().SendAsync(req); + Assert.False(assertsExecuted); + Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); + } + + [Theory] + [InlineData("/", "/iisintegration", "shutdown")] + [InlineData("/", "/iisintegration", "Shutdown")] + [InlineData("/pathBase", "/pathBase/iisintegration", "shutdown")] + [InlineData("/pathBase", "/pathBase/iisintegration", "Shutdown")] + public async Task MiddlewareShutsdownGivenANCMShutdown(string pathBase, string requestPath, string shutdownEvent) + { + var requestExecuted = new ManualResetEvent(false); + var applicationStoppingFired = new ManualResetEvent(false); + var builder = new WebHostBuilder() + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", pathBase) + .UseIISIntegration() + .Configure(app => + { + var appLifetime = app.ApplicationServices.GetRequiredService(); + appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.Set()); + + app.Run(context => + { + requestExecuted.Set(); + return Task.FromResult(0); + }); + }); + var server = new TestServer(builder); + + var request = new HttpRequestMessage(HttpMethod.Post, requestPath); + request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); + request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-EVENT", shutdownEvent); + var response = await server.CreateClient().SendAsync(request); + + Assert.True(applicationStoppingFired.WaitOne(TimeSpan.FromSeconds(5))); + Assert.False(requestExecuted.WaitOne(0)); + Assert.Equal(HttpStatusCode.Accepted, response.StatusCode); + } + + public static TheoryData InvalidShutdownMethods + { + get + { + return new TheoryData + { + HttpMethod.Put, + HttpMethod.Trace, + HttpMethod.Head, + HttpMethod.Get, + HttpMethod.Delete, + HttpMethod.Options + }; + } + } + + [Theory] + [MemberData(nameof(InvalidShutdownMethods))] + public async Task MiddlewareIgnoresShutdownGivenWrongMethod(HttpMethod method) + { + var requestExecuted = new ManualResetEvent(false); + var applicationStoppingFired = new ManualResetEvent(false); + var builder = new WebHostBuilder() + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + var appLifetime = app.ApplicationServices.GetRequiredService(); + appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.Set()); + + app.Run(context => + { + requestExecuted.Set(); + return Task.FromResult(0); + }); + }); + var server = new TestServer(builder); + + var request = new HttpRequestMessage(method, "/iisintegration"); + request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); + request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-EVENT", "shutdown"); + var response = await server.CreateClient().SendAsync(request); + + Assert.False(applicationStoppingFired.WaitOne(TimeSpan.FromSeconds(1))); + Assert.True(requestExecuted.WaitOne(0)); + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + } + + [Theory] + [InlineData("/")] + [InlineData("/path")] + [InlineData("/path/iisintegration")] + public async Task MiddlewareIgnoresShutdownGivenWrongPath(string path) + { + var requestExecuted = new ManualResetEvent(false); + var applicationStoppingFired = new ManualResetEvent(false); + var builder = new WebHostBuilder() + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + var appLifetime = app.ApplicationServices.GetRequiredService(); + appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.Set()); + + app.Run(context => + { + requestExecuted.Set(); + return Task.FromResult(0); + }); + }); + var server = new TestServer(builder); + + var request = new HttpRequestMessage(HttpMethod.Post, path); + request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); + request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-EVENT", "shutdown"); + var response = await server.CreateClient().SendAsync(request); + + Assert.False(applicationStoppingFired.WaitOne(TimeSpan.FromSeconds(1))); + Assert.True(requestExecuted.WaitOne(0)); + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + } + + [Theory] + [InlineData("event")] + [InlineData("")] + [InlineData(null)] + public async Task MiddlewareIgnoresShutdownGivenWrongEvent(string shutdownEvent) + { + var requestExecuted = new ManualResetEvent(false); + var applicationStoppingFired = new ManualResetEvent(false); + var builder = new WebHostBuilder() + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + var appLifetime = app.ApplicationServices.GetRequiredService(); + appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.Set()); + + app.Run(context => + { + requestExecuted.Set(); + return Task.FromResult(0); + }); + }); + var server = new TestServer(builder); + + var request = new HttpRequestMessage(HttpMethod.Post, "/iisintegration"); + request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); + request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-EVENT", shutdownEvent); + var response = await server.CreateClient().SendAsync(request); + + Assert.False(applicationStoppingFired.WaitOne(TimeSpan.FromSeconds(1))); + Assert.True(requestExecuted.WaitOne(0)); + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + } + + [Fact] + public void UrlDelayRegisteredAndPreferHostingUrlsSet() + { + var builder = new WebHostBuilder() + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => Task.FromResult(0)); + }); + + Assert.Null(builder.GetSetting(WebHostDefaults.ServerUrlsKey)); + Assert.Null(builder.GetSetting(WebHostDefaults.PreferHostingUrlsKey)); + + // Adds a server and calls Build() + var server = new TestServer(builder); + + Assert.Equal("http://127.0.0.1:12345", builder.GetSetting(WebHostDefaults.ServerUrlsKey)); + Assert.Equal("true", builder.GetSetting(WebHostDefaults.PreferHostingUrlsKey)); + } + + [Fact] + public void PathBaseHiddenFromServer() + { + var builder = new WebHostBuilder() + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/pathBase") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => Task.FromResult(0)); + }); + new TestServer(builder); + + Assert.Equal("http://127.0.0.1:12345", builder.GetSetting(WebHostDefaults.ServerUrlsKey)); + } + + [Fact] + public async Task AddsUsePathBaseMiddlewareWhenPathBaseSpecified() + { + var requestPathBase = string.Empty; + var requestPath = string.Empty; + var builder = new WebHostBuilder() + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/pathbase") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => + { + requestPathBase = context.Request.PathBase.Value; + requestPath = context.Request.Path.Value; + return Task.FromResult(0); + }); + }); + var server = new TestServer(builder); + + var request = new HttpRequestMessage(HttpMethod.Get, "/PathBase/Path"); + request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); + var response = await server.CreateClient().SendAsync(request); + + Assert.Equal("/PathBase", requestPathBase); + Assert.Equal("/Path", requestPath); + } + + [Fact] + public async Task AddsAuthenticationHandlerByDefault() + { + var assertsExecuted = false; + + var builder = new WebHostBuilder() + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(async context => + { + var auth = context.RequestServices.GetRequiredService(); + var windows = await auth.GetSchemeAsync(IISDefaults.AuthenticationScheme); + Assert.NotNull(windows); + Assert.Null(windows.DisplayName); + Assert.Equal("Microsoft.AspNetCore.Server.IISIntegration.AuthenticationHandler", windows.HandlerType.FullName); + assertsExecuted = true; + }); + }); + var server = new TestServer(builder); + + var req = new HttpRequestMessage(HttpMethod.Get, ""); + req.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); + await server.CreateClient().SendAsync(req); + + Assert.True(assertsExecuted); + } + + [Theory] + [InlineData(true)] + [InlineData(false)] + public async Task OnlyAddAuthenticationHandlerIfForwardWindowsAuthentication(bool forward) + { + var assertsExecuted = false; + + var builder = new WebHostBuilder() + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .ConfigureServices(services => + { + services.Configure(options => + { + options.ForwardWindowsAuthentication = forward; + }); + }) + .Configure(app => + { + app.Run(async context => + { + var auth = context.RequestServices.GetService(); + Assert.NotNull(auth); + var windowsAuth = await auth.GetSchemeAsync(IISDefaults.AuthenticationScheme); + if (forward) + { + Assert.NotNull(windowsAuth); + Assert.Null(windowsAuth.DisplayName); + Assert.Equal("AuthenticationHandler", windowsAuth.HandlerType.Name); + } + else + { + Assert.Null(windowsAuth); + } + assertsExecuted = true; + }); + }); + var server = new TestServer(builder); + + var req = new HttpRequestMessage(HttpMethod.Get, ""); + req.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); + await server.CreateClient().SendAsync(req); + + Assert.True(assertsExecuted); + } + + [Theory] + [InlineData(true)] + [InlineData(false)] + public async Task DoesNotBlowUpWithoutAuth(bool forward) + { + var assertsExecuted = false; + + var builder = new WebHostBuilder() + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .ConfigureServices(services => + { + services.Configure(options => + { + options.ForwardWindowsAuthentication = forward; + }); + }) + .Configure(app => + { + app.Run(context => + { + assertsExecuted = true; + return Task.FromResult(0); + }); + }); + var server = new TestServer(builder); + + var req = new HttpRequestMessage(HttpMethod.Get, ""); + req.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); + await server.CreateClient().SendAsync(req); + + Assert.True(assertsExecuted); + } + } +} \ No newline at end of file diff --git a/src/Servers/IIS/test/IISIntegration.Tests/MIcrosoft.AspNetCore.Server.IISIntegration.Tests.csproj b/src/Servers/IIS/test/IISIntegration.Tests/MIcrosoft.AspNetCore.Server.IISIntegration.Tests.csproj new file mode 100644 index 0000000000..85d670991c --- /dev/null +++ b/src/Servers/IIS/test/IISIntegration.Tests/MIcrosoft.AspNetCore.Server.IISIntegration.Tests.csproj @@ -0,0 +1,17 @@ + + + + + $(StandardTestTfms) + + + + + + + + + + + + \ No newline at end of file