From 875af32219221b09332942988275692cab88da4f Mon Sep 17 00:00:00 2001 From: Ryan Brandenburg Date: Mon, 16 Apr 2018 16:58:11 -0700 Subject: [PATCH 01/44] Update version number to 2.2.0 --- version.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.props b/version.props index 24f2b00a0a..44985cedb3 100644 --- a/version.props +++ b/version.props @@ -1,7 +1,7 @@ - 2.1.0 - preview3 + 2.2.0 + preview1 $(VersionPrefix) $(VersionPrefix)-$(VersionSuffix)-final t000 From b003ed4266cb6d99b23d0efbe7d891332cc05ae3 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Mon, 23 Apr 2018 12:10:02 -0700 Subject: [PATCH 02/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 20 ++++++++++---------- korebuild-lock.txt | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 6dcbd42125..76944967f2 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,19 +3,19 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.1.0-rc1-15774 - 2.1.0-rc1-30613 - 2.1.0-rc1-30613 - 2.1.0-rc1-30613 - 2.1.0-rc1-30613 + 2.2.0-preview1-17037 + 2.2.0-preview1-34029 + 2.2.0-preview1-34029 + 2.2.0-preview1-34029 + 2.2.0-preview1-34029 2.0.0 - 2.1.0-rc1-26419-02 - 2.1.0-rc1-30613 + 2.1.0-preview3-26413-05 + 2.2.0-preview1-34029 15.6.1 - 4.5.0-rc1-26419-03 + 4.5.0-preview3-26413-02 2.0.1 - 4.5.0-rc1-26419-03 - 4.5.0-rc1-26419-03 + 4.5.0-preview3-26413-02 + 4.5.0-preview3-26413-02 2.3.1 2.4.0-beta.1.build3945 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index b419d767b9..f27a67b442 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.1.0-preview3-17018 -commithash:af264ca131f212b5ba8aafbc5110fc0fc510a2be +version:2.2.0-preview1-17037 +commithash:557055a86cbdc359c97d4fb1c2d23a3dc7ae731e From e4e1e7b7e7dea0c8d44f44507c50d3fa57daf1fc Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 29 Apr 2018 12:17:32 -0700 Subject: [PATCH 03/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 22 +++++++++++----------- korebuild-lock.txt | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 76944967f2..df4c57050d 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,19 +3,19 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-17037 - 2.2.0-preview1-34029 - 2.2.0-preview1-34029 - 2.2.0-preview1-34029 - 2.2.0-preview1-34029 + 2.2.0-preview1-17042 + 2.2.0-preview1-34066 + 2.2.0-preview1-34066 + 2.2.0-preview1-34066 + 2.2.0-preview1-34066 2.0.0 - 2.1.0-preview3-26413-05 - 2.2.0-preview1-34029 + 2.2.0-preview1-26424-04 + 2.2.0-preview1-34066 15.6.1 - 4.5.0-preview3-26413-02 - 2.0.1 - 4.5.0-preview3-26413-02 - 4.5.0-preview3-26413-02 + 4.5.0-preview3-26423-04 + 2.0.3 + 4.5.0-preview3-26423-04 + 4.5.0-preview3-26423-04 2.3.1 2.4.0-beta.1.build3945 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index f27a67b442..335e579e06 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17037 -commithash:557055a86cbdc359c97d4fb1c2d23a3dc7ae731e +version:2.2.0-preview1-17042 +commithash:edf0705d014293c260de763543784330514db9a3 From 4a8691f6c2c7158fe2e3154e305c36c21350a77a Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 6 May 2018 12:16:47 -0700 Subject: [PATCH 04/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 12 ++++++------ korebuild-lock.txt | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index df4c57050d..f8a2344c20 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,14 +3,14 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-17042 - 2.2.0-preview1-34066 - 2.2.0-preview1-34066 - 2.2.0-preview1-34066 - 2.2.0-preview1-34066 + 2.2.0-preview1-17047 + 2.2.0-preview1-34135 + 2.2.0-preview1-34135 + 2.2.0-preview1-34135 + 2.2.0-preview1-34135 2.0.0 2.2.0-preview1-26424-04 - 2.2.0-preview1-34066 + 2.2.0-preview1-34135 15.6.1 4.5.0-preview3-26423-04 2.0.3 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 335e579e06..a16d4b9ee4 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17042 -commithash:edf0705d014293c260de763543784330514db9a3 +version:2.2.0-preview1-17047 +commithash:e1957b52ddc8b62bd39c5c400322fccb5364624c From 2637118fc6dac05bc8d62fd0e21210d47f31da2c Mon Sep 17 00:00:00 2001 From: Ryan Brandenburg Date: Mon, 7 May 2018 15:11:43 -0700 Subject: [PATCH 05/44] Upgrade to netcoreapp22 --- Directory.Build.targets | 5 ++++- build/dependencies.props | 15 ++++++++------- build/repo.props | 3 ++- korebuild-lock.txt | 4 ++-- samples/HotAddSample/HotAddSample.csproj | 4 ++-- samples/SelfHostServer/SelfHostServer.csproj | 4 ++-- test/Directory.Build.props | 4 ++-- .../Listener/ResponseBodyTests.cs | 6 +++--- .../Listener/ResponseHeaderTests.cs | 4 ++-- .../Listener/ResponseSendFileTests.cs | 6 +++--- .../Listener/ServerTests.cs | 2 +- .../ResponseHeaderTests.cs | 4 ++-- 12 files changed, 33 insertions(+), 28 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 53b3f6e1da..78626b773e 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,7 +1,10 @@ - + $(MicrosoftNETCoreApp20PackageVersion) $(MicrosoftNETCoreApp21PackageVersion) + $(MicrosoftNETCoreApp22PackageVersion) $(NETStandardLibrary20PackageVersion) + + 99.9 diff --git a/build/dependencies.props b/build/dependencies.props index f8a2344c20..137363f3b6 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -1,16 +1,17 @@ - + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-17047 - 2.2.0-preview1-34135 - 2.2.0-preview1-34135 - 2.2.0-preview1-34135 - 2.2.0-preview1-34135 + 2.2.0-preview1-17048 + 2.2.0-preview1-34140 + 2.2.0-preview1-34140 + 2.2.0-preview1-34140 + 2.2.0-preview1-34140 2.0.0 2.2.0-preview1-26424-04 - 2.2.0-preview1-34135 + 2.2.0-preview1-26502-01 + 2.2.0-preview1-34140 15.6.1 4.5.0-preview3-26423-04 2.0.3 diff --git a/build/repo.props b/build/repo.props index 78b0ce5879..17a98ac7e7 100644 --- a/build/repo.props +++ b/build/repo.props @@ -1,4 +1,4 @@ - + @@ -10,5 +10,6 @@ + diff --git a/korebuild-lock.txt b/korebuild-lock.txt index a16d4b9ee4..2573a03995 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17047 -commithash:e1957b52ddc8b62bd39c5c400322fccb5364624c +version:2.2.0-preview1-17048 +commithash:de14a0ee5fb48508ee8a29c14280a2928f8dabf8 diff --git a/samples/HotAddSample/HotAddSample.csproj b/samples/HotAddSample/HotAddSample.csproj index caf6da74fe..9f198cb72c 100644 --- a/samples/HotAddSample/HotAddSample.csproj +++ b/samples/HotAddSample/HotAddSample.csproj @@ -1,7 +1,7 @@ - + - netcoreapp2.1;net461 + netcoreapp2.2;net461 Exe true diff --git a/samples/SelfHostServer/SelfHostServer.csproj b/samples/SelfHostServer/SelfHostServer.csproj index caf6da74fe..9f198cb72c 100644 --- a/samples/SelfHostServer/SelfHostServer.csproj +++ b/samples/SelfHostServer/SelfHostServer.csproj @@ -1,7 +1,7 @@ - + - netcoreapp2.1;net461 + netcoreapp2.2;net461 Exe true diff --git a/test/Directory.Build.props b/test/Directory.Build.props index 036af693c5..2a5bdfba94 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -2,9 +2,9 @@ - netcoreapp2.1 + netcoreapp2.2 $(DeveloperBuildTestTfms) - $(StandardTestTfms);netcoreapp2.0 + $(StandardTestTfms) $(StandardTestTfms);net461 diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs index 0c91833773..fd5fce6b00 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs @@ -168,7 +168,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener context = await server.AcceptAsync(Utilities.DefaultTimeout); context.Response.Headers["Content-lenGth"] = " 20 "; context.Dispose(); -#elif NETCOREAPP2_0 || NETCOREAPP2_1 +#elif NETCOREAPP2_2 #else #error Target framework needs to be updated #endif @@ -330,7 +330,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener writeTask = context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); Assert.True(writeTask.IsCanceled); context.Dispose(); -#elif NETCOREAPP2_0 || NETCOREAPP2_1 +#elif NETCOREAPP2_2 #else #error Target framework needs to be updated #endif @@ -362,7 +362,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener writeTask = context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); Assert.True(writeTask.IsCanceled); context.Dispose(); -#elif NETCOREAPP2_0 || NETCOREAPP2_1 +#elif NETCOREAPP2_2 #else #error Target framework needs to be updated #endif diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs index 727dd69ec6..a9b0380ef5 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs @@ -252,7 +252,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener Assert.Equal(0, response.ContentLength); Assert.NotNull(response.Headers["Date"]); Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); -#if NETCOREAPP2_0 || NETCOREAPP2_1 // WebHeaderCollection.GetValues() not available in CoreCLR. +#if NETCOREAPP2_2 // WebHeaderCollection.GetValues() not available in CoreCLR. Assert.Equal("custom1, and custom2, custom3", response.Headers["WWW-Authenticate"]); #elif NET461 Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("WWW-Authenticate")); @@ -283,7 +283,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener Assert.Equal(0, response.ContentLength); Assert.NotNull(response.Headers["Date"]); Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); -#if NETCOREAPP2_0 || NETCOREAPP2_1 // WebHeaderCollection.GetValues() not available in CoreCLR. +#if NETCOREAPP2_2 // WebHeaderCollection.GetValues() not available in CoreCLR. Assert.Equal("custom1, and custom2, custom3", response.Headers["Custom-Header1"]); #elif NET461 Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("Custom-Header1")); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs index 990af071e7..c19f1fe9c3 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -371,7 +371,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener writeTask = context.Response.SendFileAsync(AbsoluteFilePath, 0, null, cts.Token); Assert.True(writeTask.IsCanceled); context.Dispose(); -#elif NETCOREAPP2_0 || NETCOREAPP2_1 +#elif NETCOREAPP2_2 #else #error Target framework needs to be updated #endif @@ -403,7 +403,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener writeTask = context.Response.SendFileAsync(AbsoluteFilePath, 0, null, cts.Token); Assert.True(writeTask.IsCanceled); context.Dispose(); -#elif NETCOREAPP2_0 || NETCOREAPP2_1 +#elif NETCOREAPP2_2 #else #error Target framework needs to be updated #endif diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs index e70e3de1ac..8384461a38 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs @@ -188,7 +188,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener // HttpClient re-tries the request because it doesn't know if the request was received. context = await server.AcceptAsync(Utilities.DefaultTimeout); context.Abort(); -#elif NETCOREAPP2_0 || NETCOREAPP2_1 +#elif NETCOREAPP2_2 #else #error Target framework needs to be updated #endif diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs index ec93832e18..ca399249f1 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs @@ -81,7 +81,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.Equal(0, response.ContentLength); Assert.NotNull(response.Headers["Date"]); Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); -#if NETCOREAPP2_0 || NETCOREAPP2_1 // WebHeaderCollection.GetValues() not available in CoreCLR. +#if NETCOREAPP2_2 // WebHeaderCollection.GetValues() not available in CoreCLR. Assert.Equal("custom1, and custom2, custom3", response.Headers["WWW-Authenticate"]); #elif NET461 Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("WWW-Authenticate")); @@ -111,7 +111,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.Equal(0, response.ContentLength); Assert.NotNull(response.Headers["Date"]); Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); -#if NETCOREAPP2_0 || NETCOREAPP2_1 // WebHeaderCollection.GetValues() not available in CoreCLR. +#if NETCOREAPP2_2 // WebHeaderCollection.GetValues() not available in CoreCLR. Assert.Equal("custom1, and custom2, custom3", response.Headers["Custom-Header1"]); #elif NET461 Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("Custom-Header1")); From b9114ae40a83715006662d67a9f6dcbfcb1e857e Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 13 May 2018 14:09:54 -0700 Subject: [PATCH 06/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 24 ++++++++++++------------ korebuild-lock.txt | 4 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 137363f3b6..806b45e1b0 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -1,22 +1,22 @@ - + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-17048 - 2.2.0-preview1-34140 - 2.2.0-preview1-34140 - 2.2.0-preview1-34140 - 2.2.0-preview1-34140 + 2.2.0-preview1-17051 + 2.2.0-preview1-34184 + 2.2.0-preview1-34184 + 2.2.0-preview1-34184 + 2.2.0-preview1-34184 2.0.0 - 2.2.0-preview1-26424-04 - 2.2.0-preview1-26502-01 - 2.2.0-preview1-34140 + 2.1.0-rc1 + 2.2.0-preview1-26509-06 + 2.2.0-preview1-34184 15.6.1 - 4.5.0-preview3-26423-04 + 4.6.0-preview1-26508-04 2.0.3 - 4.5.0-preview3-26423-04 - 4.5.0-preview3-26423-04 + 4.6.0-preview1-26508-04 + 4.6.0-preview1-26508-04 2.3.1 2.4.0-beta.1.build3945 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 2573a03995..89629b454c 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17048 -commithash:de14a0ee5fb48508ee8a29c14280a2928f8dabf8 +version:2.2.0-preview1-17051 +commithash:253c3a480063bc3abaa5cde42f6e27b58457ef9b From 922b1ea8a3d8f04ed63cec954695a4ed46c1950b Mon Sep 17 00:00:00 2001 From: "Chris Ross (ASP.NET)" Date: Wed, 16 May 2018 14:59:58 -0700 Subject: [PATCH 07/44] Remove obsolete #if's --- .../AuthenticationTests.cs | 10 ++++------ .../Listener/AuthenticationTests.cs | 5 ++--- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs index 06bc6f2c32..f533303309 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs @@ -40,8 +40,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.Empty(response.Headers.WwwAuthenticate); } } -#if !NETCOREAPP2_0 - // https://github.com/aspnet/ServerTests/issues/82 + [ConditionalTheory] [InlineData(AuthenticationSchemes.Negotiate)] [InlineData(AuthenticationSchemes.NTLM)] @@ -107,7 +106,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.Equal("Negotiate, NTLM, basic", response.Headers.WwwAuthenticate.ToString(), StringComparer.OrdinalIgnoreCase); } } -#endif + [ConditionalTheory] [InlineData(AuthenticationSchemes.Negotiate)] [InlineData(AuthenticationSchemes.NTLM)] @@ -238,8 +237,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.Equal(HttpStatusCode.OK, response.StatusCode); } } -#if !NETCOREAPP2_0 - // https://github.com/aspnet/ServerTests/issues/82 + [ConditionalTheory] [InlineData(AuthenticationSchemes.Negotiate)] [InlineData(AuthenticationSchemes.NTLM)] @@ -329,7 +327,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.Equal(authTypeList.Count(), response.Headers.WwwAuthenticate.Count); } } -#endif + [ConditionalFact] public async Task AuthTypes_Forbid_Forbidden() { diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/AuthenticationTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/AuthenticationTests.cs index db32323bdf..404bcdd7c8 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/AuthenticationTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/AuthenticationTests.cs @@ -40,8 +40,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener Assert.Empty(response.Headers.WwwAuthenticate); } } -#if !NETCOREAPP2_0 - // https://github.com/aspnet/ServerTests/issues/82 + [ConditionalTheory] [InlineData(AuthenticationSchemes.Negotiate)] [InlineData(AuthenticationSchemes.NTLM)] @@ -111,7 +110,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener Assert.Equal("Negotiate, NTLM, basic", response.Headers.WwwAuthenticate.ToString(), StringComparer.OrdinalIgnoreCase); } } -#endif + [ConditionalTheory] [InlineData(AuthenticationSchemes.Negotiate)] [InlineData(AuthenticationSchemes.NTLM)] From b51d28d4f40ac5039746c759bba8fa537496ab72 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 20 May 2018 19:33:05 +0000 Subject: [PATCH 08/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 12 ++++++------ korebuild-lock.txt | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 806b45e1b0..5264626424 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,15 +3,15 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-17051 - 2.2.0-preview1-34184 - 2.2.0-preview1-34184 - 2.2.0-preview1-34184 - 2.2.0-preview1-34184 + 2.2.0-preview1-17060 + 2.2.0-preview1-34255 + 2.2.0-preview1-34255 + 2.2.0-preview1-34255 + 2.2.0-preview1-34255 2.0.0 2.1.0-rc1 2.2.0-preview1-26509-06 - 2.2.0-preview1-34184 + 2.2.0-preview1-34255 15.6.1 4.6.0-preview1-26508-04 2.0.3 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 89629b454c..cf2fff7def 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17051 -commithash:253c3a480063bc3abaa5cde42f6e27b58457ef9b +version:2.2.0-preview1-17060 +commithash:25b4b134d6f8f7b461928f0d495cfc695ccabb5b From 849262ff6b5111996f5a338bd621227d80fb359d Mon Sep 17 00:00:00 2001 From: "Nate McMaster (automated)" Date: Fri, 25 May 2018 16:14:32 -0700 Subject: [PATCH 09/44] Update bootstrapper scripts (automated commit) [ci skip] --- run.ps1 | 25 +++++++++++++++++++------ run.sh | 33 +++++++++++++++++++++++++++++---- 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/run.ps1 b/run.ps1 index 27dcf848f8..3b27382468 100644 --- a/run.ps1 +++ b/run.ps1 @@ -26,12 +26,18 @@ The base url where build tools can be downloaded. Overrides the value from the c .PARAMETER Update Updates KoreBuild to the latest version even if a lock file is present. +.PARAMETER Reinstall +Re-installs KoreBuild + .PARAMETER ConfigFile The path to the configuration file that stores values. Defaults to korebuild.json. .PARAMETER ToolsSourceSuffix The Suffix to append to the end of the ToolsSource. Useful for query strings in blob stores. +.PARAMETER CI +Sets up CI specific settings and variables. + .PARAMETER Arguments Arguments to be passed to the command @@ -65,8 +71,10 @@ param( [string]$ToolsSource, [Alias('u')] [switch]$Update, - [string]$ConfigFile, + [switch]$Reinstall, [string]$ToolsSourceSuffix, + [string]$ConfigFile = $null, + [switch]$CI, [Parameter(ValueFromRemainingArguments = $true)] [string[]]$Arguments ) @@ -93,6 +101,10 @@ function Get-KoreBuild { $version = $version.TrimStart('version:').Trim() $korebuildPath = Join-Paths $DotNetHome ('buildtools', 'korebuild', $version) + if ($Reinstall -and (Test-Path $korebuildPath)) { + Remove-Item -Force -Recurse $korebuildPath + } + if (!(Test-Path $korebuildPath)) { Write-Host -ForegroundColor Magenta "Downloading KoreBuild $version" New-Item -ItemType Directory -Path $korebuildPath | Out-Null @@ -101,9 +113,9 @@ function Get-KoreBuild { try { $tmpfile = Join-Path ([IO.Path]::GetTempPath()) "KoreBuild-$([guid]::NewGuid()).zip" Get-RemoteFile $remotePath $tmpfile $ToolsSourceSuffix - if (Get-Command -Name 'Expand-Archive' -ErrorAction Ignore) { + if (Get-Command -Name 'Microsoft.PowerShell.Archive\Expand-Archive' -ErrorAction Ignore) { # Use built-in commands where possible as they are cross-plat compatible - Expand-Archive -Path $tmpfile -DestinationPath $korebuildPath + Microsoft.PowerShell.Archive\Expand-Archive -Path $tmpfile -DestinationPath $korebuildPath } else { # Fallback to old approach for old installations of PowerShell @@ -167,8 +179,9 @@ if (Test-Path $ConfigFile) { } } catch { - Write-Warning "$ConfigFile could not be read. Its settings will be ignored." - Write-Warning $Error[0] + Write-Host -ForegroundColor Red $Error[0] + Write-Error "$ConfigFile contains invalid JSON." + exit 1 } } @@ -188,7 +201,7 @@ $korebuildPath = Get-KoreBuild Import-Module -Force -Scope Local (Join-Path $korebuildPath 'KoreBuild.psd1') try { - Set-KoreBuildSettings -ToolsSource $ToolsSource -DotNetHome $DotNetHome -RepoPath $Path -ConfigFile $ConfigFile + Set-KoreBuildSettings -ToolsSource $ToolsSource -DotNetHome $DotNetHome -RepoPath $Path -ConfigFile $ConfigFile -CI:$CI Invoke-KoreBuildCommand $Command @Arguments } finally { diff --git a/run.sh b/run.sh index 834961fc3a..02aac15874 100755 --- a/run.sh +++ b/run.sh @@ -14,10 +14,12 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" [ -z "${DOTNET_HOME:-}" ] && DOTNET_HOME="$HOME/.dotnet" verbose=false update=false +reinstall=false repo_path="$DIR" channel='' tools_source='' tools_source_suffix='' +ci=false # # Functions @@ -38,6 +40,8 @@ __usage() { echo " -s|--tools-source|-ToolsSource The base url where build tools can be downloaded. Overrides the value from the config file." echo " --tools-source-suffix|-ToolsSourceSuffix The suffix to append to tools-source. Useful for query strings." echo " -u|--update Update to the latest KoreBuild even if the lock file is present." + echo " --reinstall Reinstall KoreBuild." + echo " --ci Apply CI specific settings and environment variables." echo "" echo "Description:" echo " This function will create a file \$DIR/korebuild-lock.txt. This lock file can be committed to source, but does not have to be." @@ -62,6 +66,10 @@ get_korebuild() { version="$(echo "${version#version:}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" local korebuild_path="$DOTNET_HOME/buildtools/korebuild/$version" + if [ "$reinstall" = true ] && [ -d "$korebuild_path" ]; then + rm -rf "$korebuild_path" + fi + { if [ ! -d "$korebuild_path" ]; then mkdir -p "$korebuild_path" @@ -175,6 +183,12 @@ while [[ $# -gt 0 ]]; do -u|--update|-Update) update=true ;; + --reinstall|-[Rr]einstall) + reinstall=true + ;; + --ci|-[Cc][Ii]) + ci=true + ;; --verbose|-Verbose) verbose=true ;; @@ -206,17 +220,28 @@ if [ -f "$config_file" ]; then config_channel="$(jq -r 'select(.channel!=null) | .channel' "$config_file")" config_tools_source="$(jq -r 'select(.toolsSource!=null) | .toolsSource' "$config_file")" else - __warn "$config_file is invalid JSON. Its settings will be ignored." + _error "$config_file contains invalid JSON." + exit 1 fi elif __machine_has python ; then if python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then config_channel="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")" config_tools_source="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")" else - __warn "$config_file is invalid JSON. Its settings will be ignored." + _error "$config_file contains invalid JSON." + exit 1 + fi + elif __machine_has python3 ; then + if python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then + config_channel="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")" + config_tools_source="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")" + else + _error "$config_file contains invalid JSON." + exit 1 fi else - __warn 'Missing required command: jq or pyton. Could not parse the JSON file. Its settings will be ignored.' + _error 'Missing required command: jq or python. Could not parse the JSON file.' + exit 1 fi [ ! -z "${config_channel:-}" ] && channel="$config_channel" @@ -227,5 +252,5 @@ fi [ -z "$tools_source" ] && tools_source='https://aspnetcore.blob.core.windows.net/buildtools' get_korebuild -set_korebuildsettings "$tools_source" "$DOTNET_HOME" "$repo_path" "$config_file" +set_korebuildsettings "$tools_source" "$DOTNET_HOME" "$repo_path" "$config_file" "$ci" invoke_korebuild_command "$command" "$@" From e8355d32cecc4aeb7ea8a5f25ca010d72e2be781 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 27 May 2018 19:15:43 +0000 Subject: [PATCH 10/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 20 ++++++++++---------- korebuild-lock.txt | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 5264626424..b547ddd6a6 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,20 +3,20 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-17060 - 2.2.0-preview1-34255 - 2.2.0-preview1-34255 - 2.2.0-preview1-34255 - 2.2.0-preview1-34255 + 2.2.0-preview1-17064 + 2.2.0-preview1-34326 + 2.2.0-preview1-34326 + 2.2.0-preview1-34326 + 2.2.0-preview1-34326 2.0.0 2.1.0-rc1 - 2.2.0-preview1-26509-06 - 2.2.0-preview1-34255 + 2.2.0-preview1-26526-03 + 2.2.0-preview1-34326 15.6.1 - 4.6.0-preview1-26508-04 + 4.6.0-preview1-26525-01 2.0.3 - 4.6.0-preview1-26508-04 - 4.6.0-preview1-26508-04 + 4.6.0-preview1-26525-01 + 4.6.0-preview1-26525-01 2.3.1 2.4.0-beta.1.build3945 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index cf2fff7def..3028b66761 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17060 -commithash:25b4b134d6f8f7b461928f0d495cfc695ccabb5b +version:2.2.0-preview1-17064 +commithash:5380a2461b135b261646f31d1c919ab0a7b577a8 From 4f30967f80768cc54d7324965c5247d20ec1e16c Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 3 Jun 2018 19:15:35 +0000 Subject: [PATCH 11/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 22 +++++++++++----------- korebuild-lock.txt | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index b547ddd6a6..770a97d82b 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,20 +3,20 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-17064 - 2.2.0-preview1-34326 - 2.2.0-preview1-34326 - 2.2.0-preview1-34326 - 2.2.0-preview1-34326 + 2.2.0-preview1-17067 + 2.2.0-preview1-34373 + 2.2.0-preview1-34373 + 2.2.0-preview1-34373 + 2.2.0-preview1-34373 2.0.0 - 2.1.0-rc1 - 2.2.0-preview1-26526-03 - 2.2.0-preview1-34326 + 2.1.0 + 2.2.0-preview1-26531-03 + 2.2.0-preview1-34373 15.6.1 - 4.6.0-preview1-26525-01 + 4.6.0-preview1-26531-03 2.0.3 - 4.6.0-preview1-26525-01 - 4.6.0-preview1-26525-01 + 4.6.0-preview1-26531-03 + 4.6.0-preview1-26531-03 2.3.1 2.4.0-beta.1.build3945 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 3028b66761..06ba6285b7 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17064 -commithash:5380a2461b135b261646f31d1c919ab0a7b577a8 +version:2.2.0-preview1-17067 +commithash:2af0e2e3d02329b4f0290061ab9bd8c7ca1aa26f From 7c080805af41c5dcdcbb1bf0e082c99e3f060a5f Mon Sep 17 00:00:00 2001 From: Nate McMaster Date: Tue, 5 Jun 2018 22:32:34 -0700 Subject: [PATCH 12/44] Add certificate names for code signing --- Directory.Build.props | 2 ++ korebuild-lock.txt | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 13a3c749b4..ee6994a2af 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -14,6 +14,8 @@ $(MSBuildThisFileDirectory) $(MSBuildThisFileDirectory)build\Key.snk true + Microsoft + MicrosoftNuGet true true diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 06ba6285b7..b679b80427 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17067 -commithash:2af0e2e3d02329b4f0290061ab9bd8c7ca1aa26f +version:2.2.0-preview1-17075 +commithash:d9f07c7f313a0af1d49f003f5424b4dbbdd3e09f From ed799a460f18994a1a03ef070268515af62f654d Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Thu, 7 Jun 2018 19:36:23 +0000 Subject: [PATCH 13/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 20 ++++++++++---------- korebuild-lock.txt | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 770a97d82b..9251177478 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,20 +3,20 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-17067 - 2.2.0-preview1-34373 - 2.2.0-preview1-34373 - 2.2.0-preview1-34373 - 2.2.0-preview1-34373 + 2.2.0-preview1-17081 + 2.2.0-preview1-34411 + 2.2.0-preview1-34411 + 2.2.0-preview1-34411 + 2.2.0-preview1-34411 2.0.0 2.1.0 - 2.2.0-preview1-26531-03 - 2.2.0-preview1-34373 + 2.2.0-preview1-26606-01 + 2.2.0-preview1-34411 15.6.1 - 4.6.0-preview1-26531-03 + 4.6.0-preview1-26605-01 2.0.3 - 4.6.0-preview1-26531-03 - 4.6.0-preview1-26531-03 + 4.6.0-preview1-26605-01 + 4.6.0-preview1-26605-01 2.3.1 2.4.0-beta.1.build3945 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index b679b80427..deb7e546f0 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17075 -commithash:d9f07c7f313a0af1d49f003f5424b4dbbdd3e09f +version:2.2.0-preview1-17081 +commithash:73f09c256e2a54270951562ecc0ef4a953926c36 From df99f7e23374ea34dd509b94bf8d7c903f524f52 Mon Sep 17 00:00:00 2001 From: Ryan Brandenburg Date: Thu, 7 Jun 2018 15:45:31 -0700 Subject: [PATCH 14/44] Adding VSTS file --- .vsts-pipelines/builds/ci-internal.yml | 13 +++++++++++++ .vsts-pipelines/builds/ci-public.yml | 15 +++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 .vsts-pipelines/builds/ci-internal.yml create mode 100644 .vsts-pipelines/builds/ci-public.yml diff --git a/.vsts-pipelines/builds/ci-internal.yml b/.vsts-pipelines/builds/ci-internal.yml new file mode 100644 index 0000000000..d7ceb76378 --- /dev/null +++ b/.vsts-pipelines/builds/ci-internal.yml @@ -0,0 +1,13 @@ +trigger: +- dev +- release/* + +resources: + repositories: + - repository: buildtools + type: git + name: aspnet-BuildTools + ref: refs/heads/dev + +phases: +- template: .vsts-pipelines/templates/project-ci.yml@buildtools diff --git a/.vsts-pipelines/builds/ci-public.yml b/.vsts-pipelines/builds/ci-public.yml new file mode 100644 index 0000000000..b7f25723f8 --- /dev/null +++ b/.vsts-pipelines/builds/ci-public.yml @@ -0,0 +1,15 @@ +trigger: +- dev +- release/* + +# See https://github.com/aspnet/BuildTools +resources: + repositories: + - repository: buildtools + type: github + endpoint: DotNet-Bot GitHub Connection + name: aspnet/BuildTools + ref: refs/heads/dev + +phases: +- template: .vsts-pipelines/templates/project-ci.yml@buildtools From 1bbe161b4e5bc6d077b4862b2d3a7d3f2f42061d Mon Sep 17 00:00:00 2001 From: Ryan Brandenburg Date: Thu, 14 Jun 2018 10:27:23 -0700 Subject: [PATCH 15/44] Set 2.1 baselines --- .../baseline.netcore.json | 77 ++++++++++++++++--- 1 file changed, 65 insertions(+), 12 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/baseline.netcore.json b/src/Microsoft.AspNetCore.Server.HttpSys/baseline.netcore.json index 583baf7a3a..a2a3a393fa 100644 --- a/src/Microsoft.AspNetCore.Server.HttpSys/baseline.netcore.json +++ b/src/Microsoft.AspNetCore.Server.HttpSys/baseline.netcore.json @@ -1,5 +1,5 @@ { - "AssemblyIdentity": "Microsoft.AspNetCore.Server.HttpSys, Version=2.0.3.0, Culture=neutral, PublicKeyToken=adb9793829ddae60", + "AssemblyIdentity": "Microsoft.AspNetCore.Server.HttpSys, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60", "Types": [ { "Name": "Microsoft.AspNetCore.Hosting.WebHostBuilderHttpSysExtensions", @@ -144,6 +144,38 @@ ], "GenericParameters": [] }, + { + "Name": "Microsoft.AspNetCore.Server.HttpSys.Http503VerbosityLevel", + "Visibility": "Public", + "Kind": "Enumeration", + "Sealed": true, + "BaseType": "System.Int64", + "ImplementedInterfaces": [], + "Members": [ + { + "Kind": "Field", + "Name": "Basic", + "Parameters": [], + "GenericParameter": [], + "Literal": "0" + }, + { + "Kind": "Field", + "Name": "Limited", + "Parameters": [], + "GenericParameter": [], + "Literal": "1" + }, + { + "Kind": "Field", + "Name": "Full", + "Parameters": [], + "GenericParameter": [], + "Literal": "2" + } + ], + "GenericParameters": [] + }, { "Name": "Microsoft.AspNetCore.Server.HttpSys.HttpSysDefaults", "Visibility": "Public", @@ -363,6 +395,27 @@ "Visibility": "Public", "GenericParameter": [] }, + { + "Kind": "Method", + "Name": "get_Http503Verbosity", + "Parameters": [], + "ReturnType": "Microsoft.AspNetCore.Server.HttpSys.Http503VerbosityLevel", + "Visibility": "Public", + "GenericParameter": [] + }, + { + "Kind": "Method", + "Name": "set_Http503Verbosity", + "Parameters": [ + { + "Name": "value", + "Type": "Microsoft.AspNetCore.Server.HttpSys.Http503VerbosityLevel" + } + ], + "ReturnType": "System.Void", + "Visibility": "Public", + "GenericParameter": [] + }, { "Kind": "Constructor", "Name": ".ctor", @@ -683,6 +736,17 @@ "System.Collections.Generic.ICollection" ], "Members": [ + { + "Kind": "Method", + "Name": "GetEnumerator", + "Parameters": [], + "ReturnType": "System.Collections.Generic.IEnumerator", + "Sealed": true, + "Virtual": true, + "ImplementedInterface": "System.Collections.Generic.IEnumerable", + "Visibility": "Public", + "GenericParameter": [] + }, { "Kind": "Method", "Name": "get_Count", @@ -809,17 +873,6 @@ "ImplementedInterface": "System.Collections.Generic.ICollection", "Visibility": "Public", "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetEnumerator", - "Parameters": [], - "ReturnType": "System.Collections.Generic.IEnumerator", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.Generic.IEnumerable", - "Visibility": "Public", - "GenericParameter": [] } ], "GenericParameters": [] From b44f8f61d134030a485270c0cf9d875a415ddffe Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Mon, 25 Jun 2018 11:16:17 -0700 Subject: [PATCH 16/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 20 ++++++++++---------- korebuild-lock.txt | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 9251177478..d77dee67ef 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,20 +3,20 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-17081 - 2.2.0-preview1-34411 - 2.2.0-preview1-34411 - 2.2.0-preview1-34411 - 2.2.0-preview1-34411 + 2.2.0-preview1-17090 + 2.2.0-preview1-34530 + 2.2.0-preview1-34530 + 2.2.0-preview1-34530 + 2.2.0-preview1-34530 2.0.0 2.1.0 - 2.2.0-preview1-26606-01 - 2.2.0-preview1-34411 + 2.2.0-preview1-26618-02 + 2.2.0-preview1-34530 15.6.1 - 4.6.0-preview1-26605-01 + 4.6.0-preview1-26617-01 2.0.3 - 4.6.0-preview1-26605-01 - 4.6.0-preview1-26605-01 + 4.6.0-preview1-26617-01 + 4.6.0-preview1-26617-01 2.3.1 2.4.0-beta.1.build3945 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index deb7e546f0..a8109db529 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17081 -commithash:73f09c256e2a54270951562ecc0ef4a953926c36 +version:2.2.0-preview1-17090 +commithash:b19e903e946579cd9482089bce7d917e8bacd765 From e76c04eecc2222282ae30b8ec10c8942be853868 Mon Sep 17 00:00:00 2001 From: Nate McMaster Date: Thu, 28 Jun 2018 16:20:11 -0700 Subject: [PATCH 17/44] Update infrastructure for the 2.2 release --- .vsts-pipelines/builds/ci-internal.yml | 4 ++-- .vsts-pipelines/builds/ci-public.yml | 6 +++--- build/repo.props | 1 + korebuild.json | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.vsts-pipelines/builds/ci-internal.yml b/.vsts-pipelines/builds/ci-internal.yml index d7ceb76378..dc7b8a3cb9 100644 --- a/.vsts-pipelines/builds/ci-internal.yml +++ b/.vsts-pipelines/builds/ci-internal.yml @@ -1,5 +1,5 @@ trigger: -- dev +- master - release/* resources: @@ -7,7 +7,7 @@ resources: - repository: buildtools type: git name: aspnet-BuildTools - ref: refs/heads/dev + ref: refs/heads/release/2.2 phases: - template: .vsts-pipelines/templates/project-ci.yml@buildtools diff --git a/.vsts-pipelines/builds/ci-public.yml b/.vsts-pipelines/builds/ci-public.yml index b7f25723f8..f5087d9c30 100644 --- a/.vsts-pipelines/builds/ci-public.yml +++ b/.vsts-pipelines/builds/ci-public.yml @@ -1,5 +1,5 @@ trigger: -- dev +- master - release/* # See https://github.com/aspnet/BuildTools @@ -9,7 +9,7 @@ resources: type: github endpoint: DotNet-Bot GitHub Connection name: aspnet/BuildTools - ref: refs/heads/dev - + ref: refs/heads/release/2.2 + phases: - template: .vsts-pipelines/templates/project-ci.yml@buildtools diff --git a/build/repo.props b/build/repo.props index 17a98ac7e7..f1fe24dd27 100644 --- a/build/repo.props +++ b/build/repo.props @@ -4,6 +4,7 @@ Internal.AspNetCore.Universe.Lineup + 2.2.0-* https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json diff --git a/korebuild.json b/korebuild.json index bd5d51a51b..d217d06e3e 100644 --- a/korebuild.json +++ b/korebuild.json @@ -1,4 +1,4 @@ { - "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/dev/tools/korebuild.schema.json", - "channel": "dev" + "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/release/2.2/tools/korebuild.schema.json", + "channel": "release/2.2" } From 7de560b7accf32c532272ca5acff100d042788e4 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 8 Jul 2018 12:15:06 -0700 Subject: [PATCH 18/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 18 +++++++++--------- korebuild-lock.txt | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index d77dee67ef..39b85f671e 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,22 +3,22 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-17090 - 2.2.0-preview1-34530 - 2.2.0-preview1-34530 - 2.2.0-preview1-34530 - 2.2.0-preview1-34530 - 2.0.0 - 2.1.0 + 2.2.0-preview1-17099 + 2.2.0-preview1-34640 + 2.2.0-preview1-34640 + 2.2.0-preview1-34640 + 2.2.0-preview1-34640 + 2.0.7 + 2.1.1 2.2.0-preview1-26618-02 - 2.2.0-preview1-34530 + 2.2.0-preview1-34640 15.6.1 4.6.0-preview1-26617-01 2.0.3 4.6.0-preview1-26617-01 4.6.0-preview1-26617-01 2.3.1 - 2.4.0-beta.1.build3945 + 2.4.0-rc.1.build4038 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index a8109db529..27e2e80f9a 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17090 -commithash:b19e903e946579cd9482089bce7d917e8bacd765 +version:2.2.0-preview1-17099 +commithash:263ed1db9866b6b419b1f5d5189a712aa218acb3 From f99ed73b9eecc7a05ebebfca24130702e8a40f88 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 15 Jul 2018 12:14:52 -0700 Subject: [PATCH 19/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 39b85f671e..527de68cb8 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -4,19 +4,19 @@ 2.2.0-preview1-17099 - 2.2.0-preview1-34640 - 2.2.0-preview1-34640 - 2.2.0-preview1-34640 - 2.2.0-preview1-34640 - 2.0.7 - 2.1.1 + 2.2.0-preview1-34694 + 2.2.0-preview1-34694 + 2.2.0-preview1-34694 + 2.2.0-preview1-34694 + 2.0.9 + 2.1.2 2.2.0-preview1-26618-02 - 2.2.0-preview1-34640 + 2.2.0-preview1-34694 15.6.1 - 4.6.0-preview1-26617-01 + 4.5.0 2.0.3 - 4.6.0-preview1-26617-01 - 4.6.0-preview1-26617-01 + 4.5.0 + 4.5.0 2.3.1 2.4.0-rc.1.build4038 From f5145ea76f9a045211ede32b360334465c8f72fb Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 22 Jul 2018 12:14:27 -0700 Subject: [PATCH 20/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 527de68cb8..680eef624a 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -4,14 +4,14 @@ 2.2.0-preview1-17099 - 2.2.0-preview1-34694 - 2.2.0-preview1-34694 - 2.2.0-preview1-34694 - 2.2.0-preview1-34694 + 2.2.0-preview1-34755 + 2.2.0-preview1-34755 + 2.2.0-preview1-34755 + 2.2.0-preview1-34755 2.0.9 2.1.2 2.2.0-preview1-26618-02 - 2.2.0-preview1-34694 + 2.2.0-preview1-34755 15.6.1 4.5.0 2.0.3 From bda5a5dc0704755d35e7b7d8f196f11514d074ea Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 29 Jul 2018 12:13:58 -0700 Subject: [PATCH 21/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 15 ++++++++------- korebuild-lock.txt | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 680eef624a..47af7771f1 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,22 +3,23 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-17099 - 2.2.0-preview1-34755 - 2.2.0-preview1-34755 - 2.2.0-preview1-34755 - 2.2.0-preview1-34755 + 2.2.0-preview1-17102 + 2.2.0-preview1-34823 + 2.2.0-preview1-34823 + 2.2.0-preview1-34823 + 2.2.0-preview1-34823 2.0.9 2.1.2 2.2.0-preview1-26618-02 - 2.2.0-preview1-34755 + 2.2.0-preview1-34823 15.6.1 4.5.0 2.0.3 4.5.0 4.5.0 2.3.1 - 2.4.0-rc.1.build4038 + 2.4.0 + diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 27e2e80f9a..6b8da29e6b 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17099 -commithash:263ed1db9866b6b419b1f5d5189a712aa218acb3 +version:2.2.0-preview1-17102 +commithash:e7e2b5a97ca92cfc6acc4def534cb0901a6d1eb9 From e8efed14037733dc7f587a2ffb64f1a8122bedf9 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 5 Aug 2018 19:15:33 +0000 Subject: [PATCH 22/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 12 ++++++------ korebuild-lock.txt | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 47af7771f1..fc63291133 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,15 +3,15 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-17102 - 2.2.0-preview1-34823 - 2.2.0-preview1-34823 - 2.2.0-preview1-34823 - 2.2.0-preview1-34823 + 2.2.0-preview1-20180731.1 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 2.0.9 2.1.2 2.2.0-preview1-26618-02 - 2.2.0-preview1-34823 + 2.2.0-preview1-34882 15.6.1 4.5.0 2.0.3 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 6b8da29e6b..c7af2292c7 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17102 -commithash:e7e2b5a97ca92cfc6acc4def534cb0901a6d1eb9 +version:2.2.0-preview1-20180731.1 +commithash:29fde58465439f4bb9df40830635ed758e063daf From 74d779f5e7433c644f33150efb10de6710f10e2b Mon Sep 17 00:00:00 2001 From: "Chris Ross (ASP.NET)" Date: Fri, 3 Aug 2018 15:32:55 -0700 Subject: [PATCH 23/44] Add diagnostics to debug flaky tests #457 --- .../Listener/AuthenticationTests.cs | 16 ++-- .../Listener/HttpsTests.cs | 10 +-- .../Listener/OpaqueUpgradeTests.cs | 2 +- .../Listener/RequestBodyTests.cs | 28 +++--- .../Listener/RequestHeaderTests.cs | 2 +- .../Listener/RequestTests.cs | 16 ++-- .../Listener/ResponseBodyTests.cs | 54 +++++------ .../Listener/ResponseCachingTests.cs | 90 +++++++++---------- .../Listener/ResponseHeaderTests.cs | 40 ++++----- .../Listener/ResponseSendFileTests.cs | 50 +++++------ .../Listener/ResponseTests.cs | 12 +-- .../Listener/ServerTests.cs | 30 +++---- .../Listener/Utilities.cs | 17 +++- 13 files changed, 191 insertions(+), 176 deletions(-) diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/AuthenticationTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/AuthenticationTests.cs index 404bcdd7c8..df8fe9291a 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/AuthenticationTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/AuthenticationTests.cs @@ -29,7 +29,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.NotNull(context.User); Assert.False(context.User.Identity.IsAuthenticated); Assert.Equal(authType, context.Response.AuthenticationChallenges); @@ -72,7 +72,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.NotNull(context.User); Assert.False(context.User.Identity.IsAuthenticated); Assert.Equal(authType, context.Response.AuthenticationChallenges); @@ -98,7 +98,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.NotNull(context.User); Assert.False(context.User.Identity.IsAuthenticated); Assert.Equal(authType, context.Response.AuthenticationChallenges); @@ -124,14 +124,14 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, useDefaultCredentials: true); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.NotNull(context.User); Assert.False(context.User.Identity.IsAuthenticated); Assert.Equal(authType, context.Response.AuthenticationChallenges); context.Response.StatusCode = 401; context.Dispose(); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.NotNull(context.User); Assert.True(context.User.Identity.IsAuthenticated); Assert.Equal(authType, context.Response.AuthenticationChallenges); @@ -155,7 +155,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, useDefaultCredentials: true); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.NotNull(context.User); Assert.True(context.User.Identity.IsAuthenticated); Assert.Equal(authType, context.Response.AuthenticationChallenges); @@ -174,7 +174,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, useDefaultCredentials: true); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.NotNull(context.User); Assert.True(context.User.Identity.IsAuthenticated); Assert.Equal(AuthenticationSchemes.Kerberos, context.Response.AuthenticationChallenges); @@ -193,7 +193,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.NotNull(context.User); Assert.False(context.User.Identity.IsAuthenticated); Assert.Equal(AuthenticationSchemes.Kerberos, context.Response.AuthenticationChallenges); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/HttpsTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/HttpsTests.cs index a4c16c785c..73303143d3 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/HttpsTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/HttpsTests.cs @@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(Address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); string response = await responseTask; @@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(Address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] body = Encoding.UTF8.GetBytes("Hello World"); context.Response.ContentLength = body.Length; await context.Response.Body.WriteAsync(body, 0, body.Length); @@ -56,7 +56,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(Address, "Hello World"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); string input = new StreamReader(context.Request.Body).ReadToEnd(); Assert.Equal("Hello World", input); context.Response.ContentLength = 11; @@ -76,7 +76,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(Address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cert = await context.Request.GetClientCertificateAsync(); Assert.Null(cert); context.Dispose(); @@ -95,7 +95,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener Assert.NotNull(clientCert); Task responseTask = SendRequestAsync(Address, clientCert); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cert = await context.Request.GetClientCertificateAsync(); Assert.NotNull(cert); context.Dispose(); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/OpaqueUpgradeTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/OpaqueUpgradeTests.cs index d749fdb285..90ba32f590 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/OpaqueUpgradeTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/OpaqueUpgradeTests.cs @@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task clientTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(clientTask); byte[] body = Encoding.UTF8.GetBytes("Hello World"); await context.Response.Body.WriteAsync(body, 0, body.Length); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs index baec5a8204..d9b51fb43c 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener Assert.True(server.Options.AllowSynchronousIO); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[100]; Assert.True(context.AllowSynchronousIO); @@ -51,7 +51,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener Task responseTask = SendRequestAsync(address, "Hello World"); server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[100]; int read = context.Request.Body.Read(input, 0, input.Length); context.Response.ContentLength = read; @@ -70,7 +70,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, "Hello World"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[100]; int read = await context.Request.Body.ReadAsync(input, 0, input.Length); context.Response.ContentLength = read; @@ -89,7 +89,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, "Hello World"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[100]; int read = context.Request.Body.EndRead(context.Request.Body.BeginRead(input, 0, input.Length, null, null)); context.Response.ContentLength = read; @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener Task responseTask = SendRequestAsync(address, "Hello World"); server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[100]; Assert.Throws("buffer", () => context.Request.Body.Read(null, 0, 1)); Assert.Throws("offset", () => context.Request.Body.Read(input, -1, 1)); @@ -135,7 +135,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener Task responseTask = SendRequestAsync(address, content); server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[10]; int read = context.Request.Body.Read(input, 0, input.Length); Assert.Equal(5, read); @@ -158,7 +158,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, content); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[10]; int read = await context.Request.Body.ReadAsync(input, 0, input.Length); Assert.Equal(5, read); @@ -180,7 +180,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendSocketRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[11]; int read = await context.Request.Body.ReadAsync(input, 0, input.Length); Assert.Equal(10, read); @@ -206,7 +206,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, "Hello World"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[10]; var cts = new CancellationTokenSource(); @@ -231,7 +231,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, content); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[10]; var cts = new CancellationTokenSource(); int read = await context.Request.Body.ReadAsync(input, 0, input.Length, cts.Token); @@ -255,7 +255,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, content); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[10]; var cts = new CancellationTokenSource(); cts.CancelAfter(TimeSpan.FromSeconds(5)); @@ -280,7 +280,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, content); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[10]; var cts = new CancellationTokenSource(); int read = await context.Request.Body.ReadAsync(input, 0, input.Length, cts.Token); @@ -305,7 +305,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, content); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[10]; var cts = new CancellationTokenSource(); int read = await context.Request.Body.ReadAsync(input, 0, input.Length, cts.Token); @@ -333,7 +333,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var client = new HttpClient(); var responseTask = client.PostAsync(address, content); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); byte[] input = new byte[10]; int read = await context.Request.Body.ReadAsync(input, 0, input.Length, context.DisconnectToken); Assert.False(context.DisconnectToken.IsCancellationRequested); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs index 4197d4faf0..ddc11ac8b3 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs @@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var requestHeaders = context.Request.Headers; // NOTE: The System.Net client only sends the Connection: keep-alive header on the first connection per service-point. // Assert.Equal(2, requestHeaders.Count); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs index 20ea25c514..6be075ba03 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs @@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(root + "/basepath/SomePath?SomeQuery"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // General fields var request = context.Request; @@ -67,7 +67,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(root + requestPath); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // General fields var request = context.Request; @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener using (var server = Utilities.CreateHttpServerReturnRoot("/", out root)) { var responseTask = SendSocketRequestAsync(root, "/%252F"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.Equal("/%2F", context.Request.Path); } } @@ -123,7 +123,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener // Send a HTTP request with the request line: // GET http://localhost:5001 HTTP/1.1 var responseTask = SendSocketRequestAsync(root, root); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.Equal("/", context.Request.Path); Assert.Equal("", context.Request.PathBase); Assert.Equal(root, context.Request.RawUrl); @@ -138,7 +138,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener using (var server = Utilities.CreateHttpServerReturnRoot("/", out root)) { var responseTask = SendSocketRequestAsync(root, "*", "OPTIONS"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.Equal("", context.Request.PathBase); Assert.Equal("", context.Request.Path); Assert.Equal("*", context.Request.RawUrl); @@ -177,7 +177,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener Task responseTask = SendRequestAsync(root + requestUri); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var request = context.Request; Assert.Equal(expectedPath, request.Path); @@ -220,7 +220,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener using (var server = Utilities.CreateHttpServerReturnRoot("/", out root)) { var responseTask = SendSocketRequestAsync(root, "/" + requestPath); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); actualPath = context.Request.Path; context.Dispose(); @@ -270,7 +270,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener using (var server = Utilities.CreateHttpServerReturnRoot("/", out root)) { var responseTask = SendSocketRequestAsync(root, requestPath); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.Equal(expectedPath, context.Request.Path); context.Dispose(); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs index fd5fce6b00..27e051e4a7 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs @@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.True(context.AllowSynchronousIO); @@ -60,7 +60,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var responseTask = SendRequestAsync(address); server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Body.Write(new byte[10], 0, 10); await context.Response.Body.WriteAsync(new byte[10], 0, 10); context.Dispose(); @@ -84,7 +84,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener server.Options.AllowSynchronousIO = true; var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Body.Write(new byte[10], 0, 10); context.Response.Body.Flush(); await context.Response.Body.WriteAsync(new byte[10], 0, 10); @@ -107,7 +107,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["transfeR-Encoding"] = "CHunked"; Stream stream = context.Response.Body; var responseBytes = Encoding.ASCII.GetBytes("10\r\nManually Chunked\r\n0\r\n\r\n"); @@ -133,7 +133,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var responseTask = SendRequestAsync(address); server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["Content-lenGth"] = " 30 "; var stream = context.Response.Body; stream.EndWrite(stream.BeginWrite(new byte[10], 0, 10, null, null)); @@ -160,12 +160,12 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["Content-lenGth"] = " 20 "; context.Dispose(); #if NET461 // HttpClient retries the request because it didn't get a response. - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["Content-lenGth"] = " 20 "; context.Dispose(); #elif NETCOREAPP2_2 @@ -184,7 +184,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["Content-lenGth"] = " 20 "; context.Response.Body.Write(new byte[5], 0, 5); context.Dispose(); @@ -201,7 +201,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["Content-lenGth"] = " 10 "; context.Response.Body.Write(new byte[5], 0, 5); Assert.Throws(() => context.Response.Body.Write(new byte[6], 0, 6)); @@ -220,7 +220,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var responseTask = SendRequestAsync(address); server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["Content-lenGth"] = " 10 "; context.Response.Body.Write(new byte[10], 0, 10); Assert.Throws(() => context.Response.Body.Write(new byte[6], 0, 6)); @@ -246,7 +246,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var responseTask = SendRequestAsync(address); server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Body.Write(new byte[10], 0, 0); Assert.True(context.Response.HasStarted); await context.Response.Body.WriteAsync(new byte[10], 0, 0); @@ -270,7 +270,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cts = new CancellationTokenSource(); // First write sends headers await context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); @@ -291,7 +291,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cts = new CancellationTokenSource(); cts.CancelAfter(TimeSpan.FromSeconds(10)); // First write sends headers @@ -314,7 +314,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener server.Options.ThrowWriteExceptions = true; var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cts = new CancellationTokenSource(); cts.Cancel(); // First write sends headers @@ -323,7 +323,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener context.Dispose(); #if NET461 // HttpClient retries the request because it didn't get a response. - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); cts = new CancellationTokenSource(); cts.Cancel(); // First write sends headers @@ -346,7 +346,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cts = new CancellationTokenSource(); cts.Cancel(); // First write sends headers @@ -355,7 +355,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener context.Dispose(); #if NET461 // HttpClient retries the request because it didn't get a response. - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); cts = new CancellationTokenSource(); cts.Cancel(); // First write sends headers @@ -379,7 +379,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener server.Options.ThrowWriteExceptions = true; var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cts = new CancellationTokenSource(); // First write sends headers await context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); @@ -400,7 +400,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cts = new CancellationTokenSource(); // First write sends headers await context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); @@ -424,7 +424,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var cts = new CancellationTokenSource(); var responseTask = SendRequestAsync(address, cts.Token); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // First write sends headers cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); @@ -454,7 +454,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var cts = new CancellationTokenSource(); var responseTask = SendRequestAsync(address, cts.Token); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // First write sends headers cts.Cancel(); @@ -486,7 +486,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var responseTask = SendRequestAsync(address, cts.Token); server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // First write sends headers cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); @@ -509,7 +509,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var cts = new CancellationTokenSource(); var responseTask = SendRequestAsync(address, cts.Token); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // First write sends headers cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); @@ -535,7 +535,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = client.GetAsync(address, HttpCompletionOption.ResponseHeadersRead); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // First write sends headers context.Response.Body.Write(new byte[10], 0, 10); @@ -569,7 +569,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = client.GetAsync(address, HttpCompletionOption.ResponseHeadersRead); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // First write sends headers await context.Response.Body.WriteAsync(new byte[10], 0, 10); @@ -603,7 +603,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = client.GetAsync(address, HttpCompletionOption.ResponseHeadersRead); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // First write sends headers context.Response.Body.Write(new byte[10], 0, 10); @@ -633,7 +633,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = client.GetAsync(address, HttpCompletionOption.ResponseHeadersRead); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // First write sends headers await context.Response.Body.WriteAsync(new byte[10], 0, 10); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs index b3bc680e72..dbd5e89a0e 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs @@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -45,7 +45,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "2"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; // Http.sys does not require a content-type to cache on Win7 and Win2008R2 context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -98,7 +98,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -127,7 +127,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -158,7 +158,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.Headers["age"] = "12345"; @@ -190,7 +190,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(0); @@ -203,7 +203,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "2"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -224,7 +224,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromMilliseconds(900); @@ -237,7 +237,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "2"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -258,7 +258,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(-10); @@ -271,7 +271,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "2"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -292,7 +292,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.MaxValue; @@ -319,7 +319,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.ContentLength = 10; @@ -350,7 +350,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.ContentLength = 10; @@ -382,7 +382,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var responseTask = SendRequestAsync(address); server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -396,7 +396,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "2"; context.Dispose(); @@ -415,7 +415,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -430,7 +430,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "2"; context.Dispose(); @@ -449,7 +449,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.ContentLength = 10; @@ -480,7 +480,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -494,7 +494,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "2"; context.Dispose(); @@ -513,7 +513,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.ContentLength =_fileLength; @@ -554,7 +554,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var responseTask = SendRequestAsync(address + status); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.StatusCode = status; context.Response.Headers["x-request-count"] = status.ToString(); context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache @@ -620,7 +620,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address, method); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = context.Request.Method + "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -633,7 +633,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address, method); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = context.Request.Method + "2"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -679,7 +679,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener // Cache the first response var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = context.Request.Method + "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -693,7 +693,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener // Try to clear the cache with a second request responseTask = SendRequestAsync(address, method); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = context.Request.Method + "2"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Dispose(); @@ -724,7 +724,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address, "GET", "x-vary", "vary1"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.Headers["vary"] = "x-vary"; @@ -755,7 +755,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address, "GET", "Authorization", "Basic abc123"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -768,7 +768,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address, "GET", "Authorization", "Basic abc123"); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "2"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Dispose(); @@ -789,7 +789,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -802,7 +802,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address, "GET", "Authorization", "Basic abc123"); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "2"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Dispose(); @@ -825,7 +825,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address, "GET", "Pragma", "no-cache"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -854,7 +854,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -882,7 +882,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address, "GET", "Cache-Control", "no-cache"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -910,7 +910,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -938,7 +938,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -966,7 +966,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.CacheTtl = TimeSpan.FromSeconds(10); @@ -993,7 +993,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address, "GET", "Range", "bytes=0-10"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.StatusCode = 206; context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache @@ -1010,7 +1010,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address, "GET", "Range", "bytes=0-10"); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.StatusCode = 206; context.Response.Headers["x-request-count"] = "2"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache @@ -1037,7 +1037,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.ContentLength = 100; @@ -1067,7 +1067,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.ContentLength = 100; @@ -1096,7 +1096,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var responseLength = _fileLength / 2; // Make sure it handles partial files. var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.ContentLength = responseLength; @@ -1128,7 +1128,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var responseLength = _fileLength / 2; // Make sure it handles partial files. var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["x-request-count"] = "1"; context.Response.Headers["content-type"] = "some/thing"; // Http.sys requires a content-type to cache context.Response.ContentLength = responseLength; diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs index a9b0380ef5..808c688824 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs @@ -31,7 +31,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); HttpResponseMessage response = await responseTask; @@ -53,7 +53,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, usehttp11: false); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); HttpResponseMessage response = await responseTask; @@ -76,7 +76,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendHeadRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); HttpResponseMessage response = await responseTask; @@ -104,7 +104,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendHeadRequestAsync(address, usehttp11: false); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); HttpResponseMessage response = await responseTask; @@ -119,7 +119,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener // Send a second request to check that the connection wasn't corrupted. responseTask = SendHeadRequestAsync(address); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); response = await responseTask; } @@ -133,7 +133,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendHeadRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.ContentLength = 20; context.Dispose(); @@ -148,7 +148,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener // Send a second request to check that the connection wasn't corrupted. responseTask = SendHeadRequestAsync(address); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); response = await responseTask; } @@ -162,7 +162,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.StatusCode = 204; // No Content context.Dispose(); @@ -185,7 +185,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendHeadRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.StatusCode = 204; // No Content context.Dispose(); @@ -200,7 +200,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener // Send a second request to check that the connection wasn't corrupted. responseTask = SendHeadRequestAsync(address); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); response = await responseTask; } @@ -215,7 +215,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener WebRequest request = WebRequest.Create(address); Task responseTask = request.GetResponseAsync(); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var responseHeaders = context.Response.Headers; responseHeaders["WWW-Authenticate"] = "custom1"; context.Dispose(); @@ -240,7 +240,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener WebRequest request = WebRequest.Create(address); Task responseTask = request.GetResponseAsync(); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var responseHeaders = context.Response.Headers; responseHeaders["WWW-Authenticate"] = new[] { "custom1, and custom2", "custom3" }; context.Dispose(); @@ -271,7 +271,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener WebRequest request = WebRequest.Create(address); Task responseTask = request.GetResponseAsync(); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var responseHeaders = context.Response.Headers; responseHeaders["Custom-Header1"] = new[] { "custom1, and custom2", "custom3" }; context.Dispose(); @@ -301,7 +301,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var responseHeaders = context.Response.Headers; responseHeaders["Connection"] = "Close"; context.Dispose(); @@ -321,7 +321,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address, usehttp11: false); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); HttpResponseMessage response = await responseTask; @@ -344,7 +344,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener request.Version = new Version(1, 0); Task responseTask = client.SendAsync(request); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var responseHeaders = context.Response.Headers; responseHeaders["Transfer-Encoding"] = "chunked"; var responseBytes = Encoding.ASCII.GetBytes("10\r\nManually Chunked\r\n0\r\n\r\n"); @@ -372,7 +372,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener // Http.Sys does not support 1.0 keep-alives. Task responseTask = SendRequestAsync(address, usehttp11: false, sendKeepAlive: true); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); HttpResponseMessage response = await responseTask; @@ -391,7 +391,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener Task responseTask = SendRequestAsync(address); server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var responseHeaders = context.Response.Headers; responseHeaders["Custom1"] = new[] { "value1a", "value1b" }; @@ -427,7 +427,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var responseHeaders = context.Response.Headers; responseHeaders["Custom1"] = new[] { "value1a", "value1b" }; @@ -481,7 +481,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var responseHeaders = context.Response.Headers; diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs index c19f1fe9c3..a4247900ba 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs @@ -34,7 +34,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); await Assert.ThrowsAsync(() => context.Response.SendFileAsync("Missing.txt", 0, null, CancellationToken.None)); context.Dispose(); @@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); context.Dispose(); @@ -73,7 +73,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); await context.Response.SendFileAsync(RelativeFilePath, 0, null, CancellationToken.None); context.Dispose(); @@ -94,7 +94,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); context.Dispose(); @@ -115,7 +115,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); context.Dispose(); @@ -137,7 +137,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); await context.Response.SendFileAsync(AbsoluteFilePath, 0, FileLength / 2, CancellationToken.None); context.Dispose(); @@ -158,7 +158,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); await Assert.ThrowsAsync( () => context.Response.SendFileAsync(AbsoluteFilePath, 1234567, null, CancellationToken.None)); context.Dispose(); @@ -176,7 +176,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); await Assert.ThrowsAsync( () => context.Response.SendFileAsync(AbsoluteFilePath, 0, 1234567, CancellationToken.None)); context.Dispose(); @@ -194,7 +194,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); await context.Response.SendFileAsync(AbsoluteFilePath, 0, 0, CancellationToken.None); context.Dispose(); @@ -219,7 +219,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); await context.Response.SendFileAsync(emptyFilePath, 0, null, CancellationToken.None); Assert.True(context.Response.HasStarted); await context.Response.Body.WriteAsync(new byte[10], 0, 10, CancellationToken.None); @@ -243,7 +243,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["Content-lenGth"] = FileLength.ToString(); await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); @@ -265,7 +265,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["Content-lenGth"] = "10"; await context.Response.SendFileAsync(AbsoluteFilePath, 0, 10, CancellationToken.None); context.Dispose(); @@ -288,7 +288,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.Headers["Content-lenGth"] = "0"; await context.Response.SendFileAsync(AbsoluteFilePath, 0, 0, CancellationToken.None); context.Dispose(); @@ -311,7 +311,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cts = new CancellationTokenSource(); // First write sends headers await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, cts.Token); @@ -332,7 +332,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cts = new CancellationTokenSource(); cts.CancelAfter(TimeSpan.FromSeconds(10)); // First write sends headers @@ -355,7 +355,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener server.Options.ThrowWriteExceptions = true; var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cts = new CancellationTokenSource(); cts.Cancel(); // First write sends headers @@ -364,7 +364,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener context.Dispose(); #if NET461 // .NET HttpClient automatically retries a request if it does not get a response. - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); cts = new CancellationTokenSource(); cts.Cancel(); // First write sends headers @@ -387,7 +387,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cts = new CancellationTokenSource(); cts.Cancel(); // First write sends headers @@ -396,7 +396,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener context.Dispose(); #if NET461 // .NET HttpClient automatically retries a request if it does not get a response. - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); cts = new CancellationTokenSource(); cts.Cancel(); // First write sends headers @@ -420,7 +420,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener server.Options.ThrowWriteExceptions = true; var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cts = new CancellationTokenSource(); // First write sends headers await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, cts.Token); @@ -441,7 +441,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var cts = new CancellationTokenSource(); // First write sends headers await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, cts.Token); @@ -464,7 +464,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var cts = new CancellationTokenSource(); var responseTask = SendRequestAsync(address, cts.Token); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // First write sends headers cts.Cancel(); @@ -496,7 +496,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var cts = new CancellationTokenSource(); var responseTask = SendRequestAsync(address, cts.Token); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // First write sends headers cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); @@ -522,7 +522,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = client.GetAsync(address, HttpCompletionOption.ResponseHeadersRead); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // First write sends headers var sendFileTask = context.Response.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); @@ -559,7 +559,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = client.GetAsync(address, HttpCompletionOption.ResponseHeadersRead); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); // First write sends headers var sendFileTask = context.Response.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseTests.cs index eacd671453..a151eaffe8 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseTests.cs @@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.Equal(200, context.Response.StatusCode); context.Dispose(); @@ -40,7 +40,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.StatusCode = 201; // TODO: env["owin.ResponseProtocol"] = "HTTP/1.0"; // Http.Sys ignores this value context.Dispose(); @@ -61,7 +61,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.StatusCode = 201; context.Response.ReasonPhrase = "CustomReasonPhrase"; // TODO: env["owin.ResponseProtocol"] = "HTTP/1.0"; // Http.Sys ignores this value @@ -83,7 +83,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.StatusCode = 901; context.Dispose(); @@ -102,7 +102,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.Throws(() => { context.Response.StatusCode = 100; }); context.Dispose(); @@ -118,7 +118,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.Throws(() => { context.Response.StatusCode = 0; }); context.Dispose(); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs index 8384461a38..9137873fc7 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs @@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); var response = await responseTask; @@ -40,7 +40,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { Task responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Response.ContentLength = 11; var writer = new StreamWriter(context.Response.Body); await writer.WriteAsync("Hello World"); @@ -59,7 +59,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address, "Hello World"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var input = await new StreamReader(context.Request.Body).ReadToEndAsync(); Assert.Equal("Hello World", input); context.Response.ContentLength = 11; @@ -85,7 +85,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = client.GetAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var ct = context.DisconnectToken; Assert.True(ct.CanBeCanceled, "CanBeCanceled"); Assert.False(ct.IsCancellationRequested, "IsCancellationRequested"); @@ -116,7 +116,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = client.GetAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); client.CancelPendingRequests(); await Assert.ThrowsAnyAsync(() => responseTask); @@ -147,7 +147,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = client.GetAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); var response = await responseTask; @@ -176,7 +176,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var ct = context.DisconnectToken; Assert.True(ct.CanBeCanceled, "CanBeCanceled"); Assert.False(ct.IsCancellationRequested, "IsCancellationRequested"); @@ -186,7 +186,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener Assert.True(ct.IsCancellationRequested, "IsCancellationRequested"); #if NET461 // HttpClient re-tries the request because it doesn't know if the request was received. - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Abort(); #elif NETCOREAPP2_2 #else @@ -207,7 +207,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); var ct = context.DisconnectToken; Assert.True(ct.CanBeCanceled, "CanBeCanceled"); Assert.False(ct.IsCancellationRequested, "IsCancellationRequested"); @@ -237,7 +237,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener server.Options.RequestQueueLimit = 1001; var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); var response = await responseTask; @@ -253,7 +253,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener server.Options.Http503Verbosity = Http503VerbosityLevel.Limited; var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); context.Dispose(); var response = await responseTask; @@ -269,7 +269,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.Equal(string.Empty, context.Request.PathBase); Assert.Equal("/", context.Request.Path); context.Dispose(); @@ -282,7 +282,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.Equal("/pathbase", context.Request.PathBase); Assert.Equal("/", context.Request.Path); context.Dispose(); @@ -302,7 +302,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener server.Options.UrlPrefixes.Add(address); var responseTask = SendRequestAsync(address); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); + var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.Equal("/pathbase", context.Request.PathBase); Assert.Equal("/", context.Request.Path); context.Dispose(); @@ -314,7 +314,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener responseTask = SendRequestAsync(address); - context = await server.AcceptAsync(Utilities.DefaultTimeout); + context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); Assert.Equal(string.Empty, context.Request.PathBase); Assert.Equal("/pathbase/", context.Request.Path); context.Dispose(); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs index b3fb1b1c8c..e090cbfdd7 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs @@ -3,7 +3,6 @@ using System; using System.Threading.Tasks; -using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.HttpSys.Listener @@ -108,5 +107,21 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener throw new TimeoutException("AcceptAsync has timed out."); } } + + // Fail if the given response task completes before the given accept task. + internal static async Task Before(this Task acceptTask, Task responseTask) + { + var completedTask = await Task.WhenAny(acceptTask, responseTask); + + if (completedTask == acceptTask) + { + return await acceptTask; + } + else + { + var response = await responseTask; + throw new InvalidOperationException("The response completed prematurely: " + response.ToString()); + } + } } } From 047e39ed33f3c0cbe1c5c242fc93129f05669cb4 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Mon, 6 Aug 2018 20:37:53 +0000 Subject: [PATCH 24/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index fc63291133..0c48776d04 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -4,14 +4,14 @@ 2.2.0-preview1-20180731.1 - 2.2.0-preview1-34882 - 2.2.0-preview1-34882 - 2.2.0-preview1-34882 - 2.2.0-preview1-34882 + 2.2.0-preview1-34896 + 2.2.0-preview1-34896 + 2.2.0-preview1-34896 + 2.2.0-preview1-34896 2.0.9 2.1.2 2.2.0-preview1-26618-02 - 2.2.0-preview1-34882 + 2.2.0-preview1-34896 15.6.1 4.5.0 2.0.3 From 0cf53e7d3489eb3c2298fb78f3c83443a3aaf8fd Mon Sep 17 00:00:00 2001 From: "Chris Ross (ASP.NET)" Date: Tue, 7 Aug 2018 14:38:44 -0700 Subject: [PATCH 25/44] Show HTTP/2 status on requests #106 --- .../Microsoft.AspNetCore.HttpSys.Sources/Constants.cs | 1 + .../NativeInterop/HttpApiTypes.cs | 11 ++++++++++- .../RequestProcessing/NativeRequestContext.cs | 6 ++++++ .../FeatureContext.cs | 9 +++++++-- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/Constants.cs b/shared/Microsoft.AspNetCore.HttpSys.Sources/Constants.cs index 0982badab8..6f861c239f 100644 --- a/shared/Microsoft.AspNetCore.HttpSys.Sources/Constants.cs +++ b/shared/Microsoft.AspNetCore.HttpSys.Sources/Constants.cs @@ -17,5 +17,6 @@ namespace Microsoft.AspNetCore.HttpSys.Internal internal static Version V1_0 = new Version(1, 0); internal static Version V1_1 = new Version(1, 1); + internal static Version V2 = new Version(2, 0); } } diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpApiTypes.cs b/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpApiTypes.cs index 6b3a3b6908..f05d089b9f 100644 --- a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpApiTypes.cs +++ b/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpApiTypes.cs @@ -434,10 +434,19 @@ namespace Microsoft.AspNetCore.HttpSys.Internal internal HTTP_REQUEST_AUTH_INFO* pInfo; } + [Flags] + internal enum HTTP_REQUEST_FLAGS + { + None = 0, + MoreEntityBodyExists = 1, + IPRouted = 2, + Http2 = 4, + } + [StructLayout(LayoutKind.Sequential)] internal struct HTTP_REQUEST { - internal uint Flags; + internal HTTP_REQUEST_FLAGS Flags; internal ulong ConnectionId; internal ulong RequestId; internal ulong UrlContext; diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/NativeRequestContext.cs b/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/NativeRequestContext.cs index a0985c87ce..ef15d80394 100644 --- a/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/NativeRequestContext.cs +++ b/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/NativeRequestContext.cs @@ -88,6 +88,8 @@ namespace Microsoft.AspNetCore.HttpSys.Internal } } + internal bool IsHttp2 => NativeRequest->Flags.HasFlag(HttpApiTypes.HTTP_REQUEST_FLAGS.Http2); + internal uint Size { get { return (uint)_backingBuffer.Length - AlignmentPadding; } @@ -156,6 +158,10 @@ namespace Microsoft.AspNetCore.HttpSys.Internal internal Version GetVersion() { + if (IsHttp2) + { + return Constants.V2; + } var major = NativeRequest->Version.MajorVersion; var minor = NativeRequest->Version.MinorVersion; if (major == 1 && minor == 1) diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/FeatureContext.cs b/src/Microsoft.AspNetCore.Server.HttpSys/FeatureContext.cs index 9acef96deb..193b87f969 100644 --- a/src/Microsoft.AspNetCore.Server.HttpSys/FeatureContext.cs +++ b/src/Microsoft.AspNetCore.Server.HttpSys/FeatureContext.cs @@ -13,6 +13,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Features.Authentication; +using Microsoft.AspNetCore.HttpSys.Internal; using Microsoft.Net.Http.Headers; namespace Microsoft.AspNetCore.Server.HttpSys @@ -168,11 +169,15 @@ namespace Microsoft.AspNetCore.Server.HttpSys if (IsNotInitialized(Fields.Protocol)) { var protocol = Request.ProtocolVersion; - if (protocol.Major == 1 && protocol.Minor == 1) + if (protocol == Constants.V2) + { + _httpProtocolVersion = "HTTP/2"; + } + else if (protocol == Constants.V1_1) { _httpProtocolVersion = "HTTP/1.1"; } - else if (protocol.Major == 1 && protocol.Minor == 0) + else if (protocol == Constants.V1_0) { _httpProtocolVersion = "HTTP/1.0"; } From 9f6f5730fd152f65a703880d901b75f15e9d94ad Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 12 Aug 2018 19:14:42 +0000 Subject: [PATCH 26/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 12 ++++++------ korebuild-lock.txt | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 0c48776d04..d3908a57ee 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,15 +3,15 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-20180731.1 - 2.2.0-preview1-34896 - 2.2.0-preview1-34896 - 2.2.0-preview1-34896 - 2.2.0-preview1-34896 + 2.2.0-preview1-20180807.2 + 2.2.0-preview1-34967 + 2.2.0-preview1-34967 + 2.2.0-preview1-34967 + 2.2.0-preview1-34967 2.0.9 2.1.2 2.2.0-preview1-26618-02 - 2.2.0-preview1-34896 + 2.2.0-preview1-34967 15.6.1 4.5.0 2.0.3 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index c7af2292c7..3fbcc80189 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-20180731.1 -commithash:29fde58465439f4bb9df40830635ed758e063daf +version:2.2.0-preview1-20180807.2 +commithash:11495dbd236104434e08cb1152fcb58cf2a20923 From d6f2e8085f933213e31d63ad3c2ea9cf7a432b75 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Tue, 21 Aug 2018 13:33:50 -0700 Subject: [PATCH 27/44] Update package branding for 2.2.0-preview2 --- build/dependencies.props | 2 +- version.props | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index d3908a57ee..bf7752a647 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -20,6 +20,6 @@ 2.3.1 2.4.0 - + diff --git a/version.props b/version.props index 44985cedb3..15637ba785 100644 --- a/version.props +++ b/version.props @@ -1,7 +1,7 @@ 2.2.0 - preview1 + preview2 $(VersionPrefix) $(VersionPrefix)-$(VersionSuffix)-final t000 From 85a8aa21f17abc3d9e017b4ba37ce5c6a5cdec7c Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 2 Sep 2018 12:13:51 -0700 Subject: [PATCH 28/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 12 ++++++------ korebuild-lock.txt | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index bf7752a647..4561ab65ef 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,15 +3,15 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-20180807.2 - 2.2.0-preview1-34967 - 2.2.0-preview1-34967 - 2.2.0-preview1-34967 - 2.2.0-preview1-34967 + 2.2.0-preview1-20180821.1 + 2.2.0-preview2-35143 + 2.2.0-preview2-35143 + 2.2.0-preview2-35143 + 2.2.0-preview2-35143 2.0.9 2.1.2 2.2.0-preview1-26618-02 - 2.2.0-preview1-34967 + 2.2.0-preview2-35143 15.6.1 4.5.0 2.0.3 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 3fbcc80189..ad704918df 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-20180807.2 -commithash:11495dbd236104434e08cb1152fcb58cf2a20923 +version:2.2.0-preview1-20180821.1 +commithash:c8d0cc52cd1abb697be24e288ffd54f8fae8bf17 From 5b8a1ab329058da136367d8c130f73e04f57bccc Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Wed, 5 Sep 2018 16:34:43 -0700 Subject: [PATCH 29/44] Update branding to 2.2.0-preview3 --- version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.props b/version.props index 15637ba785..704cac087b 100644 --- a/version.props +++ b/version.props @@ -1,7 +1,7 @@ 2.2.0 - preview2 + preview3 $(VersionPrefix) $(VersionPrefix)-$(VersionSuffix)-final t000 From 869582e1fcf0ea045ff2ec5bf4a9822a086f9f26 Mon Sep 17 00:00:00 2001 From: "Chris Ross (ASP.NET)" Date: Thu, 6 Sep 2018 15:22:02 -0700 Subject: [PATCH 30/44] Skip Auth test due to HttpClient regression #474 --- .../AuthenticationTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs index f533303309..4e631f2566 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs @@ -346,7 +346,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys } } - [ConditionalTheory] + [ConditionalTheory(Skip = "https://github.com/aspnet/HttpSysServer/issues/474")] [InlineData(AuthenticationSchemes.Negotiate)] [InlineData(AuthenticationSchemes.NTLM)] // [InlineData(AuthenticationSchemes.Digest)] // Not implemented From 7fac2becc08f164b38b15d4eba0cecea592b3da1 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 9 Sep 2018 12:14:48 -0700 Subject: [PATCH 31/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 16 ++++++++-------- korebuild-lock.txt | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 4561ab65ef..0dc76e348d 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,15 +3,15 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-20180821.1 - 2.2.0-preview2-35143 - 2.2.0-preview2-35143 - 2.2.0-preview2-35143 - 2.2.0-preview2-35143 + 2.2.0-preview1-20180907.8 + 2.2.0-preview3-35202 + 2.2.0-preview3-35202 + 2.2.0-preview3-35202 + 2.2.0-preview3-35202 2.0.9 - 2.1.2 - 2.2.0-preview1-26618-02 - 2.2.0-preview2-35143 + 2.1.3 + 2.2.0-preview2-26905-02 + 2.2.0-preview3-35202 15.6.1 4.5.0 2.0.3 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index ad704918df..312f82f9a5 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-20180821.1 -commithash:c8d0cc52cd1abb697be24e288ffd54f8fae8bf17 +version:2.2.0-preview1-20180907.8 +commithash:078918eb5c1f176ee1da351c584fb4a4d7491aa0 From 81818560141e864de76d2630bde7118bf32aaf46 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 16 Sep 2018 12:13:29 -0700 Subject: [PATCH 32/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 12 ++++++------ korebuild-lock.txt | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 0dc76e348d..97dae4916d 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,15 +3,15 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-20180907.8 - 2.2.0-preview3-35202 - 2.2.0-preview3-35202 - 2.2.0-preview3-35202 - 2.2.0-preview3-35202 + 2.2.0-preview1-20180911.1 + 2.2.0-preview3-35252 + 2.2.0-preview3-35252 + 2.2.0-preview3-35252 + 2.2.0-preview3-35252 2.0.9 2.1.3 2.2.0-preview2-26905-02 - 2.2.0-preview3-35202 + 2.2.0-preview3-35252 15.6.1 4.5.0 2.0.3 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 312f82f9a5..7124f37441 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-20180907.8 -commithash:078918eb5c1f176ee1da351c584fb4a4d7491aa0 +version:2.2.0-preview1-20180911.1 +commithash:ddfecdfc6e8e4859db5a0daea578070b862aac65 From c1cd96d31e9c9c172fca7af7c489ab38f8cf2340 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 23 Sep 2018 19:15:42 +0000 Subject: [PATCH 33/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 12 ++++++------ korebuild-lock.txt | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 97dae4916d..d2da81baa1 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,15 +3,15 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-20180911.1 - 2.2.0-preview3-35252 - 2.2.0-preview3-35252 - 2.2.0-preview3-35252 - 2.2.0-preview3-35252 + 2.2.0-preview1-20180918.1 + 2.2.0-preview3-35301 + 2.2.0-preview3-35301 + 2.2.0-preview3-35301 + 2.2.0-preview3-35301 2.0.9 2.1.3 2.2.0-preview2-26905-02 - 2.2.0-preview3-35252 + 2.2.0-preview3-35301 15.6.1 4.5.0 2.0.3 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 7124f37441..649bf2ba0b 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-20180911.1 -commithash:ddfecdfc6e8e4859db5a0daea578070b862aac65 +version:2.2.0-preview1-20180918.1 +commithash:ad5e3fc53442741a0dd49bce437d2ac72f4b5800 From 49d9599aa82f5d9c415330fc1d562afda2005372 Mon Sep 17 00:00:00 2001 From: Nate McMaster Date: Fri, 28 Sep 2018 17:10:34 -0700 Subject: [PATCH 34/44] automated: bulk infrastructure updates. Update bootstrapper scripts and remove unnecessary signing properties --- Directory.Build.props | 3 --- run.ps1 | 6 +++--- run.sh | 10 +++++----- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index ee6994a2af..5a526bf358 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -14,9 +14,6 @@ $(MSBuildThisFileDirectory) $(MSBuildThisFileDirectory)build\Key.snk true - Microsoft - MicrosoftNuGet - true true diff --git a/run.ps1 b/run.ps1 index 3b27382468..34604c7175 100644 --- a/run.ps1 +++ b/run.ps1 @@ -52,8 +52,8 @@ in the file are overridden by command line parameters. Example config file: ```json { - "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/dev/tools/korebuild.schema.json", - "channel": "dev", + "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json", + "channel": "master", "toolsSource": "https://aspnetcore.blob.core.windows.net/buildtools" } ``` @@ -192,7 +192,7 @@ if (!$DotNetHome) { else { Join-Path $PSScriptRoot '.dotnet'} } -if (!$Channel) { $Channel = 'dev' } +if (!$Channel) { $Channel = 'master' } if (!$ToolsSource) { $ToolsSource = 'https://aspnetcore.blob.core.windows.net/buildtools' } # Execute diff --git a/run.sh b/run.sh index 02aac15874..4c1fed5646 100755 --- a/run.sh +++ b/run.sh @@ -220,7 +220,7 @@ if [ -f "$config_file" ]; then config_channel="$(jq -r 'select(.channel!=null) | .channel' "$config_file")" config_tools_source="$(jq -r 'select(.toolsSource!=null) | .toolsSource' "$config_file")" else - _error "$config_file contains invalid JSON." + __error "$config_file contains invalid JSON." exit 1 fi elif __machine_has python ; then @@ -228,7 +228,7 @@ if [ -f "$config_file" ]; then config_channel="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")" config_tools_source="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")" else - _error "$config_file contains invalid JSON." + __error "$config_file contains invalid JSON." exit 1 fi elif __machine_has python3 ; then @@ -236,11 +236,11 @@ if [ -f "$config_file" ]; then config_channel="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")" config_tools_source="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")" else - _error "$config_file contains invalid JSON." + __error "$config_file contains invalid JSON." exit 1 fi else - _error 'Missing required command: jq or python. Could not parse the JSON file.' + __error 'Missing required command: jq or python. Could not parse the JSON file.' exit 1 fi @@ -248,7 +248,7 @@ if [ -f "$config_file" ]; then [ ! -z "${config_tools_source:-}" ] && tools_source="$config_tools_source" fi -[ -z "$channel" ] && channel='dev' +[ -z "$channel" ] && channel='master' [ -z "$tools_source" ] && tools_source='https://aspnetcore.blob.core.windows.net/buildtools' get_korebuild From cd904bd605adfab4e767dcc03ff2e4cd8b3558b9 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 30 Sep 2018 12:15:55 -0700 Subject: [PATCH 35/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 14 +++++++------- korebuild-lock.txt | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index d2da81baa1..6148c755b7 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,15 +3,15 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-20180918.1 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 + 2.2.0-preview1-20180928.5 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 2.0.9 2.1.3 - 2.2.0-preview2-26905-02 - 2.2.0-preview3-35301 + 2.2.0-preview3-26927-02 + 2.2.0-preview3-35359 15.6.1 4.5.0 2.0.3 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 649bf2ba0b..26697a21fa 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-20180918.1 -commithash:ad5e3fc53442741a0dd49bce437d2ac72f4b5800 +version:2.2.0-preview1-20180928.5 +commithash:43faa29f679f47b88689d645b39e6be5e0055d70 From 47300deacb8a2782d25f471ed6fc49cd4230fa2c Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 7 Oct 2018 19:16:23 +0000 Subject: [PATCH 36/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 14 +++++++------- korebuild-lock.txt | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 6148c755b7..466236b26a 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,15 +3,15 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview1-20180928.5 - 2.2.0-preview3-35359 - 2.2.0-preview3-35359 - 2.2.0-preview3-35359 - 2.2.0-preview3-35359 + 2.2.0-preview2-20181004.6 + 2.2.0-preview3-35425 + 2.2.0-preview3-35425 + 2.2.0-preview3-35425 + 2.2.0-preview3-35425 2.0.9 2.1.3 - 2.2.0-preview3-26927-02 - 2.2.0-preview3-35359 + 2.2.0-preview3-27001-02 + 2.2.0-preview3-35425 15.6.1 4.5.0 2.0.3 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 26697a21fa..96fe3217ef 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-20180928.5 -commithash:43faa29f679f47b88689d645b39e6be5e0055d70 +version:2.2.0-preview2-20181004.6 +commithash:c04c4b2f5018632647f96210ab01876661302dac From 3218fa1dd959dc824c688d529733b992333e707d Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Thu, 11 Oct 2018 19:18:25 +0000 Subject: [PATCH 37/44] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 14 +++++++------- korebuild-lock.txt | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 466236b26a..759b586f0b 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,15 +3,15 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.2.0-preview2-20181004.6 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 - 2.2.0-preview3-35425 + 2.2.0-preview2-20181011.2 + 2.2.0-preview3-35457 + 2.2.0-preview3-35457 + 2.2.0-preview3-35457 + 2.2.0-preview3-35457 2.0.9 2.1.3 - 2.2.0-preview3-27001-02 - 2.2.0-preview3-35425 + 2.2.0-preview3-27008-03 + 2.2.0-preview3-35457 15.6.1 4.5.0 2.0.3 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 96fe3217ef..860121b752 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview2-20181004.6 -commithash:c04c4b2f5018632647f96210ab01876661302dac +version:2.2.0-preview2-20181011.2 +commithash:09cd1592eb0fbbfa6ef5124120c173bc1d4e353a From b6d9b7fc4253ebb33418391e36e78e4734479d18 Mon Sep 17 00:00:00 2001 From: "Chris Ross (ASP.NET)" Date: Tue, 16 Oct 2018 10:23:37 -0700 Subject: [PATCH 38/44] Remove redundant flaky tests #457 --- .../Listener/AuthenticationTests.cs | 219 --------------- .../Listener/HttpsTests.cs | 172 ------------ .../Listener/OpaqueUpgradeTests.cs | 217 --------------- .../Listener/RequestBodyTests.cs | 201 -------------- .../Listener/RequestHeaderTests.cs | 59 ----- .../Listener/RequestTests.cs | 149 ----------- .../Listener/ResponseBodyTests.cs | 162 ------------ .../Listener/ResponseHeaderTests.cs | 230 ---------------- .../Listener/ResponseSendFileTests.cs | 249 ------------------ .../Listener/ResponseTests.cs | 137 ---------- .../Listener/ServerTests.cs | 145 ---------- .../Listener/Utilities.cs | 8 - 12 files changed, 1948 deletions(-) delete mode 100644 test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/AuthenticationTests.cs delete mode 100644 test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/HttpsTests.cs delete mode 100644 test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/OpaqueUpgradeTests.cs delete mode 100644 test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/AuthenticationTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/AuthenticationTests.cs deleted file mode 100644 index df8fe9291a..0000000000 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/AuthenticationTests.cs +++ /dev/null @@ -1,219 +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; -using System.Net; -using System.Net.Http; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Testing.xunit; -using Xunit; - -namespace Microsoft.AspNetCore.Server.HttpSys.Listener -{ - public class AuthenticationTests - { - private static bool AllowAnoymous = true; - private static bool DenyAnoymous = false; - - [ConditionalTheory] - [InlineData(AuthenticationSchemes.None)] - [InlineData(AuthenticationSchemes.Negotiate)] - [InlineData(AuthenticationSchemes.NTLM)] - // [InlineData(AuthenticationSchemes.Digest)] - [InlineData(AuthenticationSchemes.Basic)] - [InlineData(AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM | /*AuthenticationSchemes.Digest |*/ AuthenticationSchemes.Basic)] - public async Task AuthTypes_AllowAnonymous_NoChallenge(AuthenticationSchemes authType) - { - string address; - using (var server = Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.NotNull(context.User); - Assert.False(context.User.Identity.IsAuthenticated); - Assert.Equal(authType, context.Response.AuthenticationChallenges); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.Empty(response.Headers.WwwAuthenticate); - } - } - - [ConditionalTheory] - [InlineData(AuthenticationSchemes.Negotiate)] - [InlineData(AuthenticationSchemes.NTLM)] - // [InlineData(AuthenticationType.Digest)] // TODO: Not implemented - [InlineData(AuthenticationSchemes.Basic)] - public async Task AuthType_RequireAuth_ChallengesAdded(AuthenticationSchemes authType) - { - string address; - using (var server = Utilities.CreateHttpAuthServer(authType, DenyAnoymous, out address)) - { - Task responseTask = SendRequestAsync(address); - - var contextTask = server.AcceptAsync(Utilities.DefaultTimeout); // Fails when the server shuts down, the challenge happens internally. - var response = await responseTask; - Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); - Assert.Equal(authType.ToString(), response.Headers.WwwAuthenticate.ToString(), StringComparer.OrdinalIgnoreCase); - } - } - - [ConditionalTheory] - [InlineData(AuthenticationSchemes.Negotiate)] - [InlineData(AuthenticationSchemes.NTLM)] - // [InlineData(AuthenticationSchemes.Digest)] // TODO: Not implemented - [InlineData(AuthenticationSchemes.Basic)] - public async Task AuthType_AllowAnonymousButSpecify401_ChallengesAdded(AuthenticationSchemes authType) - { - string address; - using (var server = Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.NotNull(context.User); - Assert.False(context.User.Identity.IsAuthenticated); - Assert.Equal(authType, context.Response.AuthenticationChallenges); - context.Response.StatusCode = 401; - context.Dispose(); - - var response = await responseTask; - Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); - Assert.Equal(authType.ToString(), response.Headers.WwwAuthenticate.ToString(), StringComparer.OrdinalIgnoreCase); - } - } - - [ConditionalFact] - public async Task MultipleAuthTypes_AllowAnonymousButSpecify401_ChallengesAdded() - { - string address; - AuthenticationSchemes authType = - AuthenticationSchemes.Negotiate - | AuthenticationSchemes.NTLM - /* | AuthenticationSchemes.Digest TODO: Not implemented */ - | AuthenticationSchemes.Basic; - using (var server = Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.NotNull(context.User); - Assert.False(context.User.Identity.IsAuthenticated); - Assert.Equal(authType, context.Response.AuthenticationChallenges); - context.Response.StatusCode = 401; - context.Dispose(); - - var response = await responseTask; - Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); - Assert.Equal("Negotiate, NTLM, basic", response.Headers.WwwAuthenticate.ToString(), StringComparer.OrdinalIgnoreCase); - } - } - - [ConditionalTheory] - [InlineData(AuthenticationSchemes.Negotiate)] - [InlineData(AuthenticationSchemes.NTLM)] - // [InlineData(AuthenticationSchemes.Digest)] // TODO: Not implemented - // [InlineData(AuthenticationSchemes.Basic)] // Doesn't work with default creds - [InlineData(AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM | /*AuthenticationType.Digest |*/ AuthenticationSchemes.Basic)] - public async Task AuthTypes_AllowAnonymousButSpecify401_Success(AuthenticationSchemes authType) - { - string address; - using (var server = Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address)) - { - Task responseTask = SendRequestAsync(address, useDefaultCredentials: true); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.NotNull(context.User); - Assert.False(context.User.Identity.IsAuthenticated); - Assert.Equal(authType, context.Response.AuthenticationChallenges); - context.Response.StatusCode = 401; - context.Dispose(); - - context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.NotNull(context.User); - Assert.True(context.User.Identity.IsAuthenticated); - Assert.Equal(authType, context.Response.AuthenticationChallenges); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - } - } - - [ConditionalTheory] - [InlineData(AuthenticationSchemes.Negotiate)] - [InlineData(AuthenticationSchemes.NTLM)] - // [InlineData(AuthenticationSchemes.Digest)] // TODO: Not implemented - // [InlineData(AuthenticationSchemes.Basic)] // Doesn't work with default creds - [InlineData(AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM | /*AuthenticationType.Digest |*/ AuthenticationSchemes.Basic)] - public async Task AuthTypes_RequireAuth_Success(AuthenticationSchemes authType) - { - string address; - using (var server = Utilities.CreateHttpAuthServer(authType, DenyAnoymous, out address)) - { - Task responseTask = SendRequestAsync(address, useDefaultCredentials: true); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.NotNull(context.User); - Assert.True(context.User.Identity.IsAuthenticated); - Assert.Equal(authType, context.Response.AuthenticationChallenges); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - } - } - - [ConditionalFact(Skip = "Requires a domain joined machine - https://github.com/aspnet/HttpSysServer/issues/357")] - public async Task AuthTypes_RequireKerberosAuth_Success() - { - string address; - using (var server = Utilities.CreateHttpAuthServer(AuthenticationSchemes.Kerberos, DenyAnoymous, out address)) - { - Task responseTask = SendRequestAsync(address, useDefaultCredentials: true); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.NotNull(context.User); - Assert.True(context.User.Identity.IsAuthenticated); - Assert.Equal(AuthenticationSchemes.Kerberos, context.Response.AuthenticationChallenges); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - } - } - - [ConditionalFact(Skip = "Requires a domain joined machine - https://github.com/aspnet/HttpSysServer/issues/357")] - public async Task MultipleAuthTypes_KerberosAllowAnonymousButSpecify401_ChallengesAdded() - { - string address; - using (var server = Utilities.CreateHttpAuthServer(AuthenticationSchemes.Kerberos, AllowAnoymous, out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.NotNull(context.User); - Assert.False(context.User.Identity.IsAuthenticated); - Assert.Equal(AuthenticationSchemes.Kerberos, context.Response.AuthenticationChallenges); - context.Response.StatusCode = 401; - context.Dispose(); - - var response = await responseTask; - Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); - Assert.Equal("Kerberos", response.Headers.WwwAuthenticate.ToString(), StringComparer.OrdinalIgnoreCase); - } - } - - private async Task SendRequestAsync(string uri, bool useDefaultCredentials = false) - { - HttpClientHandler handler = new HttpClientHandler(); - handler.UseDefaultCredentials = useDefaultCredentials; - using (HttpClient client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(5) }) - { - return await client.GetAsync(uri); - } - } - } -} \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/HttpsTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/HttpsTests.cs deleted file mode 100644 index 73303143d3..0000000000 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/HttpsTests.cs +++ /dev/null @@ -1,172 +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.IO; -using System.Net.Http; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Testing.xunit; -using Xunit; - -namespace Microsoft.AspNetCore.Server.HttpSys.Listener -{ - public class HttpsTests - { - // Note these tests can't use dynamic ports or run concurrently because the ssl cert must be pre-registered with a specific port. - private const string Address = "https://localhost:9090/"; - - [ConditionalFact(Skip = "TODO: Add trait filtering support so these SSL tests don't get run on teamcity or the command line."), Trait("scheme", "https")] - public async Task Https_200OK_Success() - { - using (var server = Utilities.CreateHttpsServer()) - { - Task responseTask = SendRequestAsync(Address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Dispose(); - - string response = await responseTask; - Assert.Equal(string.Empty, response); - } - } - - [ConditionalFact(Skip = "TODO: Add trait filtering support so these SSL tests don't get run on teamcity or the command line."), Trait("scheme", "https")] - public async Task Https_SendHelloWorld_Success() - { - using (var server = Utilities.CreateHttpsServer()) - { - Task responseTask = SendRequestAsync(Address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - byte[] body = Encoding.UTF8.GetBytes("Hello World"); - context.Response.ContentLength = body.Length; - await context.Response.Body.WriteAsync(body, 0, body.Length); - context.Dispose(); - - string response = await responseTask; - Assert.Equal("Hello World", response); - } - } - - [ConditionalFact(Skip = "TODO: Add trait filtering support so these SSL tests don't get run on teamcity or the command line."), Trait("scheme", "https")] - public async Task Https_EchoHelloWorld_Success() - { - using (var server = Utilities.CreateHttpsServer()) - { - Task responseTask = SendRequestAsync(Address, "Hello World"); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - string input = new StreamReader(context.Request.Body).ReadToEnd(); - Assert.Equal("Hello World", input); - context.Response.ContentLength = 11; - var writer = new StreamWriter(context.Response.Body); - await writer.WriteAsync("Hello World"); - await writer.FlushAsync(); - - string response = await responseTask; - Assert.Equal("Hello World", response); - } - } - - [ConditionalFact(Skip = "TODO: Add trait filtering support so these SSL tests don't get run on teamcity or the command line."), Trait("scheme", "https")] - public async Task Https_ClientCertNotSent_ClientCertNotPresent() - { - using (var server = Utilities.CreateHttpsServer()) - { - Task responseTask = SendRequestAsync(Address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var cert = await context.Request.GetClientCertificateAsync(); - Assert.Null(cert); - context.Dispose(); - - string response = await responseTask; - Assert.Equal(string.Empty, response); - } - } - - [ConditionalFact(Skip = "TODO: Add trait filtering support so these SSL tests don't get run on teamcity or the command line."), Trait("scheme", "https")] - public async Task Https_ClientCertRequested_ClientCertPresent() - { - using (var server = Utilities.CreateHttpsServer()) - { - X509Certificate2 clientCert = FindClientCert(); - Assert.NotNull(clientCert); - Task responseTask = SendRequestAsync(Address, clientCert); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var cert = await context.Request.GetClientCertificateAsync(); - Assert.NotNull(cert); - context.Dispose(); - - string response = await responseTask; - Assert.Equal(string.Empty, response); - } - } - - private async Task SendRequestAsync(string uri, - X509Certificate cert = null) - { - WinHttpHandler handler = new WinHttpHandler(); - handler.ServerCertificateValidationCallback = (a, b, c, d) => true; - if (cert != null) - { - handler.ClientCertificates.Add(cert); - } - using (HttpClient client = new HttpClient(handler)) - { - return await client.GetStringAsync(uri); - } - } - - private async Task SendRequestAsync(string uri, string upload) - { - WinHttpHandler handler = new WinHttpHandler(); - handler.ServerCertificateValidationCallback = (a, b, c, d) => true; - using (HttpClient client = new HttpClient(handler)) - { - HttpResponseMessage response = await client.PostAsync(uri, new StringContent(upload)); - response.EnsureSuccessStatusCode(); - return await response.Content.ReadAsStringAsync(); - } - } - - private X509Certificate2 FindClientCert() - { - var store = new X509Store(); - store.Open(OpenFlags.ReadOnly); - - foreach (var cert in store.Certificates) - { - bool isClientAuth = false; - bool isSmartCard = false; - foreach (var extension in cert.Extensions) - { - var eku = extension as X509EnhancedKeyUsageExtension; - if (eku != null) - { - foreach (var oid in eku.EnhancedKeyUsages) - { - if (oid.FriendlyName == "Client Authentication") - { - isClientAuth = true; - } - else if (oid.FriendlyName == "Smart Card Logon") - { - isSmartCard = true; - break; - } - } - } - } - - if (isClientAuth && !isSmartCard) - { - return cert; - } - } - return null; - } - } -} \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/OpaqueUpgradeTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/OpaqueUpgradeTests.cs deleted file mode 100644 index 90ba32f590..0000000000 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/OpaqueUpgradeTests.cs +++ /dev/null @@ -1,217 +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; -using System.IO; -using System.Net.Http; -using System.Net.Sockets; -using System.Text; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Testing.xunit; -using Xunit; - -namespace Microsoft.AspNetCore.Server.HttpSys.Listener -{ - public class OpaqueUpgradeTests - { - [ConditionalFact] - [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, WindowsVersions.Win2008R2)] - public async Task OpaqueUpgrade_AfterHeadersSent_Throws() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task clientTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(clientTask); - byte[] body = Encoding.UTF8.GetBytes("Hello World"); - await context.Response.Body.WriteAsync(body, 0, body.Length); - - Assert.Throws(() => context.Response.Headers["Upgrade"] = "WebSocket"); // Win8.1 blocks anything but WebSocket - await Assert.ThrowsAsync(async () => await context.UpgradeAsync()); - context.Dispose(); - HttpResponseMessage response = await clientTask; - Assert.Equal(200, (int)response.StatusCode); - Assert.Equal("Hello World", await response.Content.ReadAsStringAsync()); - } - } - - [ConditionalFact] - [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, WindowsVersions.Win2008R2)] - public async Task OpaqueUpgrade_GetUpgrade_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task clientTask = SendOpaqueRequestAsync("GET", address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout); - Assert.True(context.IsUpgradableRequest); - context.Response.Headers["Upgrade"] = "WebSocket"; // Win8.1 blocks anything but WebSocket - Stream serverStream = await context.UpgradeAsync(); - Assert.True(serverStream.CanRead); - Assert.True(serverStream.CanWrite); - Stream clientStream = await clientTask; - serverStream.Dispose(); - context.Dispose(); - clientStream.Dispose(); - } - } - - [ConditionalTheory] - [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, WindowsVersions.Win2008R2)] - // See HTTP_VERB for known verbs - [InlineData("UNKNOWN", null)] - [InlineData("INVALID", null)] - [InlineData("OPTIONS", null)] - [InlineData("GET", null)] - [InlineData("HEAD", null)] - [InlineData("DELETE", null)] - [InlineData("TRACE", null)] - [InlineData("CONNECT", null)] - [InlineData("TRACK", null)] - [InlineData("MOVE", null)] - [InlineData("COPY", null)] - [InlineData("PROPFIND", null)] - [InlineData("PROPPATCH", null)] - [InlineData("MKCOL", null)] - [InlineData("LOCK", null)] - [InlineData("UNLOCK", null)] - [InlineData("SEARCH", null)] - [InlineData("CUSTOMVERB", null)] - [InlineData("PATCH", null)] - [InlineData("POST", "Content-Length: 0")] - [InlineData("PUT", "Content-Length: 0")] - public async Task OpaqueUpgrade_VariousMethodsUpgradeSendAndReceive_Success(string method, string extraHeader) - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task clientTask = SendOpaqueRequestAsync(method, address, extraHeader); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout); - Assert.True(context.IsUpgradableRequest); - context.Response.Headers["Upgrade"] = "WebSocket"; // Win8.1 blocks anything but WebSocket - Stream serverStream = await context.UpgradeAsync(); - Stream clientStream = await clientTask; - - byte[] clientBuffer = new byte[] { 0x00, 0x01, 0xFF, 0x00, 0x00 }; - await clientStream.WriteAsync(clientBuffer, 0, 3); - - byte[] serverBuffer = new byte[clientBuffer.Length]; - int read = await serverStream.ReadAsync(serverBuffer, 0, serverBuffer.Length); - Assert.Equal(clientBuffer, serverBuffer); - - await serverStream.WriteAsync(serverBuffer, 0, read); - - byte[] clientEchoBuffer = new byte[clientBuffer.Length]; - read = await clientStream.ReadAsync(clientEchoBuffer, 0, clientEchoBuffer.Length); - Assert.Equal(clientBuffer, clientEchoBuffer); - - serverStream.Dispose(); - context.Dispose(); - clientStream.Dispose(); - } - } - - [ConditionalTheory] - [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, WindowsVersions.Win2008R2)] - // Http.Sys returns a 411 Length Required if PUT or POST does not specify content-length or chunked. - [InlineData("POST", "Content-Length: 10")] - [InlineData("POST", "Transfer-Encoding: chunked")] - [InlineData("PUT", "Content-Length: 10")] - [InlineData("PUT", "Transfer-Encoding: chunked")] - [InlineData("CUSTOMVERB", "Content-Length: 10")] - [InlineData("CUSTOMVERB", "Transfer-Encoding: chunked")] - public async Task OpaqueUpgrade_InvalidMethodUpgrade_Disconnected(string method, string extraHeader) - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var clientTask = SendOpaqueRequestAsync(method, address, extraHeader); - var context = await server.AcceptAsync(Utilities.DefaultTimeout); - Assert.False(context.IsUpgradableRequest); - context.Dispose(); - - await Assert.ThrowsAsync(async () => await clientTask); - } - } - - private async Task SendRequestAsync(string uri) - { - using (HttpClient client = new HttpClient()) - { - return await client.GetAsync(uri); - } - } - - // Returns a bidirectional opaque stream or throws if the upgrade fails - private async Task SendOpaqueRequestAsync(string method, string address, string extraHeader = null) - { - // Connect with a socket - Uri uri = new Uri(address); - TcpClient client = new TcpClient(); - try - { - await client.ConnectAsync(uri.Host, uri.Port); - NetworkStream stream = client.GetStream(); - - // Send an HTTP GET request - byte[] requestBytes = BuildGetRequest(method, uri, extraHeader); - await stream.WriteAsync(requestBytes, 0, requestBytes.Length); - - // Read the response headers, fail if it's not a 101 - await ParseResponseAsync(stream); - - // Return the opaque network stream - return stream; - } - catch (Exception) - { - ((IDisposable)client).Dispose(); - throw; - } - } - - private byte[] BuildGetRequest(string method, Uri uri, string extraHeader) - { - StringBuilder builder = new StringBuilder(); - builder.Append(method); - builder.Append(" "); - builder.Append(uri.PathAndQuery); - builder.Append(" HTTP/1.1"); - builder.AppendLine(); - - builder.Append("Host: "); - builder.Append(uri.Host); - builder.Append(':'); - builder.Append(uri.Port); - builder.AppendLine(); - - if (!string.IsNullOrEmpty(extraHeader)) - { - builder.AppendLine(extraHeader); - } - - builder.AppendLine(); - return Encoding.ASCII.GetBytes(builder.ToString()); - } - - // Read the response headers, fail if it's not a 101 - private async Task ParseResponseAsync(NetworkStream stream) - { - StreamReader reader = new StreamReader(stream); - string statusLine = await reader.ReadLineAsync(); - string[] parts = statusLine.Split(' '); - if (int.Parse(parts[1]) != 101) - { - throw new InvalidOperationException("The response status code was incorrect: " + statusLine); - } - - // Scan to the end of the headers - while (!string.IsNullOrEmpty(reader.ReadLine())) - { - } - } - } -} \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs index d9b51fb43c..c805818931 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs @@ -42,162 +42,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - [ConditionalFact] - public async Task RequestBody_ReadSync_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address, "Hello World"); - - server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - byte[] input = new byte[100]; - int read = context.Request.Body.Read(input, 0, input.Length); - context.Response.ContentLength = read; - context.Response.Body.Write(input, 0, read); - - string response = await responseTask; - Assert.Equal("Hello World", response); - } - } - - [ConditionalFact] - public async Task RequestBody_ReadAsync_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address, "Hello World"); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - byte[] input = new byte[100]; - int read = await context.Request.Body.ReadAsync(input, 0, input.Length); - context.Response.ContentLength = read; - await context.Response.Body.WriteAsync(input, 0, read); - - string response = await responseTask; - Assert.Equal("Hello World", response); - } - } - - [ConditionalFact] - public async Task RequestBody_ReadBeginEnd_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address, "Hello World"); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - byte[] input = new byte[100]; - int read = context.Request.Body.EndRead(context.Request.Body.BeginRead(input, 0, input.Length, null, null)); - context.Response.ContentLength = read; - context.Response.Body.EndWrite(context.Response.Body.BeginWrite(input, 0, read, null, null)); - - string response = await responseTask; - Assert.Equal("Hello World", response); - } - } - - [ConditionalFact] - public async Task RequestBody_InvalidBuffer_ArgumentException() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address, "Hello World"); - - server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - byte[] input = new byte[100]; - Assert.Throws("buffer", () => context.Request.Body.Read(null, 0, 1)); - Assert.Throws("offset", () => context.Request.Body.Read(input, -1, 1)); - Assert.Throws("offset", () => context.Request.Body.Read(input, input.Length + 1, 1)); - Assert.Throws("size", () => context.Request.Body.Read(input, 10, -1)); - Assert.Throws("size", () => context.Request.Body.Read(input, 0, 0)); - Assert.Throws("size", () => context.Request.Body.Read(input, 1, input.Length)); - Assert.Throws("size", () => context.Request.Body.Read(input, 0, input.Length + 1)); - context.Dispose(); - - string response = await responseTask; - Assert.Equal(string.Empty, response); - } - } - - [ConditionalFact] - public async Task RequestBody_ReadSyncPartialBody_Success() - { - StaggardContent content = new StaggardContent(); - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address, content); - - server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - byte[] input = new byte[10]; - int read = context.Request.Body.Read(input, 0, input.Length); - Assert.Equal(5, read); - content.Block.Release(); - read = context.Request.Body.Read(input, 0, input.Length); - Assert.Equal(5, read); - context.Dispose(); - - string response = await responseTask; - Assert.Equal(string.Empty, response); - } - } - - [ConditionalFact] - public async Task RequestBody_ReadAsyncPartialBody_Success() - { - StaggardContent content = new StaggardContent(); - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address, content); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - byte[] input = new byte[10]; - int read = await context.Request.Body.ReadAsync(input, 0, input.Length); - Assert.Equal(5, read); - content.Block.Release(); - read = await context.Request.Body.ReadAsync(input, 0, input.Length); - Assert.Equal(5, read); - context.Dispose(); - - string response = await responseTask; - Assert.Equal(string.Empty, response); - } - } - - [ConditionalFact] - public async Task RequestBody_PostWithImidateBody_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendSocketRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - byte[] input = new byte[11]; - int read = await context.Request.Body.ReadAsync(input, 0, input.Length); - Assert.Equal(10, read); - read = await context.Request.Body.ReadAsync(input, 0, input.Length); - Assert.Equal(0, read); - context.Response.ContentLength = 10; - await context.Response.Body.WriteAsync(input, 0, 10); - context.Dispose(); - - string response = await responseTask; - string[] lines = response.Split('\r', '\n'); - Assert.Equal(13, lines.Length); - Assert.Equal("HTTP/1.1 200 OK", lines[0]); - Assert.Equal("0123456789", lines[12]); - } - } - [ConditionalFact] public async Task RequestBody_ReadAsyncAlreadyCanceled_ReturnsCanceledTask() { @@ -364,51 +208,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - private async Task SendSocketRequestAsync(string address) - { - // Connect with a socket - Uri uri = new Uri(address); - TcpClient client = new TcpClient(); - try - { - await client.ConnectAsync(uri.Host, uri.Port); - NetworkStream stream = client.GetStream(); - - // Send an HTTP GET request - byte[] requestBytes = BuildPostRequest(uri); - await stream.WriteAsync(requestBytes, 0, requestBytes.Length); - StreamReader reader = new StreamReader(stream); - return await reader.ReadToEndAsync(); - } - catch (Exception) - { - ((IDisposable)client).Dispose(); - throw; - } - } - - private byte[] BuildPostRequest(Uri uri) - { - StringBuilder builder = new StringBuilder(); - builder.Append("POST"); - builder.Append(" "); - builder.Append(uri.PathAndQuery); - builder.Append(" HTTP/1.1"); - builder.AppendLine(); - - builder.Append("Host: "); - builder.Append(uri.Host); - builder.Append(':'); - builder.Append(uri.Port); - builder.AppendLine(); - - builder.AppendLine("Connection: close"); - builder.AppendLine("Content-Length: 10"); - builder.AppendLine(); - builder.Append("0123456789"); - return Encoding.ASCII.GetBytes(builder.ToString()); - } - private class StaggardContent : HttpContent { public StaggardContent() diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs index ddc11ac8b3..76a43ee8ba 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs @@ -15,57 +15,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { public class RequestHeaderTests { - [ConditionalFact] - public async Task RequestHeaders_ClientSendsDefaultHeaders_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var requestHeaders = context.Request.Headers; - // NOTE: The System.Net client only sends the Connection: keep-alive header on the first connection per service-point. - // Assert.Equal(2, requestHeaders.Count); - // Assert.Equal("Keep-Alive", requestHeaders.Get("Connection")); - Assert.Equal(new Uri(address).Authority, requestHeaders["Host"]); - StringValues values; - Assert.False(requestHeaders.TryGetValue("Accept", out values)); - Assert.False(requestHeaders.ContainsKey("Accept")); - Assert.True(StringValues.IsNullOrEmpty(requestHeaders["Accept"])); - context.Dispose(); - - string response = await responseTask; - Assert.Equal(string.Empty, response); - } - } - - [ConditionalFact] - public async Task RequestHeaders_ClientSendsCustomHeaders_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - string[] customValues = new string[] { "custom1, and custom2", "custom3" }; - Task responseTask = SendRequestAsync(address, "Custom-Header", customValues); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout); - var requestHeaders = context.Request.Headers; - Assert.Equal(4, requestHeaders.Count); - Assert.Equal(new Uri(address).Authority, requestHeaders["Host"]); - Assert.Equal(new[] { new Uri(address).Authority }, requestHeaders.GetValues("Host")); - Assert.Equal("close", requestHeaders["Connection"]); - Assert.Equal(new[] { "close" }, requestHeaders.GetValues("Connection")); - // Apparently Http.Sys squashes request headers together. - Assert.Equal("custom1, and custom2, custom3", requestHeaders["Custom-Header"]); - Assert.Equal(new[] { "custom1", "and custom2", "custom3" }, requestHeaders.GetValues("Custom-Header")); - Assert.Equal("spacervalue, spacervalue", requestHeaders["Spacer-Header"]); - Assert.Equal(new[] { "spacervalue", "spacervalue" }, requestHeaders.GetValues("Spacer-Header")); - context.Dispose(); - - await responseTask; - } - } [ConditionalFact] public async Task RequestHeaders_ClientSendsUtf8Headers_Success() @@ -144,14 +93,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - private async Task SendRequestAsync(string uri) - { - using (HttpClient client = new HttpClient()) - { - return await client.GetStringAsync(uri); - } - } - private async Task SendRequestAsync(string address, string customHeader, string[] customValues) { var uri = new Uri(address); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs index 6be075ba03..908b3f21c9 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs @@ -15,74 +15,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { public class RequestTests { - [ConditionalFact] - public async Task Request_SimpleGet_Success() - { - string root; - using (var server = Utilities.CreateHttpServerReturnRoot("/basepath", out root)) - { - Task responseTask = SendRequestAsync(root + "/basepath/SomePath?SomeQuery"); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - - // General fields - var request = context.Request; - - // Request Keys - Assert.Equal("GET", request.Method); - Assert.Equal(Stream.Null, request.Body); - Assert.NotNull(request.Headers); - Assert.Equal("http", request.Scheme); - Assert.Equal("/basepath", request.PathBase); - Assert.Equal("/SomePath", request.Path); - Assert.Equal("?SomeQuery", request.QueryString); - Assert.Equal(new Version(1, 1), request.ProtocolVersion); - - Assert.Equal("::1", request.RemoteIpAddress.ToString()); - Assert.NotEqual(0, request.RemotePort); - Assert.Equal("::1", request.LocalIpAddress.ToString()); - Assert.NotEqual(0, request.LocalPort); - - // Note: Response keys are validated in the ResponseTests - - context.Dispose(); - - string response = await responseTask; - Assert.Equal(string.Empty, response); - } - } - - [ConditionalTheory] - [InlineData("/", "/", "", "/")] - [InlineData("/basepath/", "/basepath", "/basepath", "")] - [InlineData("/basepath/", "/basepath/", "/basepath", "/")] - [InlineData("/basepath/", "/basepath/subpath", "/basepath", "/subpath")] - [InlineData("/base path/", "/base%20path/sub%20path", "/base path", "/sub path")] - [InlineData("/base葉path/", "/base%E8%91%89path/sub%E8%91%89path", "/base葉path", "/sub葉path")] - [InlineData("/basepath/", "/basepath/sub%2Fpath", "/basepath", "/sub%2Fpath")] - public async Task Request_PathSplitting(string pathBase, string requestPath, string expectedPathBase, string expectedPath) - { - string root; - using (var server = Utilities.CreateHttpServerReturnRoot(pathBase, out root)) - { - Task responseTask = SendRequestAsync(root + requestPath); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - - // General fields - var request = context.Request; - - // Request Keys - Assert.Equal("http", request.Scheme); - Assert.Equal(expectedPath, request.Path); - Assert.Equal(expectedPathBase, request.PathBase); - Assert.Equal(string.Empty, request.QueryString); - context.Dispose(); - - string response = await responseTask; - Assert.Equal(string.Empty, response); - } - } [ConditionalTheory] [InlineData("/path%")] @@ -102,35 +34,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - [ConditionalFact] - public async Task Request_DoubleEscapingAllowed() - { - string root; - using (var server = Utilities.CreateHttpServerReturnRoot("/", out root)) - { - var responseTask = SendSocketRequestAsync(root, "/%252F"); - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.Equal("/%2F", context.Request.Path); - } - } - - [ConditionalFact] - public async Task Request_FullUriInRequestLine_ParsesPath() - { - string root; - using (var server = Utilities.CreateHttpServerReturnRoot("/", out root)) - { - // Send a HTTP request with the request line: - // GET http://localhost:5001 HTTP/1.1 - var responseTask = SendSocketRequestAsync(root, root); - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.Equal("/", context.Request.Path); - Assert.Equal("", context.Request.PathBase); - Assert.Equal(root, context.Request.RawUrl); - Assert.False(root.EndsWith("/")); // make sure root doesn't have a trailing slash - } - } - [ConditionalFact] public async Task Request_OptionsStar_EmptyPath() { @@ -146,50 +49,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - [ConditionalTheory] - // The test server defines these prefixes: "/", "/11", "/2/3", "/2", "/11/2" - [InlineData("/", "", "/")] - [InlineData("/random", "", "/random")] - [InlineData("/11", "/11", "")] - [InlineData("/11/", "/11", "/")] - [InlineData("/11/random", "/11", "/random")] - [InlineData("/2", "/2", "")] - [InlineData("/2/", "/2", "/")] - [InlineData("/2/random", "/2", "/random")] - [InlineData("/2/3", "/2/3", "")] - [InlineData("/2/3/", "/2/3", "/")] - [InlineData("/2/3/random", "/2/3", "/random")] - public async Task Request_MultiplePrefixes(string requestUri, string expectedPathBase, string expectedPath) - { - // TODO: We're just doing this to get a dynamic port. This can be removed later when we add support for hot-adding prefixes. - string root; - var server = Utilities.CreateHttpServerReturnRoot("/", out root); - server.Dispose(); - server = new HttpSysListener(new HttpSysOptions(), new LoggerFactory()); - using (server) - { - var uriBuilder = new UriBuilder(root); - foreach (string path in new[] { "/", "/11", "/2/3", "/2", "/11/2" }) - { - server.Options.UrlPrefixes.Add(UrlPrefix.Create(uriBuilder.Scheme, uriBuilder.Host, uriBuilder.Port, path)); - } - server.Start(); - - Task responseTask = SendRequestAsync(root + requestUri); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var request = context.Request; - - Assert.Equal(expectedPath, request.Path); - Assert.Equal(expectedPathBase, request.PathBase); - - context.Dispose(); - - string response = await responseTask; - Assert.Equal(string.Empty, response); - } - } - [ConditionalTheory] [InlineData("%D0%A4", "Ф")] [InlineData("%d0%a4", "Ф")] @@ -279,14 +138,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - private async Task SendRequestAsync(string uri) - { - using (HttpClient client = new HttpClient()) - { - return await client.GetStringAsync(uri); - } - } - private async Task SendSocketRequestAsync(string address, string path, string method = "GET") { var uri = new Uri(address); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs index 27e051e4a7..4632c8eb56 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs @@ -51,30 +51,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - [ConditionalFact] - public async Task ResponseBody_WriteNoHeaders_DefaultsToChunked() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.Body.Write(new byte[10], 0, 10); - await context.Response.Body.WriteAsync(new byte[10], 0, 10); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - Assert.Equal(new Version(1, 1), response.Version); - IEnumerable ignored; - Assert.False(response.Content.Headers.TryGetValues("content-length", out ignored), "Content-Length"); - Assert.True(response.Headers.TransferEncodingChunked.Value, "Chunked"); - Assert.Equal(new byte[20], await response.Content.ReadAsByteArrayAsync()); - } - } - [ConditionalFact] public async Task ResponseBody_FlushThenWrite_DefaultsToChunkedAndTerminates() { @@ -99,144 +75,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - [ConditionalFact] - public async Task ResponseBody_WriteChunked_ManuallyChunked() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.Headers["transfeR-Encoding"] = "CHunked"; - Stream stream = context.Response.Body; - var responseBytes = Encoding.ASCII.GetBytes("10\r\nManually Chunked\r\n0\r\n\r\n"); - await stream.WriteAsync(responseBytes, 0, responseBytes.Length); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - Assert.Equal(new Version(1, 1), response.Version); - IEnumerable ignored; - Assert.False(response.Content.Headers.TryGetValues("content-length", out ignored), "Content-Length"); - Assert.True(response.Headers.TransferEncodingChunked.Value, "Chunked"); - Assert.Equal("Manually Chunked", await response.Content.ReadAsStringAsync()); - } - } - - [ConditionalFact] - public async Task ResponseBody_WriteContentLength_PassedThrough() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.Headers["Content-lenGth"] = " 30 "; - var stream = context.Response.Body; - stream.EndWrite(stream.BeginWrite(new byte[10], 0, 10, null, null)); - stream.Write(new byte[10], 0, 10); - await stream.WriteAsync(new byte[10], 0, 10); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - Assert.Equal(new Version(1, 1), response.Version); - IEnumerable contentLength; - Assert.True(response.Content.Headers.TryGetValues("content-length", out contentLength), "Content-Length"); - Assert.Equal("30", contentLength.First()); - Assert.Null(response.Headers.TransferEncodingChunked); - Assert.Equal(new byte[30], await response.Content.ReadAsByteArrayAsync()); - } - } - - [ConditionalFact] - public async Task ResponseBody_WriteContentLengthNoneWritten_Aborts() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.Headers["Content-lenGth"] = " 20 "; - context.Dispose(); -#if NET461 - // HttpClient retries the request because it didn't get a response. - context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.Headers["Content-lenGth"] = " 20 "; - context.Dispose(); -#elif NETCOREAPP2_2 -#else -#error Target framework needs to be updated -#endif - await Assert.ThrowsAsync(() => responseTask); - } - } - - [ConditionalFact] - public async Task ResponseBody_WriteContentLengthNotEnoughWritten_Aborts() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.Headers["Content-lenGth"] = " 20 "; - context.Response.Body.Write(new byte[5], 0, 5); - context.Dispose(); - - await Assert.ThrowsAsync(() => responseTask); - } - } - - [ConditionalFact] - public async Task ResponseBody_WriteContentLengthTooMuchWritten_Throws() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.Headers["Content-lenGth"] = " 10 "; - context.Response.Body.Write(new byte[5], 0, 5); - Assert.Throws(() => context.Response.Body.Write(new byte[6], 0, 6)); - context.Dispose(); - - await Assert.ThrowsAsync(() => responseTask); - } - } - - [ConditionalFact] - public async Task ResponseBody_WriteContentLengthExtraWritten_Throws() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.Headers["Content-lenGth"] = " 10 "; - context.Response.Body.Write(new byte[10], 0, 10); - Assert.Throws(() => context.Response.Body.Write(new byte[6], 0, 6)); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - Assert.Equal(new Version(1, 1), response.Version); - IEnumerable contentLength; - Assert.True(response.Content.Headers.TryGetValues("content-length", out contentLength), "Content-Length"); - Assert.Equal("10", contentLength.First()); - Assert.Null(response.Headers.TransferEncodingChunked); - Assert.Equal(new byte[10], await response.Content.ReadAsByteArrayAsync()); - } - } - [ConditionalFact] public async Task ResponseBody_WriteZeroCount_StartsChunkedResponse() { diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs index 808c688824..0d1ced7bf2 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs @@ -206,163 +206,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - [ConditionalFact] - public async Task ResponseHeaders_ServerSendsSingleValueKnownHeaders_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - WebRequest request = WebRequest.Create(address); - Task responseTask = request.GetResponseAsync(); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var responseHeaders = context.Response.Headers; - responseHeaders["WWW-Authenticate"] = "custom1"; - context.Dispose(); - - // HttpClient would merge the headers no matter what - HttpWebResponse response = (HttpWebResponse)await responseTask; - Assert.Equal(4, response.Headers.Count); - Assert.Null(response.Headers["Transfer-Encoding"]); - Assert.Equal(0, response.ContentLength); - Assert.NotNull(response.Headers["Date"]); - Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); - Assert.Equal("custom1", response.Headers["WWW-Authenticate"]); - } - } - - [ConditionalFact] - public async Task ResponseHeaders_ServerSendsMultiValueKnownHeaders_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - WebRequest request = WebRequest.Create(address); - Task responseTask = request.GetResponseAsync(); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var responseHeaders = context.Response.Headers; - responseHeaders["WWW-Authenticate"] = new[] { "custom1, and custom2", "custom3" }; - context.Dispose(); - - // HttpClient would merge the headers no matter what - HttpWebResponse response = (HttpWebResponse)await responseTask; - Assert.Equal(4, response.Headers.Count); - Assert.Null(response.Headers["Transfer-Encoding"]); - Assert.Equal(0, response.ContentLength); - Assert.NotNull(response.Headers["Date"]); - Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); -#if NETCOREAPP2_2 // WebHeaderCollection.GetValues() not available in CoreCLR. - Assert.Equal("custom1, and custom2, custom3", response.Headers["WWW-Authenticate"]); -#elif NET461 - Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("WWW-Authenticate")); -#else -#error Target framework needs to be updated -#endif - } - } - - [ConditionalFact] - public async Task ResponseHeaders_ServerSendsCustomHeaders_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - WebRequest request = WebRequest.Create(address); - Task responseTask = request.GetResponseAsync(); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var responseHeaders = context.Response.Headers; - responseHeaders["Custom-Header1"] = new[] { "custom1, and custom2", "custom3" }; - context.Dispose(); - - // HttpClient would merge the headers no matter what - HttpWebResponse response = (HttpWebResponse)await responseTask; - Assert.Equal(4, response.Headers.Count); - Assert.Null(response.Headers["Transfer-Encoding"]); - Assert.Equal(0, response.ContentLength); - Assert.NotNull(response.Headers["Date"]); - Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); -#if NETCOREAPP2_2 // WebHeaderCollection.GetValues() not available in CoreCLR. - Assert.Equal("custom1, and custom2, custom3", response.Headers["Custom-Header1"]); -#elif NET461 - Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("Custom-Header1")); -#else -#error Target framework needs to be updated -#endif - } - } - - [ConditionalFact] - public async Task ResponseHeaders_ServerSendsConnectionClose_Closed() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var responseHeaders = context.Response.Headers; - responseHeaders["Connection"] = "Close"; - context.Dispose(); - - HttpResponseMessage response = await responseTask; - response.EnsureSuccessStatusCode(); - Assert.True(response.Headers.ConnectionClose.Value); - Assert.Equal(new string[] { "close" }, response.Headers.GetValues("Connection")); - } - } - - [ConditionalFact] - public async Task ResponseHeaders_HTTP10Request_Gets11Close() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address, usehttp11: false); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Dispose(); - - HttpResponseMessage response = await responseTask; - response.EnsureSuccessStatusCode(); - Assert.Equal(new Version(1, 1), response.Version); - Assert.True(response.Headers.ConnectionClose.Value); - Assert.Equal(new string[] { "close" }, response.Headers.GetValues("Connection")); - } - } - - [ConditionalFact] - public async Task ResponseHeaders_HTTP10Request_AllowsManualChunking() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - using (HttpClient client = new HttpClient()) - { - HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, address); - request.Version = new Version(1, 0); - Task responseTask = client.SendAsync(request); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var responseHeaders = context.Response.Headers; - responseHeaders["Transfer-Encoding"] = "chunked"; - var responseBytes = Encoding.ASCII.GetBytes("10\r\nManually Chunked\r\n0\r\n\r\n"); - await context.Response.Body.WriteAsync(responseBytes, 0, responseBytes.Length); - context.Dispose(); - - HttpResponseMessage response = await responseTask; - response.EnsureSuccessStatusCode(); - Assert.Equal(new Version(1, 1), response.Version); - Assert.True(response.Headers.TransferEncodingChunked.Value); - Assert.False(response.Content.Headers.Contains("Content-Length")); - Assert.True(response.Headers.ConnectionClose.Value); - Assert.Equal(new string[] { "close" }, response.Headers.GetValues("Connection")); - Assert.Equal("Manually Chunked", await response.Content.ReadAsStringAsync()); - } - } - } - [ConditionalFact] public async Task ResponseHeaders_HTTP10KeepAliveRequest_Gets11Close() { @@ -382,79 +225,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - [ConditionalFact] - public async Task Headers_FlushSendsHeaders_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address); - - server.Options.AllowSynchronousIO = true; - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var responseHeaders = context.Response.Headers; - - responseHeaders["Custom1"] = new[] { "value1a", "value1b" }; - responseHeaders["Custom2"] = "value2a, value2b"; - var body = context.Response.Body; - Assert.False(context.Response.HasStarted); - body.Flush(); - Assert.True(context.Response.HasStarted); - var ex = Assert.Throws(() => context.Response.StatusCode = 404); - Assert.Equal("Headers already sent.", ex.Message); - ex = Assert.Throws(() => responseHeaders.Add("Custom3", new string[] { "value3a, value3b", "value3c" })); - Assert.Equal("The response headers cannot be modified because the response has already started.", ex.Message); - - context.Dispose(); - - HttpResponseMessage response = await responseTask; - response.EnsureSuccessStatusCode(); - Assert.Equal(5, response.Headers.Count()); // Date, Server, Chunked - - Assert.Equal(2, response.Headers.GetValues("Custom1").Count()); - Assert.Equal("value1a", response.Headers.GetValues("Custom1").First()); - Assert.Equal("value1b", response.Headers.GetValues("Custom1").Skip(1).First()); - Assert.Single(response.Headers.GetValues("Custom2")); - Assert.Equal("value2a, value2b", response.Headers.GetValues("Custom2").First()); - } - } - - [ConditionalFact] - public async Task Headers_FlushAsyncSendsHeaders_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var responseHeaders = context.Response.Headers; - - responseHeaders["Custom1"] = new[] { "value1a", "value1b" }; - responseHeaders["Custom2"] = "value2a, value2b"; - var body = context.Response.Body; - Assert.False(context.Response.HasStarted); - await body.FlushAsync(); - Assert.True(context.Response.HasStarted); - var ex = Assert.Throws(() => context.Response.StatusCode = 404); - Assert.Equal("Headers already sent.", ex.Message); - ex = Assert.Throws(() => responseHeaders.Add("Custom3", new string[] { "value3a, value3b", "value3c" })); - Assert.Equal("The response headers cannot be modified because the response has already started.", ex.Message); - - context.Dispose(); - - HttpResponseMessage response = await responseTask; - response.EnsureSuccessStatusCode(); - Assert.Equal(5, response.Headers.Count()); // Date, Server, Chunked - - Assert.Equal(2, response.Headers.GetValues("Custom1").Count()); - Assert.Equal("value1a", response.Headers.GetValues("Custom1").First()); - Assert.Equal("value1b", response.Headers.GetValues("Custom1").Skip(1).First()); - Assert.Single(response.Headers.GetValues("Custom2")); - Assert.Equal("value2a, value2b", response.Headers.GetValues("Custom2").First()); - } - } - [ConditionalTheory] [InlineData("Server", "\r\nData")] [InlineData("Server", "\0Data")] diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs index a4247900ba..0417776e96 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs @@ -26,187 +26,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener FileLength = new FileInfo(AbsoluteFilePath).Length; } - [ConditionalFact] - public async Task ResponseSendFile_MissingFile_Throws() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - await Assert.ThrowsAsync(() => - context.Response.SendFileAsync("Missing.txt", 0, null, CancellationToken.None)); - context.Dispose(); - - var response = await responseTask; - response.EnsureSuccessStatusCode(); - } - } - - [ConditionalFact] - public async Task ResponseSendFile_NoHeaders_DefaultsToChunked() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - IEnumerable ignored; - Assert.False(response.Content.Headers.TryGetValues("content-length", out ignored), "Content-Length"); - Assert.True(response.Headers.TransferEncodingChunked.Value, "Chunked"); - Assert.Equal(FileLength, (await response.Content.ReadAsByteArrayAsync()).Length); - } - } - - [ConditionalFact] - public async Task ResponseSendFile_RelativeFile_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - await context.Response.SendFileAsync(RelativeFilePath, 0, null, CancellationToken.None); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - IEnumerable ignored; - Assert.False(response.Content.Headers.TryGetValues("content-length", out ignored), "Content-Length"); - Assert.True(response.Headers.TransferEncodingChunked.Value, "Chunked"); - Assert.Equal(FileLength, (await response.Content.ReadAsByteArrayAsync()).Length); - } - } - - [ConditionalFact] - public async Task ResponseSendFile_Unspecified_Chunked() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - IEnumerable contentLength; - Assert.False(response.Content.Headers.TryGetValues("content-length", out contentLength), "Content-Length"); - Assert.True(response.Headers.TransferEncodingChunked.Value); - Assert.Equal(FileLength, (await response.Content.ReadAsByteArrayAsync()).Length); - } - } - - [ConditionalFact] - public async Task ResponseSendFile_MultipleWrites_Chunked() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); - await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - IEnumerable contentLength; - Assert.False(response.Content.Headers.TryGetValues("content-length", out contentLength), "Content-Length"); - Assert.True(response.Headers.TransferEncodingChunked.Value); - Assert.Equal(FileLength * 2, (await response.Content.ReadAsByteArrayAsync()).Length); - } - } - - [ConditionalFact] - public async Task ResponseSendFile_HalfOfFile_Chunked() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - await context.Response.SendFileAsync(AbsoluteFilePath, 0, FileLength / 2, CancellationToken.None); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - IEnumerable contentLength; - Assert.False(response.Content.Headers.TryGetValues("content-length", out contentLength), "Content-Length"); - Assert.True(response.Headers.TransferEncodingChunked.Value); - Assert.Equal(FileLength / 2, (await response.Content.ReadAsByteArrayAsync()).Length); - } - } - - [ConditionalFact] - public async Task ResponseSendFile_OffsetOutOfRange_Throws() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - await Assert.ThrowsAsync( - () => context.Response.SendFileAsync(AbsoluteFilePath, 1234567, null, CancellationToken.None)); - context.Dispose(); - - var response = await responseTask; - response.EnsureSuccessStatusCode(); - } - } - - [ConditionalFact] - public async Task ResponseSendFile_CountOutOfRange_Throws() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - await Assert.ThrowsAsync( - () => context.Response.SendFileAsync(AbsoluteFilePath, 0, 1234567, CancellationToken.None)); - context.Dispose(); - - var response = await responseTask; - response.EnsureSuccessStatusCode(); - } - } - - [ConditionalFact] - public async Task ResponseSendFile_Count0_Chunked() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - await context.Response.SendFileAsync(AbsoluteFilePath, 0, 0, CancellationToken.None); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - IEnumerable contentLength; - Assert.False(response.Content.Headers.TryGetValues("content-length", out contentLength), "Content-Length"); - Assert.True(response.Headers.TransferEncodingChunked.Value); - Assert.Empty((await response.Content.ReadAsByteArrayAsync())); - } - } - [ConditionalFact] public async Task ResponseSendFile_EmptyFileCountUnspecified_SetsChunkedAndFlushesHeaders() { @@ -235,74 +54,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - [ConditionalFact] - public async Task ResponseSendFile_ContentLength_PassedThrough() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.Headers["Content-lenGth"] = FileLength.ToString(); - await context.Response.SendFileAsync(AbsoluteFilePath, 0, null, CancellationToken.None); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - IEnumerable contentLength; - Assert.True(response.Content.Headers.TryGetValues("content-length", out contentLength), "Content-Length"); - Assert.Equal(FileLength.ToString(), contentLength.First()); - Assert.Null(response.Headers.TransferEncodingChunked); - Assert.Equal(FileLength, (await response.Content.ReadAsByteArrayAsync()).Length); - } - } - - [ConditionalFact] - public async Task ResponseSendFile_ContentLengthSpecific_PassedThrough() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.Headers["Content-lenGth"] = "10"; - await context.Response.SendFileAsync(AbsoluteFilePath, 0, 10, CancellationToken.None); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - IEnumerable contentLength; - Assert.True(response.Content.Headers.TryGetValues("content-length", out contentLength), "Content-Length"); - Assert.Equal("10", contentLength.First()); - Assert.Null(response.Headers.TransferEncodingChunked); - Assert.Equal(10, (await response.Content.ReadAsByteArrayAsync()).Length); - } - } - - [ConditionalFact] - public async Task ResponseSendFile_ContentLength0_PassedThrough() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.Headers["Content-lenGth"] = "0"; - await context.Response.SendFileAsync(AbsoluteFilePath, 0, 0, CancellationToken.None); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(200, (int)response.StatusCode); - IEnumerable contentLength; - Assert.True(response.Content.Headers.TryGetValues("content-length", out contentLength), "Content-Length"); - Assert.Equal("0", contentLength.First()); - Assert.Null(response.Headers.TransferEncodingChunked); - Assert.Empty((await response.Content.ReadAsByteArrayAsync())); - } - } - [ConditionalFact] public async Task ResponseSendFile_WithActiveCancellationToken_Success() { diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseTests.cs deleted file mode 100644 index a151eaffe8..0000000000 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseTests.cs +++ /dev/null @@ -1,137 +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; -using System.Net; -using System.Net.Http; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Testing.xunit; -using Xunit; - -namespace Microsoft.AspNetCore.Server.HttpSys.Listener -{ - public class ResponseTests - { - [ConditionalFact] - public async Task Response_ServerSendsDefaultResponse_ServerProvidesStatusCodeAndReasonPhrase() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.Equal(200, context.Response.StatusCode); - context.Dispose(); - - HttpResponseMessage response = await responseTask; - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.Equal("OK", response.ReasonPhrase); - Assert.Equal(new Version(1, 1), response.Version); - Assert.Equal(string.Empty, await response.Content.ReadAsStringAsync()); - } - } - - [ConditionalFact] - public async Task Response_ServerSendsSpecificStatus_ServerProvidesReasonPhrase() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.StatusCode = 201; - // TODO: env["owin.ResponseProtocol"] = "HTTP/1.0"; // Http.Sys ignores this value - context.Dispose(); - - HttpResponseMessage response = await responseTask; - Assert.Equal(201, (int)response.StatusCode); - Assert.Equal("Created", response.ReasonPhrase); - Assert.Equal(new Version(1, 1), response.Version); - Assert.Equal(string.Empty, await response.Content.ReadAsStringAsync()); - } - } - - [ConditionalFact] - public async Task Response_ServerSendsSpecificStatusAndReasonPhrase_PassedThrough() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.StatusCode = 201; - context.Response.ReasonPhrase = "CustomReasonPhrase"; - // TODO: env["owin.ResponseProtocol"] = "HTTP/1.0"; // Http.Sys ignores this value - context.Dispose(); - - HttpResponseMessage response = await responseTask; - Assert.Equal(201, (int)response.StatusCode); - Assert.Equal("CustomReasonPhrase", response.ReasonPhrase); - Assert.Equal(new Version(1, 1), response.Version); - Assert.Equal(string.Empty, await response.Content.ReadAsStringAsync()); - } - } - - [ConditionalFact] - public async Task Response_ServerSendsCustomStatus_NoReasonPhrase() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.StatusCode = 901; - context.Dispose(); - - HttpResponseMessage response = await responseTask; - Assert.Equal(901, (int)response.StatusCode); - Assert.Equal(string.Empty, response.ReasonPhrase); - Assert.Equal(string.Empty, await response.Content.ReadAsStringAsync()); - } - } - - [ConditionalFact] - public async Task Response_100_Throws() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.Throws(() => { context.Response.StatusCode = 100; }); - context.Dispose(); - - HttpResponseMessage response = await responseTask; - } - } - - [ConditionalFact] - public async Task Response_0_Throws() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - Assert.Throws(() => { context.Response.StatusCode = 0; }); - context.Dispose(); - - HttpResponseMessage response = await responseTask; - } - } - - private async Task SendRequestAsync(string uri) - { - using (HttpClient client = new HttpClient()) - { - return await client.GetAsync(uri); - } - } - } -} \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs index 9137873fc7..2cb25cc3c1 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs @@ -16,93 +16,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener { public class ServerTests { - [ConditionalFact] - public async Task Server_200OK_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(string.Empty, response); - } - } - - [ConditionalFact] - public async Task Server_SendHelloWorld_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - Task responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Response.ContentLength = 11; - var writer = new StreamWriter(context.Response.Body); - await writer.WriteAsync("Hello World"); - await writer.FlushAsync(); - - string response = await responseTask; - Assert.Equal("Hello World", response); - } - } - - [ConditionalFact] - public async Task Server_EchoHelloWorld_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address, "Hello World"); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var input = await new StreamReader(context.Request.Body).ReadToEndAsync(); - Assert.Equal("Hello World", input); - context.Response.ContentLength = 11; - var writer = new StreamWriter(context.Response.Body); - await writer.WriteAsync("Hello World"); - await writer.FlushAsync(); - - var response = await responseTask; - Assert.Equal("Hello World", response); - } - } - - [ConditionalFact] - public async Task Server_ClientDisconnects_CallCanceled() - { - var interval = TimeSpan.FromSeconds(1); - var canceled = new ManualResetEvent(false); - - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - using (var client = new HttpClient()) - { - var responseTask = client.GetAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var ct = context.DisconnectToken; - Assert.True(ct.CanBeCanceled, "CanBeCanceled"); - Assert.False(ct.IsCancellationRequested, "IsCancellationRequested"); - ct.Register(() => canceled.Set()); - - client.CancelPendingRequests(); - - Assert.True(canceled.WaitOne(interval), "canceled"); - Assert.True(ct.IsCancellationRequested, "IsCancellationRequested"); - - await Assert.ThrowsAnyAsync(() => responseTask); - - context.Dispose(); - } - } - } - [ConditionalFact] public async Task Server_TokenRegisteredAfterClientDisconnects_CallCanceled() { @@ -165,37 +78,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - [ConditionalFact] - public async Task Server_Abort_CallCanceled() - { - var interval = TimeSpan.FromSeconds(1); - var canceled = new ManualResetEvent(false); - - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - var ct = context.DisconnectToken; - Assert.True(ct.CanBeCanceled, "CanBeCanceled"); - Assert.False(ct.IsCancellationRequested, "IsCancellationRequested"); - ct.Register(() => canceled.Set()); - context.Abort(); - Assert.True(canceled.WaitOne(interval), "Aborted"); - Assert.True(ct.IsCancellationRequested, "IsCancellationRequested"); -#if NET461 - // HttpClient re-tries the request because it doesn't know if the request was received. - context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Abort(); -#elif NETCOREAPP2_2 -#else -#error Target framework needs to be updated -#endif - await Assert.ThrowsAsync(() => responseTask); - } - } - [ConditionalFact] public async Task Server_ConnectionCloseHeader_CancellationTokenFires() { @@ -228,23 +110,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener } } - [ConditionalFact] - public async Task Server_SetQueueLimit_Success() - { - string address; - using (var server = Utilities.CreateHttpServer(out address)) - { - server.Options.RequestQueueLimit = 1001; - var responseTask = SendRequestAsync(address); - - var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); - context.Dispose(); - - var response = await responseTask; - Assert.Equal(string.Empty, response); - } - } - [ConditionalFact] public async Task Server_SetRejectionVerbosityLevel_Success() { @@ -331,15 +196,5 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener return await client.GetStringAsync(uri); } } - - private async Task SendRequestAsync(string uri, string upload) - { - using (HttpClient client = new HttpClient()) - { - HttpResponseMessage response = await client.PostAsync(uri, new StringContent(upload)); - response.EnsureSuccessStatusCode(); - return await response.Content.ReadAsStringAsync(); - } - } } } diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs index e090cbfdd7..e17ecb0aff 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs @@ -28,14 +28,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener IsWin8orLater = (Environment.OSVersion.Version >= win8Version); } - internal static HttpSysListener CreateHttpAuthServer(AuthenticationSchemes authScheme, bool allowAnonymos, out string baseAddress) - { - var listener = CreateHttpServer(out baseAddress); - listener.Options.Authentication.Schemes = authScheme; - listener.Options.Authentication.AllowAnonymous = allowAnonymos; - return listener; - } - internal static HttpSysListener CreateHttpServer(out string baseAddress) { string root; From 66b6b0909a173877f4acaa06195d693e0957e8e8 Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Tue, 16 Oct 2018 12:48:15 -0700 Subject: [PATCH 39/44] Update package branding for 2.2 RTM --- version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.props b/version.props index 704cac087b..4889a26987 100644 --- a/version.props +++ b/version.props @@ -1,7 +1,7 @@ 2.2.0 - preview3 + rtm $(VersionPrefix) $(VersionPrefix)-$(VersionSuffix)-final t000 From 33386e424a127a9eaa1b423f60d9564846d0192f Mon Sep 17 00:00:00 2001 From: "Chris Ross (ASP.NET)" Date: Fri, 19 Oct 2018 09:48:01 -0700 Subject: [PATCH 40/44] Re-enable skipped auth test #474 --- .../AuthenticationTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs index 4e631f2566..f533303309 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs @@ -346,7 +346,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys } } - [ConditionalTheory(Skip = "https://github.com/aspnet/HttpSysServer/issues/474")] + [ConditionalTheory] [InlineData(AuthenticationSchemes.Negotiate)] [InlineData(AuthenticationSchemes.NTLM)] // [InlineData(AuthenticationSchemes.Digest)] // Not implemented From 30870b34c0d0c2183f8c123ea4b1613078a0b6d7 Mon Sep 17 00:00:00 2001 From: "Chris Ross (ASP.NET)" Date: Fri, 19 Oct 2018 12:36:08 -0700 Subject: [PATCH 41/44] Fix abort race in response body tests #451 --- .../Listener/ResponseBodyTests.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs index 4632c8eb56..044c6cf445 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs @@ -221,12 +221,13 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var cts = new CancellationTokenSource(); // First write sends headers await context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); + var response = await responseTask; cts.Cancel(); var writeTask = context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); Assert.True(writeTask.IsCanceled); context.Dispose(); - await Assert.ThrowsAsync(() => responseTask); + await Assert.ThrowsAsync(() => response.Content.LoadIntoBufferAsync()); } } @@ -242,12 +243,13 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var cts = new CancellationTokenSource(); // First write sends headers await context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); + var response = await responseTask; cts.Cancel(); var writeTask = context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); Assert.True(writeTask.IsCanceled); context.Dispose(); - await Assert.ThrowsAsync(() => responseTask); + await Assert.ThrowsAsync(() => response.Content.LoadIntoBufferAsync()); } } @@ -492,9 +494,9 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener private async Task SendRequestAsync(string uri, CancellationToken cancellationToken = new CancellationToken()) { - using (HttpClient client = new HttpClient()) + using (HttpClient client = new HttpClient() { Timeout = Utilities.DefaultTimeout }) { - return await client.GetAsync(uri, cancellationToken); + return await client.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead, cancellationToken); } } } From 0a22b927b20d79177cf97e10111190ab812b98a7 Mon Sep 17 00:00:00 2001 From: "Chris Ross (ASP.NET)" Date: Mon, 22 Oct 2018 11:48:24 -0700 Subject: [PATCH 42/44] Use GUIDs for cache tests. --- .../Listener/ResponseCachingTests.cs | 33 +++++++++++++++++++ .../ResponseCachingTests.cs | 10 ++++++ 2 files changed, 43 insertions(+) diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs index dbd5e89a0e..91aa87d79c 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs @@ -30,6 +30,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -69,6 +70,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -96,6 +98,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -125,6 +128,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -156,6 +160,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -188,6 +193,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -222,6 +228,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -256,6 +263,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -290,6 +298,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -317,6 +326,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -348,6 +358,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -379,6 +390,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); server.Options.AllowSynchronousIO = true; @@ -413,6 +425,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -447,6 +460,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -478,6 +492,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -511,6 +526,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -542,6 +558,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. // Http.Sys will cache almost any status code. for (int status = 200; status < 600; status++) { @@ -618,6 +635,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address, method); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -676,6 +694,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. // Cache the first response var responseTask = SendRequestAsync(address); @@ -722,6 +741,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address, "GET", "x-vary", "vary1"); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -753,6 +773,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address, "GET", "Authorization", "Basic abc123"); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -787,6 +808,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -823,6 +845,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address, "GET", "Pragma", "no-cache"); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -852,6 +875,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -880,6 +904,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address, "GET", "Cache-Control", "no-cache"); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -908,6 +933,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -936,6 +962,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -964,6 +991,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -991,6 +1019,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address, "GET", "Range", "bytes=0-10"); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -1035,6 +1064,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -1065,6 +1095,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); @@ -1093,6 +1124,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseLength = _fileLength / 2; // Make sure it handles partial files. var responseTask = SendRequestAsync(address); @@ -1125,6 +1157,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener string address; using (var server = Utilities.CreateHttpServer(out address)) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. var responseLength = _fileLength / 2; // Make sure it handles partial files. var responseTask = SendRequestAsync(address); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseCachingTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseCachingTests.cs index 6a2fe8c57d..6b4c30a4db 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseCachingTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseCachingTests.cs @@ -25,6 +25,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests return httpContext.Response.Body.WriteAsync(new byte[10], 0, 10); })) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. Assert.Equal("1", await SendRequestAsync(address)); Assert.Equal("2", await SendRequestAsync(address)); } @@ -44,6 +45,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests return httpContext.Response.Body.WriteAsync(new byte[10], 0, 10); })) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. Assert.Equal("1", await SendRequestAsync(address)); Assert.Equal("2", await SendRequestAsync(address)); } @@ -63,6 +65,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests return httpContext.Response.Body.WriteAsync(new byte[10], 0, 10); })) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. Assert.Equal("1", await SendRequestAsync(address)); Assert.Equal("1", await SendRequestAsync(address)); } @@ -82,6 +85,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests return httpContext.Response.Body.WriteAsync(new byte[10], 0, 10); })) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. Assert.Equal("1", await SendRequestAsync(address)); Assert.Equal("1", await SendRequestAsync(address)); } @@ -101,6 +105,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests return httpContext.Response.Body.WriteAsync(new byte[10], 0, 10); })) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. Assert.Equal("1", await SendRequestAsync(address)); Assert.Equal("1", await SendRequestAsync(address)); } @@ -121,6 +126,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests return httpContext.Response.Body.WriteAsync(new byte[10], 0, 10); })) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. Assert.Equal("1", await SendRequestAsync(address)); Assert.Equal("1", await SendRequestAsync(address)); } @@ -144,6 +150,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests return httpContext.Response.Body.WriteAsync(new byte[10], 0, 10); })) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. Assert.Equal("1", await SendRequestAsync(address)); Assert.Equal("2", await SendRequestAsync(address)); } @@ -166,6 +173,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests return httpContext.Response.Body.WriteAsync(new byte[10], 0, 10); })) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. Assert.Equal("1", await SendRequestAsync(address)); Assert.Equal("2", await SendRequestAsync(address)); } @@ -185,6 +193,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests return httpContext.Response.Body.WriteAsync(new byte[10], 0, 10); })) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. Assert.Equal("1", await SendRequestAsync(address)); Assert.Equal("2", await SendRequestAsync(address)); } @@ -205,6 +214,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests return httpContext.Response.Body.WriteAsync(new byte[10], 0, 10); })) { + address += Guid.NewGuid().ToString(); // Avoid cache collisions for failed tests. Assert.Equal("1", await SendRequestAsync(address)); Assert.Equal("1", await SendRequestAsync(address)); } From 3e08bf8833827737a5bd1b64210c7a5e8e2941ec Mon Sep 17 00:00:00 2001 From: "Chris Ross (ASP.NET)" Date: Tue, 30 Oct 2018 12:58:21 -0700 Subject: [PATCH 43/44] Move tests to net472 --- HttpSysServer.sln | 2 ++ build/dependencies.props | 1 + build/sources.props | 1 + test/Directory.Build.props | 7 ++++++- .../Listener/ResponseBodyTests.cs | 4 ++-- .../Listener/ResponseSendFileTests.cs | 4 ++-- .../ResponseHeaderTests.cs | 4 ++-- 7 files changed, 16 insertions(+), 7 deletions(-) diff --git a/HttpSysServer.sln b/HttpSysServer.sln index adc3b6d351..d0b62c0c4f 100644 --- a/HttpSysServer.sln +++ b/HttpSysServer.sln @@ -43,6 +43,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{85914BA9 ProjectSection(SolutionItems) = preProject build\dependencies.props = build\dependencies.props build\Key.snk = build\Key.snk + build\repo.props = build\repo.props + build\sources.props = build\sources.props EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{AB6964C9-A7AF-4FAC-BEA1-C8A538EC989E}" diff --git a/build/dependencies.props b/build/dependencies.props index 759b586f0b..b5a02dc564 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -11,6 +11,7 @@ 2.0.9 2.1.3 2.2.0-preview3-27008-03 + 1.0.0-alpha-004 2.2.0-preview3-35457 15.6.1 4.5.0 diff --git a/build/sources.props b/build/sources.props index 9215df9751..2fcf9273e5 100644 --- a/build/sources.props +++ b/build/sources.props @@ -8,6 +8,7 @@ https://dotnet.myget.org/F/dotnet-core/api/v3/index.json; https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json; https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json; + https://dotnet.myget.org/F/roslyn-tools/api/v3/index.json; $(RestoreSources); diff --git a/test/Directory.Build.props b/test/Directory.Build.props index 2a5bdfba94..f66637ad9f 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -5,7 +5,7 @@ netcoreapp2.2 $(DeveloperBuildTestTfms) $(StandardTestTfms) - $(StandardTestTfms);net461 + $(StandardTestTfms);net472 @@ -15,4 +15,9 @@ + + + + + diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs index 044c6cf445..1b3bbd7a33 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs @@ -159,7 +159,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var writeTask = context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); Assert.True(writeTask.IsCanceled); context.Dispose(); -#if NET461 +#if NET472 // HttpClient retries the request because it didn't get a response. context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); cts = new CancellationTokenSource(); @@ -191,7 +191,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var writeTask = context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); Assert.True(writeTask.IsCanceled); context.Dispose(); -#if NET461 +#if NET472 // HttpClient retries the request because it didn't get a response. context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); cts = new CancellationTokenSource(); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs index 0417776e96..3400b5c51e 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs @@ -113,7 +113,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var writeTask = context.Response.SendFileAsync(AbsoluteFilePath, 0, null, cts.Token); Assert.True(writeTask.IsCanceled); context.Dispose(); -#if NET461 +#if NET472 // .NET HttpClient automatically retries a request if it does not get a response. context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); cts = new CancellationTokenSource(); @@ -145,7 +145,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener var writeTask = context.Response.SendFileAsync(AbsoluteFilePath, 0, null, cts.Token); Assert.True(writeTask.IsCanceled); context.Dispose(); -#if NET461 +#if NET472 // .NET HttpClient automatically retries a request if it does not get a response. context = await server.AcceptAsync(Utilities.DefaultTimeout).Before(responseTask); cts = new CancellationTokenSource(); diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs index ca399249f1..270e5aeaa7 100644 --- a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs +++ b/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs @@ -83,7 +83,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); #if NETCOREAPP2_2 // WebHeaderCollection.GetValues() not available in CoreCLR. Assert.Equal("custom1, and custom2, custom3", response.Headers["WWW-Authenticate"]); -#elif NET461 +#elif NET472 Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("WWW-Authenticate")); #else #error Target framework needs to be updated @@ -113,7 +113,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); #if NETCOREAPP2_2 // WebHeaderCollection.GetValues() not available in CoreCLR. Assert.Equal("custom1, and custom2, custom3", response.Headers["Custom-Header1"]); -#elif NET461 +#elif NET472 Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("Custom-Header1")); #else #error Target framework needs to be updated From bd3a77ec8e4171e16f0289416543b8b0d8198df0 Mon Sep 17 00:00:00 2001 From: Ryan Brandenburg Date: Wed, 21 Nov 2018 16:02:22 -0800 Subject: [PATCH 44/44] Reorganize source code in preparation to move into aspnet/AspNetCore Prior to reorganization, this source code was found in https://github.com/aspnet/HttpSysServer/tree/3e08bf8833827737a5bd1b64210c7a5e8e2941ec --- .appveyor.yml | 17 -- .gitattributes | 51 ---- .travis.yml | 27 -- .vsts-pipelines/builds/ci-internal.yml | 13 - .vsts-pipelines/builds/ci-public.yml | 15 - CONTRIBUTING.md | 4 - LICENSE.txt | 14 - NuGet.config | 7 - build.cmd | 2 - build.sh | 8 - korebuild-lock.txt | 2 - korebuild.json | 4 - run.cmd | 2 - run.ps1 | 209 -------------- run.sh | 256 ------------------ .gitignore => src/HttpSysServer/.gitignore | 0 .../HttpSysServer/Directory.Build.props | 0 .../HttpSysServer/Directory.Build.targets | 0 .../HttpSysServer/HttpSysServer.sln | 0 .../HttpSysServer/NuGetPackageVerifier.json | 0 README.md => src/HttpSysServer/README.md | 0 {build => src/HttpSysServer/build}/Key.snk | Bin .../HttpSysServer/build}/dependencies.props | 0 {build => src/HttpSysServer/build}/repo.props | 0 .../HttpSysServer/build}/sources.props | 0 .../samples}/HotAddSample/HotAddSample.csproj | 0 .../Properties/launchSettings.json | 0 .../samples}/HotAddSample/Startup.cs | 0 .../samples}/SelfHostServer/App.config | 0 .../Properties/launchSettings.json | 0 .../samples}/SelfHostServer/Public/1kb.txt | 0 .../SelfHostServer/SelfHostServer.csproj | 0 .../samples}/SelfHostServer/Startup.cs | 0 .../samples}/TestClient/App.config | 0 .../samples}/TestClient/Program.cs | 0 .../TestClient/Properties/AssemblyInfo.cs | 0 .../samples}/TestClient/TestClient.csproj | 0 .../Constants.cs | 0 .../NativeInterop/CookedUrl.cs | 0 .../NativeInterop/HeapAllocHandle.cs | 0 .../NativeInterop/HttpApiTypes.cs | 0 .../NativeInterop/HttpSysRequestHeader.cs | 0 .../NativeInterop/HttpSysResponseHeader.cs | 0 .../NativeInterop/NclUtilities.cs | 0 .../SafeLocalFreeChannelBinding.cs | 0 .../NativeInterop/SafeLocalMemHandle.cs | 0 .../NativeInterop/SafeNativeOverlapped.cs | 0 .../NativeInterop/SocketAddress.cs | 0 .../NativeInterop/UnsafeNativeMethods.cs | 0 .../RequestProcessing/HeaderCollection.cs | 0 .../RequestProcessing/HeaderEncoding.cs | 0 .../RequestProcessing/HeaderParser.cs | 0 .../RequestProcessing/HttpKnownHeaderNames.cs | 0 .../RequestProcessing/NativeRequestContext.cs | 0 .../RequestProcessing/RawUrlHelper.cs | 0 .../RequestHeaders.Generated.cs | 0 .../RequestProcessing/RequestHeaders.cs | 0 .../RequestProcessing/RequestUriBuilder.cs | 0 .../RequestProcessing/SslStatus.cs | 0 .../src}/Directory.Build.props | 0 .../AsyncAcceptContext.cs | 0 .../AuthenticationHandler.cs | 0 .../AuthenticationManager.cs | 0 .../AuthenticationSchemes.cs | 0 .../FeatureContext.cs | 0 .../Helpers.cs | 0 .../Http503VerbosityLevel .cs | 0 .../HttpSysDefaults.cs | 0 .../HttpSysException.cs | 0 .../HttpSysListener.cs | 0 .../HttpSysOptions.cs | 0 .../LogHelper.cs | 0 .../MessagePump.cs | 0 ...Microsoft.AspNetCore.Server.HttpSys.csproj | 0 .../NativeInterop/ComNetOS.cs | 0 .../NativeInterop/DisconnectListener.cs | 0 .../NativeInterop/HttpApi.cs | 0 .../NativeInterop/HttpRequestQueueV2Handle.cs | 0 .../NativeInterop/HttpServerSessionHandle.cs | 0 .../NativeInterop/HttpSysSettings.cs | 0 .../NativeInterop/IntPtrHelper.cs | 0 .../NativeInterop/RequestQueue.cs | 0 .../NativeInterop/ServerSession.cs | 0 .../NativeInterop/TokenBindingUtil.cs | 0 .../NativeInterop/UrlGroup.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../Properties/Resources.Designer.cs | 0 .../RequestProcessing/BoundaryType.cs | 0 .../RequestProcessing/ClientCertLoader.cs | 0 .../RequestProcessing/HttpReasonPhrase.cs | 0 .../RequestProcessing/OpaqueStream.cs | 0 .../RequestProcessing/Request.cs | 0 .../RequestProcessing/RequestContext.cs | 0 .../RequestHeaders.Generated.tt | 0 .../RequestProcessing/RequestStream.cs | 0 .../RequestStreamAsyncResult.cs | 0 .../RequestProcessing/Response.cs | 0 .../RequestProcessing/ResponseBody.cs | 0 .../ResponseStreamAsyncResult.cs | 0 .../Resources.resx | 0 .../ResponseStream.cs | 0 .../StandardFeatureCollection.cs | 0 .../TimeoutManager.cs | 0 .../UrlPrefix.cs | 0 .../UrlPrefixCollection.cs | 0 .../ValidationHelper.cs | 0 .../WebHostBuilderHttpSysExtensions.cs | 0 .../baseline.netcore.json | 0 .../HttpSysServer/test}/Directory.Build.props | 0 .../AuthenticationTests.cs | 0 .../DummyApplication.cs | 0 .../HttpsTests.cs | 0 .../Listener/RequestBodyTests.cs | 0 .../Listener/RequestHeaderTests.cs | 0 .../Listener/RequestTests.cs | 0 .../Listener/ResponseBodyTests.cs | 0 .../Listener/ResponseCachingTests.cs | 0 .../Listener/ResponseHeaderTests.cs | 0 .../Listener/ResponseSendFileTests.cs | 0 .../Listener/ServerTests.cs | 0 .../Listener/Utilities.cs | 0 .../MessagePumpTests.cs | 0 ...Core.Server.HttpSys.FunctionalTests.csproj | 0 .../OSDontSkipConditionAttribute.cs | 0 .../OpaqueUpgradeTests.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../RequestBodyLimitTests.cs | 0 .../RequestBodyTests.cs | 0 .../RequestHeaderTests.cs | 0 .../RequestTests.cs | 0 .../ResponseBodyTests.cs | 0 .../ResponseCachingTests.cs | 0 .../ResponseHeaderTests.cs | 0 .../ResponseSendFileTests.cs | 0 .../ResponseTests.cs | 0 .../ServerTests.cs | 0 .../Utilities.cs | 0 ...oft.AspNetCore.Server.HttpSys.Tests.csproj | 0 .../UrlPrefixTests.cs | 0 .../HttpSysServer/version.props | 0 140 files changed, 631 deletions(-) delete mode 100644 .appveyor.yml delete mode 100644 .gitattributes delete mode 100644 .travis.yml delete mode 100644 .vsts-pipelines/builds/ci-internal.yml delete mode 100644 .vsts-pipelines/builds/ci-public.yml delete mode 100644 CONTRIBUTING.md delete mode 100644 LICENSE.txt delete mode 100644 NuGet.config delete mode 100644 build.cmd delete mode 100755 build.sh delete mode 100644 korebuild-lock.txt delete mode 100644 korebuild.json delete mode 100644 run.cmd delete mode 100644 run.ps1 delete mode 100755 run.sh rename .gitignore => src/HttpSysServer/.gitignore (100%) rename Directory.Build.props => src/HttpSysServer/Directory.Build.props (100%) rename Directory.Build.targets => src/HttpSysServer/Directory.Build.targets (100%) rename HttpSysServer.sln => src/HttpSysServer/HttpSysServer.sln (100%) rename NuGetPackageVerifier.json => src/HttpSysServer/NuGetPackageVerifier.json (100%) rename README.md => src/HttpSysServer/README.md (100%) rename {build => src/HttpSysServer/build}/Key.snk (100%) rename {build => src/HttpSysServer/build}/dependencies.props (100%) rename {build => src/HttpSysServer/build}/repo.props (100%) rename {build => src/HttpSysServer/build}/sources.props (100%) rename {samples => src/HttpSysServer/samples}/HotAddSample/HotAddSample.csproj (100%) rename {samples => src/HttpSysServer/samples}/HotAddSample/Properties/launchSettings.json (100%) rename {samples => src/HttpSysServer/samples}/HotAddSample/Startup.cs (100%) rename {samples => src/HttpSysServer/samples}/SelfHostServer/App.config (100%) rename {samples => src/HttpSysServer/samples}/SelfHostServer/Properties/launchSettings.json (100%) rename {samples => src/HttpSysServer/samples}/SelfHostServer/Public/1kb.txt (100%) rename {samples => src/HttpSysServer/samples}/SelfHostServer/SelfHostServer.csproj (100%) rename {samples => src/HttpSysServer/samples}/SelfHostServer/Startup.cs (100%) rename {samples => src/HttpSysServer/samples}/TestClient/App.config (100%) rename {samples => src/HttpSysServer/samples}/TestClient/Program.cs (100%) rename {samples => src/HttpSysServer/samples}/TestClient/Properties/AssemblyInfo.cs (100%) rename {samples => src/HttpSysServer/samples}/TestClient/TestClient.csproj (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/Constants.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/CookedUrl.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HeapAllocHandle.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpApiTypes.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpSysRequestHeader.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpSysResponseHeader.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/NclUtilities.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeLocalFreeChannelBinding.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeLocalMemHandle.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeNativeOverlapped.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SocketAddress.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/UnsafeNativeMethods.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderCollection.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderEncoding.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderParser.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HttpKnownHeaderNames.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/NativeRequestContext.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RawUrlHelper.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestHeaders.Generated.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestHeaders.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestUriBuilder.cs (100%) rename {shared => src/HttpSysServer/shared}/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/SslStatus.cs (100%) rename src/{ => HttpSysServer/src}/Directory.Build.props (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/AsyncAcceptContext.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/AuthenticationHandler.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/AuthenticationManager.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/AuthenticationSchemes.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/FeatureContext.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/Helpers.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/Http503VerbosityLevel .cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/HttpSysDefaults.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/HttpSysException.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/HttpSysListener.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/HttpSysOptions.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/LogHelper.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/MessagePump.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/Microsoft.AspNetCore.Server.HttpSys.csproj (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/ComNetOS.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/DisconnectListener.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpApi.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpRequestQueueV2Handle.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpServerSessionHandle.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpSysSettings.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/IntPtrHelper.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/RequestQueue.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/ServerSession.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/TokenBindingUtil.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/UrlGroup.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/Properties/AssemblyInfo.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/Properties/Resources.Designer.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/BoundaryType.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ClientCertLoader.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/HttpReasonPhrase.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/OpaqueStream.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/Request.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestContext.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestHeaders.Generated.tt (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestStream.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestStreamAsyncResult.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/Response.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ResponseBody.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ResponseStreamAsyncResult.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/Resources.resx (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/ResponseStream.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/StandardFeatureCollection.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/TimeoutManager.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/UrlPrefix.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/UrlPrefixCollection.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/ValidationHelper.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/WebHostBuilderHttpSysExtensions.cs (100%) rename src/{ => HttpSysServer/src}/Microsoft.AspNetCore.Server.HttpSys/baseline.netcore.json (100%) rename {test => src/HttpSysServer/test}/Directory.Build.props (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/DummyApplication.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/HttpsTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/MessagePumpTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests.csproj (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/OSDontSkipConditionAttribute.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/OpaqueUpgradeTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Properties/AssemblyInfo.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestBodyLimitTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestBodyTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestHeaderTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseBodyTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseCachingTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseSendFileTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ServerTests.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Utilities.cs (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.Tests/Microsoft.AspNetCore.Server.HttpSys.Tests.csproj (100%) rename {test => src/HttpSysServer/test}/Microsoft.AspNetCore.Server.HttpSys.Tests/UrlPrefixTests.cs (100%) rename version.props => src/HttpSysServer/version.props (100%) diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index 4eea96ab69..0000000000 --- a/.appveyor.yml +++ /dev/null @@ -1,17 +0,0 @@ -init: -- git config --global core.autocrlf true -branches: - only: - - dev - - /^release\/.*$/ - - /^(.*\/)?ci-.*$/ -build_script: -- ps: .\run.ps1 default-build -clone_depth: 1 -environment: - global: - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true - DOTNET_CLI_TELEMETRY_OPTOUT: 1 -test: 'off' -deploy: 'off' -os: Visual Studio 2017 diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 97b827b758..0000000000 --- a/.gitattributes +++ /dev/null @@ -1,51 +0,0 @@ -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain - -*.jpg binary -*.png binary -*.gif binary - -*.cs text=auto diff=csharp -*.vb text=auto -*.resx text=auto -*.c text=auto -*.cpp text=auto -*.cxx text=auto -*.h text=auto -*.hxx text=auto -*.py text=auto -*.rb text=auto -*.java text=auto -*.html text=auto -*.htm text=auto -*.css text=auto -*.scss text=auto -*.sass text=auto -*.less text=auto -*.js text=auto -*.lisp text=auto -*.clj text=auto -*.sql text=auto -*.php text=auto -*.lua text=auto -*.m text=auto -*.asm text=auto -*.erl text=auto -*.fs text=auto -*.fsx text=auto -*.hs text=auto - -*.csproj text=auto -*.vbproj text=auto -*.fsproj text=auto -*.dbproj text=auto -*.sln text=auto eol=crlf -*.sh eol=lf diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 64bdbb4441..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -language: csharp -sudo: false -dist: trusty -env: - global: - - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true - - DOTNET_CLI_TELEMETRY_OPTOUT: 1 -mono: none -os: -- linux -- osx -osx_image: xcode8.2 -addons: - apt: - packages: - - libunwind8 -branches: - only: - - dev - - /^release\/.*$/ - - /^(.*\/)?ci-.*$/ -before_install: -- if test "$TRAVIS_OS_NAME" == "osx"; then brew update; brew install openssl; ln -s - /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/; ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib - /usr/local/lib/; fi -script: -- ./build.sh diff --git a/.vsts-pipelines/builds/ci-internal.yml b/.vsts-pipelines/builds/ci-internal.yml deleted file mode 100644 index dc7b8a3cb9..0000000000 --- a/.vsts-pipelines/builds/ci-internal.yml +++ /dev/null @@ -1,13 +0,0 @@ -trigger: -- master -- release/* - -resources: - repositories: - - repository: buildtools - type: git - name: aspnet-BuildTools - ref: refs/heads/release/2.2 - -phases: -- template: .vsts-pipelines/templates/project-ci.yml@buildtools diff --git a/.vsts-pipelines/builds/ci-public.yml b/.vsts-pipelines/builds/ci-public.yml deleted file mode 100644 index f5087d9c30..0000000000 --- a/.vsts-pipelines/builds/ci-public.yml +++ /dev/null @@ -1,15 +0,0 @@ -trigger: -- master -- release/* - -# See https://github.com/aspnet/BuildTools -resources: - repositories: - - repository: buildtools - type: github - endpoint: DotNet-Bot GitHub Connection - name: aspnet/BuildTools - ref: refs/heads/release/2.2 - -phases: -- template: .vsts-pipelines/templates/project-ci.yml@buildtools diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 64ff041d5c..0000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -Contributing -====== - -Information on contributing to this repo is in the [Contributing Guide](https://github.com/aspnet/Home/blob/dev/CONTRIBUTING.md) in the Home repo. diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index 7b2956ecee..0000000000 --- a/LICENSE.txt +++ /dev/null @@ -1,14 +0,0 @@ -Copyright (c) .NET Foundation and Contributors - -All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software distributed -under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR -CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. diff --git a/NuGet.config b/NuGet.config deleted file mode 100644 index e32bddfd51..0000000000 --- a/NuGet.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/build.cmd b/build.cmd deleted file mode 100644 index c0050bda12..0000000000 --- a/build.cmd +++ /dev/null @@ -1,2 +0,0 @@ -@ECHO OFF -PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0run.ps1' default-build %*; exit $LASTEXITCODE" diff --git a/build.sh b/build.sh deleted file mode 100755 index 98a4b22765..0000000000 --- a/build.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -# Call "sync" between "chmod" and execution to prevent "text file busy" error in Docker (aufs) -chmod +x "$DIR/run.sh"; sync -"$DIR/run.sh" default-build "$@" diff --git a/korebuild-lock.txt b/korebuild-lock.txt deleted file mode 100644 index 860121b752..0000000000 --- a/korebuild-lock.txt +++ /dev/null @@ -1,2 +0,0 @@ -version:2.2.0-preview2-20181011.2 -commithash:09cd1592eb0fbbfa6ef5124120c173bc1d4e353a diff --git a/korebuild.json b/korebuild.json deleted file mode 100644 index d217d06e3e..0000000000 --- a/korebuild.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/release/2.2/tools/korebuild.schema.json", - "channel": "release/2.2" -} diff --git a/run.cmd b/run.cmd deleted file mode 100644 index d52d5c7e68..0000000000 --- a/run.cmd +++ /dev/null @@ -1,2 +0,0 @@ -@ECHO OFF -PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0run.ps1' %*; exit $LASTEXITCODE" diff --git a/run.ps1 b/run.ps1 deleted file mode 100644 index 34604c7175..0000000000 --- a/run.ps1 +++ /dev/null @@ -1,209 +0,0 @@ -#!/usr/bin/env powershell -#requires -version 4 - -<# -.SYNOPSIS -Executes KoreBuild commands. - -.DESCRIPTION -Downloads korebuild if required. Then executes the KoreBuild command. To see available commands, execute with `-Command help`. - -.PARAMETER Command -The KoreBuild command to run. - -.PARAMETER Path -The folder to build. Defaults to the folder containing this script. - -.PARAMETER Channel -The channel of KoreBuild to download. Overrides the value from the config file. - -.PARAMETER DotNetHome -The directory where .NET Core tools will be stored. - -.PARAMETER ToolsSource -The base url where build tools can be downloaded. Overrides the value from the config file. - -.PARAMETER Update -Updates KoreBuild to the latest version even if a lock file is present. - -.PARAMETER Reinstall -Re-installs KoreBuild - -.PARAMETER ConfigFile -The path to the configuration file that stores values. Defaults to korebuild.json. - -.PARAMETER ToolsSourceSuffix -The Suffix to append to the end of the ToolsSource. Useful for query strings in blob stores. - -.PARAMETER CI -Sets up CI specific settings and variables. - -.PARAMETER Arguments -Arguments to be passed to the command - -.NOTES -This function will create a file $PSScriptRoot/korebuild-lock.txt. This lock file can be committed to source, but does not have to be. -When the lockfile is not present, KoreBuild will create one using latest available version from $Channel. - -The $ConfigFile is expected to be an JSON file. It is optional, and the configuration values in it are optional as well. Any options set -in the file are overridden by command line parameters. - -.EXAMPLE -Example config file: -```json -{ - "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json", - "channel": "master", - "toolsSource": "https://aspnetcore.blob.core.windows.net/buildtools" -} -``` -#> -[CmdletBinding(PositionalBinding = $false)] -param( - [Parameter(Mandatory = $true, Position = 0)] - [string]$Command, - [string]$Path = $PSScriptRoot, - [Alias('c')] - [string]$Channel, - [Alias('d')] - [string]$DotNetHome, - [Alias('s')] - [string]$ToolsSource, - [Alias('u')] - [switch]$Update, - [switch]$Reinstall, - [string]$ToolsSourceSuffix, - [string]$ConfigFile = $null, - [switch]$CI, - [Parameter(ValueFromRemainingArguments = $true)] - [string[]]$Arguments -) - -Set-StrictMode -Version 2 -$ErrorActionPreference = 'Stop' - -# -# Functions -# - -function Get-KoreBuild { - - $lockFile = Join-Path $Path 'korebuild-lock.txt' - - if (!(Test-Path $lockFile) -or $Update) { - Get-RemoteFile "$ToolsSource/korebuild/channels/$Channel/latest.txt" $lockFile $ToolsSourceSuffix - } - - $version = Get-Content $lockFile | Where-Object { $_ -like 'version:*' } | Select-Object -first 1 - if (!$version) { - Write-Error "Failed to parse version from $lockFile. Expected a line that begins with 'version:'" - } - $version = $version.TrimStart('version:').Trim() - $korebuildPath = Join-Paths $DotNetHome ('buildtools', 'korebuild', $version) - - if ($Reinstall -and (Test-Path $korebuildPath)) { - Remove-Item -Force -Recurse $korebuildPath - } - - if (!(Test-Path $korebuildPath)) { - Write-Host -ForegroundColor Magenta "Downloading KoreBuild $version" - New-Item -ItemType Directory -Path $korebuildPath | Out-Null - $remotePath = "$ToolsSource/korebuild/artifacts/$version/korebuild.$version.zip" - - try { - $tmpfile = Join-Path ([IO.Path]::GetTempPath()) "KoreBuild-$([guid]::NewGuid()).zip" - Get-RemoteFile $remotePath $tmpfile $ToolsSourceSuffix - if (Get-Command -Name 'Microsoft.PowerShell.Archive\Expand-Archive' -ErrorAction Ignore) { - # Use built-in commands where possible as they are cross-plat compatible - Microsoft.PowerShell.Archive\Expand-Archive -Path $tmpfile -DestinationPath $korebuildPath - } - else { - # Fallback to old approach for old installations of PowerShell - Add-Type -AssemblyName System.IO.Compression.FileSystem - [System.IO.Compression.ZipFile]::ExtractToDirectory($tmpfile, $korebuildPath) - } - } - catch { - Remove-Item -Recurse -Force $korebuildPath -ErrorAction Ignore - throw - } - finally { - Remove-Item $tmpfile -ErrorAction Ignore - } - } - - return $korebuildPath -} - -function Join-Paths([string]$path, [string[]]$childPaths) { - $childPaths | ForEach-Object { $path = Join-Path $path $_ } - return $path -} - -function Get-RemoteFile([string]$RemotePath, [string]$LocalPath, [string]$RemoteSuffix) { - if ($RemotePath -notlike 'http*') { - Copy-Item $RemotePath $LocalPath - return - } - - $retries = 10 - while ($retries -gt 0) { - $retries -= 1 - try { - Invoke-WebRequest -UseBasicParsing -Uri $($RemotePath + $RemoteSuffix) -OutFile $LocalPath - return - } - catch { - Write-Verbose "Request failed. $retries retries remaining" - } - } - - Write-Error "Download failed: '$RemotePath'." -} - -# -# Main -# - -# Load configuration or set defaults - -$Path = Resolve-Path $Path -if (!$ConfigFile) { $ConfigFile = Join-Path $Path 'korebuild.json' } - -if (Test-Path $ConfigFile) { - try { - $config = Get-Content -Raw -Encoding UTF8 -Path $ConfigFile | ConvertFrom-Json - if ($config) { - if (!($Channel) -and (Get-Member -Name 'channel' -InputObject $config)) { [string] $Channel = $config.channel } - if (!($ToolsSource) -and (Get-Member -Name 'toolsSource' -InputObject $config)) { [string] $ToolsSource = $config.toolsSource} - } - } - catch { - Write-Host -ForegroundColor Red $Error[0] - Write-Error "$ConfigFile contains invalid JSON." - exit 1 - } -} - -if (!$DotNetHome) { - $DotNetHome = if ($env:DOTNET_HOME) { $env:DOTNET_HOME } ` - elseif ($env:USERPROFILE) { Join-Path $env:USERPROFILE '.dotnet'} ` - elseif ($env:HOME) {Join-Path $env:HOME '.dotnet'}` - else { Join-Path $PSScriptRoot '.dotnet'} -} - -if (!$Channel) { $Channel = 'master' } -if (!$ToolsSource) { $ToolsSource = 'https://aspnetcore.blob.core.windows.net/buildtools' } - -# Execute - -$korebuildPath = Get-KoreBuild -Import-Module -Force -Scope Local (Join-Path $korebuildPath 'KoreBuild.psd1') - -try { - Set-KoreBuildSettings -ToolsSource $ToolsSource -DotNetHome $DotNetHome -RepoPath $Path -ConfigFile $ConfigFile -CI:$CI - Invoke-KoreBuildCommand $Command @Arguments -} -finally { - Remove-Module 'KoreBuild' -ErrorAction Ignore -} diff --git a/run.sh b/run.sh deleted file mode 100755 index 4c1fed5646..0000000000 --- a/run.sh +++ /dev/null @@ -1,256 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -# -# variables -# - -RESET="\033[0m" -RED="\033[0;31m" -YELLOW="\033[0;33m" -MAGENTA="\033[0;95m" -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -[ -z "${DOTNET_HOME:-}" ] && DOTNET_HOME="$HOME/.dotnet" -verbose=false -update=false -reinstall=false -repo_path="$DIR" -channel='' -tools_source='' -tools_source_suffix='' -ci=false - -# -# Functions -# -__usage() { - echo "Usage: $(basename "${BASH_SOURCE[0]}") command [options] [[--] ...]" - echo "" - echo "Arguments:" - echo " command The command to be run." - echo " ... Arguments passed to the command. Variable number of arguments allowed." - echo "" - echo "Options:" - echo " --verbose Show verbose output." - echo " -c|--channel The channel of KoreBuild to download. Overrides the value from the config file.." - echo " --config-file The path to the configuration file that stores values. Defaults to korebuild.json." - echo " -d|--dotnet-home The directory where .NET Core tools will be stored. Defaults to '\$DOTNET_HOME' or '\$HOME/.dotnet." - echo " --path The directory to build. Defaults to the directory containing the script." - echo " -s|--tools-source|-ToolsSource The base url where build tools can be downloaded. Overrides the value from the config file." - echo " --tools-source-suffix|-ToolsSourceSuffix The suffix to append to tools-source. Useful for query strings." - echo " -u|--update Update to the latest KoreBuild even if the lock file is present." - echo " --reinstall Reinstall KoreBuild." - echo " --ci Apply CI specific settings and environment variables." - echo "" - echo "Description:" - echo " This function will create a file \$DIR/korebuild-lock.txt. This lock file can be committed to source, but does not have to be." - echo " When the lockfile is not present, KoreBuild will create one using latest available version from \$channel." - - if [[ "${1:-}" != '--no-exit' ]]; then - exit 2 - fi -} - -get_korebuild() { - local version - local lock_file="$repo_path/korebuild-lock.txt" - if [ ! -f "$lock_file" ] || [ "$update" = true ]; then - __get_remote_file "$tools_source/korebuild/channels/$channel/latest.txt" "$lock_file" "$tools_source_suffix" - fi - version="$(grep 'version:*' -m 1 "$lock_file")" - if [[ "$version" == '' ]]; then - __error "Failed to parse version from $lock_file. Expected a line that begins with 'version:'" - return 1 - fi - version="$(echo "${version#version:}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" - local korebuild_path="$DOTNET_HOME/buildtools/korebuild/$version" - - if [ "$reinstall" = true ] && [ -d "$korebuild_path" ]; then - rm -rf "$korebuild_path" - fi - - { - if [ ! -d "$korebuild_path" ]; then - mkdir -p "$korebuild_path" - local remote_path="$tools_source/korebuild/artifacts/$version/korebuild.$version.zip" - tmpfile="$(mktemp)" - echo -e "${MAGENTA}Downloading KoreBuild ${version}${RESET}" - if __get_remote_file "$remote_path" "$tmpfile" "$tools_source_suffix"; then - unzip -q -d "$korebuild_path" "$tmpfile" - fi - rm "$tmpfile" || true - fi - - source "$korebuild_path/KoreBuild.sh" - } || { - if [ -d "$korebuild_path" ]; then - echo "Cleaning up after failed installation" - rm -rf "$korebuild_path" || true - fi - return 1 - } -} - -__error() { - echo -e "${RED}error: $*${RESET}" 1>&2 -} - -__warn() { - echo -e "${YELLOW}warning: $*${RESET}" -} - -__machine_has() { - hash "$1" > /dev/null 2>&1 - return $? -} - -__get_remote_file() { - local remote_path=$1 - local local_path=$2 - local remote_path_suffix=$3 - - if [[ "$remote_path" != 'http'* ]]; then - cp "$remote_path" "$local_path" - return 0 - fi - - local failed=false - if __machine_has wget; then - wget --tries 10 --quiet -O "$local_path" "${remote_path}${remote_path_suffix}" || failed=true - else - failed=true - fi - - if [ "$failed" = true ] && __machine_has curl; then - failed=false - curl --retry 10 -sSL -f --create-dirs -o "$local_path" "${remote_path}${remote_path_suffix}" || failed=true - fi - - if [ "$failed" = true ]; then - __error "Download failed: $remote_path" 1>&2 - return 1 - fi -} - -# -# main -# - -command="${1:-}" -shift - -while [[ $# -gt 0 ]]; do - case $1 in - -\?|-h|--help) - __usage --no-exit - exit 0 - ;; - -c|--channel|-Channel) - shift - channel="${1:-}" - [ -z "$channel" ] && __usage - ;; - --config-file|-ConfigFile) - shift - config_file="${1:-}" - [ -z "$config_file" ] && __usage - if [ ! -f "$config_file" ]; then - __error "Invalid value for --config-file. $config_file does not exist." - exit 1 - fi - ;; - -d|--dotnet-home|-DotNetHome) - shift - DOTNET_HOME="${1:-}" - [ -z "$DOTNET_HOME" ] && __usage - ;; - --path|-Path) - shift - repo_path="${1:-}" - [ -z "$repo_path" ] && __usage - ;; - -s|--tools-source|-ToolsSource) - shift - tools_source="${1:-}" - [ -z "$tools_source" ] && __usage - ;; - --tools-source-suffix|-ToolsSourceSuffix) - shift - tools_source_suffix="${1:-}" - [ -z "$tools_source_suffix" ] && __usage - ;; - -u|--update|-Update) - update=true - ;; - --reinstall|-[Rr]einstall) - reinstall=true - ;; - --ci|-[Cc][Ii]) - ci=true - ;; - --verbose|-Verbose) - verbose=true - ;; - --) - shift - break - ;; - *) - break - ;; - esac - shift -done - -if ! __machine_has unzip; then - __error 'Missing required command: unzip' - exit 1 -fi - -if ! __machine_has curl && ! __machine_has wget; then - __error 'Missing required command. Either wget or curl is required.' - exit 1 -fi - -[ -z "${config_file:-}" ] && config_file="$repo_path/korebuild.json" -if [ -f "$config_file" ]; then - if __machine_has jq ; then - if jq '.' "$config_file" >/dev/null ; then - config_channel="$(jq -r 'select(.channel!=null) | .channel' "$config_file")" - config_tools_source="$(jq -r 'select(.toolsSource!=null) | .toolsSource' "$config_file")" - else - __error "$config_file contains invalid JSON." - exit 1 - fi - elif __machine_has python ; then - if python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then - config_channel="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")" - config_tools_source="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")" - else - __error "$config_file contains invalid JSON." - exit 1 - fi - elif __machine_has python3 ; then - if python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then - config_channel="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")" - config_tools_source="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")" - else - __error "$config_file contains invalid JSON." - exit 1 - fi - else - __error 'Missing required command: jq or python. Could not parse the JSON file.' - exit 1 - fi - - [ ! -z "${config_channel:-}" ] && channel="$config_channel" - [ ! -z "${config_tools_source:-}" ] && tools_source="$config_tools_source" -fi - -[ -z "$channel" ] && channel='master' -[ -z "$tools_source" ] && tools_source='https://aspnetcore.blob.core.windows.net/buildtools' - -get_korebuild -set_korebuildsettings "$tools_source" "$DOTNET_HOME" "$repo_path" "$config_file" "$ci" -invoke_korebuild_command "$command" "$@" diff --git a/.gitignore b/src/HttpSysServer/.gitignore similarity index 100% rename from .gitignore rename to src/HttpSysServer/.gitignore diff --git a/Directory.Build.props b/src/HttpSysServer/Directory.Build.props similarity index 100% rename from Directory.Build.props rename to src/HttpSysServer/Directory.Build.props diff --git a/Directory.Build.targets b/src/HttpSysServer/Directory.Build.targets similarity index 100% rename from Directory.Build.targets rename to src/HttpSysServer/Directory.Build.targets diff --git a/HttpSysServer.sln b/src/HttpSysServer/HttpSysServer.sln similarity index 100% rename from HttpSysServer.sln rename to src/HttpSysServer/HttpSysServer.sln diff --git a/NuGetPackageVerifier.json b/src/HttpSysServer/NuGetPackageVerifier.json similarity index 100% rename from NuGetPackageVerifier.json rename to src/HttpSysServer/NuGetPackageVerifier.json diff --git a/README.md b/src/HttpSysServer/README.md similarity index 100% rename from README.md rename to src/HttpSysServer/README.md diff --git a/build/Key.snk b/src/HttpSysServer/build/Key.snk similarity index 100% rename from build/Key.snk rename to src/HttpSysServer/build/Key.snk diff --git a/build/dependencies.props b/src/HttpSysServer/build/dependencies.props similarity index 100% rename from build/dependencies.props rename to src/HttpSysServer/build/dependencies.props diff --git a/build/repo.props b/src/HttpSysServer/build/repo.props similarity index 100% rename from build/repo.props rename to src/HttpSysServer/build/repo.props diff --git a/build/sources.props b/src/HttpSysServer/build/sources.props similarity index 100% rename from build/sources.props rename to src/HttpSysServer/build/sources.props diff --git a/samples/HotAddSample/HotAddSample.csproj b/src/HttpSysServer/samples/HotAddSample/HotAddSample.csproj similarity index 100% rename from samples/HotAddSample/HotAddSample.csproj rename to src/HttpSysServer/samples/HotAddSample/HotAddSample.csproj diff --git a/samples/HotAddSample/Properties/launchSettings.json b/src/HttpSysServer/samples/HotAddSample/Properties/launchSettings.json similarity index 100% rename from samples/HotAddSample/Properties/launchSettings.json rename to src/HttpSysServer/samples/HotAddSample/Properties/launchSettings.json diff --git a/samples/HotAddSample/Startup.cs b/src/HttpSysServer/samples/HotAddSample/Startup.cs similarity index 100% rename from samples/HotAddSample/Startup.cs rename to src/HttpSysServer/samples/HotAddSample/Startup.cs diff --git a/samples/SelfHostServer/App.config b/src/HttpSysServer/samples/SelfHostServer/App.config similarity index 100% rename from samples/SelfHostServer/App.config rename to src/HttpSysServer/samples/SelfHostServer/App.config diff --git a/samples/SelfHostServer/Properties/launchSettings.json b/src/HttpSysServer/samples/SelfHostServer/Properties/launchSettings.json similarity index 100% rename from samples/SelfHostServer/Properties/launchSettings.json rename to src/HttpSysServer/samples/SelfHostServer/Properties/launchSettings.json diff --git a/samples/SelfHostServer/Public/1kb.txt b/src/HttpSysServer/samples/SelfHostServer/Public/1kb.txt similarity index 100% rename from samples/SelfHostServer/Public/1kb.txt rename to src/HttpSysServer/samples/SelfHostServer/Public/1kb.txt diff --git a/samples/SelfHostServer/SelfHostServer.csproj b/src/HttpSysServer/samples/SelfHostServer/SelfHostServer.csproj similarity index 100% rename from samples/SelfHostServer/SelfHostServer.csproj rename to src/HttpSysServer/samples/SelfHostServer/SelfHostServer.csproj diff --git a/samples/SelfHostServer/Startup.cs b/src/HttpSysServer/samples/SelfHostServer/Startup.cs similarity index 100% rename from samples/SelfHostServer/Startup.cs rename to src/HttpSysServer/samples/SelfHostServer/Startup.cs diff --git a/samples/TestClient/App.config b/src/HttpSysServer/samples/TestClient/App.config similarity index 100% rename from samples/TestClient/App.config rename to src/HttpSysServer/samples/TestClient/App.config diff --git a/samples/TestClient/Program.cs b/src/HttpSysServer/samples/TestClient/Program.cs similarity index 100% rename from samples/TestClient/Program.cs rename to src/HttpSysServer/samples/TestClient/Program.cs diff --git a/samples/TestClient/Properties/AssemblyInfo.cs b/src/HttpSysServer/samples/TestClient/Properties/AssemblyInfo.cs similarity index 100% rename from samples/TestClient/Properties/AssemblyInfo.cs rename to src/HttpSysServer/samples/TestClient/Properties/AssemblyInfo.cs diff --git a/samples/TestClient/TestClient.csproj b/src/HttpSysServer/samples/TestClient/TestClient.csproj similarity index 100% rename from samples/TestClient/TestClient.csproj rename to src/HttpSysServer/samples/TestClient/TestClient.csproj diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/Constants.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/Constants.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/Constants.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/Constants.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/CookedUrl.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/CookedUrl.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/CookedUrl.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/CookedUrl.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HeapAllocHandle.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HeapAllocHandle.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HeapAllocHandle.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HeapAllocHandle.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpApiTypes.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpApiTypes.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpApiTypes.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpApiTypes.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpSysRequestHeader.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpSysRequestHeader.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpSysRequestHeader.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpSysRequestHeader.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpSysResponseHeader.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpSysResponseHeader.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpSysResponseHeader.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/HttpSysResponseHeader.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/NclUtilities.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/NclUtilities.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/NclUtilities.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/NclUtilities.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeLocalFreeChannelBinding.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeLocalFreeChannelBinding.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeLocalFreeChannelBinding.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeLocalFreeChannelBinding.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeLocalMemHandle.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeLocalMemHandle.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeLocalMemHandle.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeLocalMemHandle.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeNativeOverlapped.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeNativeOverlapped.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeNativeOverlapped.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SafeNativeOverlapped.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SocketAddress.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SocketAddress.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SocketAddress.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/SocketAddress.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/UnsafeNativeMethods.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/UnsafeNativeMethods.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/UnsafeNativeMethods.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/NativeInterop/UnsafeNativeMethods.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderCollection.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderCollection.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderCollection.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderCollection.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderEncoding.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderEncoding.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderEncoding.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderEncoding.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderParser.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderParser.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderParser.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HeaderParser.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HttpKnownHeaderNames.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HttpKnownHeaderNames.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HttpKnownHeaderNames.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/HttpKnownHeaderNames.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/NativeRequestContext.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/NativeRequestContext.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/NativeRequestContext.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/NativeRequestContext.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RawUrlHelper.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RawUrlHelper.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RawUrlHelper.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RawUrlHelper.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestHeaders.Generated.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestHeaders.Generated.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestHeaders.Generated.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestHeaders.Generated.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestHeaders.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestHeaders.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestHeaders.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestHeaders.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestUriBuilder.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestUriBuilder.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestUriBuilder.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/RequestUriBuilder.cs diff --git a/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/SslStatus.cs b/src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/SslStatus.cs similarity index 100% rename from shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/SslStatus.cs rename to src/HttpSysServer/shared/Microsoft.AspNetCore.HttpSys.Sources/RequestProcessing/SslStatus.cs diff --git a/src/Directory.Build.props b/src/HttpSysServer/src/Directory.Build.props similarity index 100% rename from src/Directory.Build.props rename to src/HttpSysServer/src/Directory.Build.props diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/AsyncAcceptContext.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/AsyncAcceptContext.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/AsyncAcceptContext.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/AsyncAcceptContext.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/AuthenticationHandler.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/AuthenticationHandler.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/AuthenticationHandler.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/AuthenticationHandler.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/AuthenticationManager.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/AuthenticationManager.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/AuthenticationManager.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/AuthenticationManager.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/AuthenticationSchemes.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/AuthenticationSchemes.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/AuthenticationSchemes.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/AuthenticationSchemes.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/FeatureContext.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/FeatureContext.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/FeatureContext.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/FeatureContext.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/Helpers.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/Helpers.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/Helpers.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/Helpers.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/Http503VerbosityLevel .cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/Http503VerbosityLevel .cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/Http503VerbosityLevel .cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/Http503VerbosityLevel .cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/HttpSysDefaults.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/HttpSysDefaults.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/HttpSysDefaults.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/HttpSysDefaults.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/HttpSysException.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/HttpSysException.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/HttpSysException.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/HttpSysException.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/HttpSysListener.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/HttpSysListener.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/HttpSysListener.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/HttpSysListener.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/HttpSysOptions.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/HttpSysOptions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/HttpSysOptions.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/HttpSysOptions.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/LogHelper.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/LogHelper.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/LogHelper.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/LogHelper.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/MessagePump.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/MessagePump.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/MessagePump.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/MessagePump.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/Microsoft.AspNetCore.Server.HttpSys.csproj b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/Microsoft.AspNetCore.Server.HttpSys.csproj similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/Microsoft.AspNetCore.Server.HttpSys.csproj rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/Microsoft.AspNetCore.Server.HttpSys.csproj diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/ComNetOS.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/ComNetOS.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/ComNetOS.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/ComNetOS.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/DisconnectListener.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/DisconnectListener.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/DisconnectListener.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/DisconnectListener.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpApi.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpApi.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpApi.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpApi.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpRequestQueueV2Handle.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpRequestQueueV2Handle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpRequestQueueV2Handle.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpRequestQueueV2Handle.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpServerSessionHandle.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpServerSessionHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpServerSessionHandle.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpServerSessionHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpSysSettings.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpSysSettings.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpSysSettings.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/HttpSysSettings.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/IntPtrHelper.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/IntPtrHelper.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/IntPtrHelper.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/IntPtrHelper.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/RequestQueue.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/RequestQueue.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/RequestQueue.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/RequestQueue.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/ServerSession.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/ServerSession.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/ServerSession.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/ServerSession.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/TokenBindingUtil.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/TokenBindingUtil.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/TokenBindingUtil.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/TokenBindingUtil.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/UrlGroup.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/UrlGroup.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/UrlGroup.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/NativeInterop/UrlGroup.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/Properties/AssemblyInfo.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/Properties/AssemblyInfo.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/Properties/AssemblyInfo.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/Properties/AssemblyInfo.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/Properties/Resources.Designer.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/Properties/Resources.Designer.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/Properties/Resources.Designer.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/Properties/Resources.Designer.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/BoundaryType.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/BoundaryType.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/BoundaryType.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/BoundaryType.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ClientCertLoader.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ClientCertLoader.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ClientCertLoader.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ClientCertLoader.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/HttpReasonPhrase.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/HttpReasonPhrase.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/HttpReasonPhrase.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/HttpReasonPhrase.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/OpaqueStream.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/OpaqueStream.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/OpaqueStream.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/OpaqueStream.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/Request.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/Request.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/Request.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/Request.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestContext.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestContext.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestContext.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestContext.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestHeaders.Generated.tt b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestHeaders.Generated.tt similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestHeaders.Generated.tt rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestHeaders.Generated.tt diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestStream.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestStream.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestStream.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestStream.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestStreamAsyncResult.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestStreamAsyncResult.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestStreamAsyncResult.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/RequestStreamAsyncResult.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/Response.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/Response.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/Response.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/Response.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ResponseBody.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ResponseBody.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ResponseBody.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ResponseBody.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ResponseStreamAsyncResult.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ResponseStreamAsyncResult.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ResponseStreamAsyncResult.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/RequestProcessing/ResponseStreamAsyncResult.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/Resources.resx b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/Resources.resx similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/Resources.resx rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/Resources.resx diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/ResponseStream.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/ResponseStream.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/ResponseStream.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/ResponseStream.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/StandardFeatureCollection.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/StandardFeatureCollection.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/StandardFeatureCollection.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/StandardFeatureCollection.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/TimeoutManager.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/TimeoutManager.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/TimeoutManager.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/TimeoutManager.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/UrlPrefix.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/UrlPrefix.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/UrlPrefix.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/UrlPrefix.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/UrlPrefixCollection.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/UrlPrefixCollection.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/UrlPrefixCollection.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/UrlPrefixCollection.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/ValidationHelper.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/ValidationHelper.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/ValidationHelper.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/ValidationHelper.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/WebHostBuilderHttpSysExtensions.cs b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/WebHostBuilderHttpSysExtensions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/WebHostBuilderHttpSysExtensions.cs rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/WebHostBuilderHttpSysExtensions.cs diff --git a/src/Microsoft.AspNetCore.Server.HttpSys/baseline.netcore.json b/src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/baseline.netcore.json similarity index 100% rename from src/Microsoft.AspNetCore.Server.HttpSys/baseline.netcore.json rename to src/HttpSysServer/src/Microsoft.AspNetCore.Server.HttpSys/baseline.netcore.json diff --git a/test/Directory.Build.props b/src/HttpSysServer/test/Directory.Build.props similarity index 100% rename from test/Directory.Build.props rename to src/HttpSysServer/test/Directory.Build.props diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/AuthenticationTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/DummyApplication.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/DummyApplication.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/DummyApplication.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/DummyApplication.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/HttpsTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/HttpsTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/HttpsTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/HttpsTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestBodyTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestHeaderTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/RequestTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseBodyTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseCachingTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseHeaderTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ResponseSendFileTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/ServerTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Listener/Utilities.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/MessagePumpTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/MessagePumpTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/MessagePumpTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/MessagePumpTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests.csproj b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests.csproj similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests.csproj rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests.csproj diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/OSDontSkipConditionAttribute.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/OSDontSkipConditionAttribute.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/OSDontSkipConditionAttribute.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/OSDontSkipConditionAttribute.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/OpaqueUpgradeTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/OpaqueUpgradeTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/OpaqueUpgradeTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/OpaqueUpgradeTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Properties/AssemblyInfo.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Properties/AssemblyInfo.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Properties/AssemblyInfo.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Properties/AssemblyInfo.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestBodyLimitTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestBodyLimitTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestBodyLimitTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestBodyLimitTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestBodyTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestBodyTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestBodyTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestBodyTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestHeaderTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestHeaderTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestHeaderTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestHeaderTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/RequestTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseBodyTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseBodyTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseBodyTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseBodyTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseCachingTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseCachingTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseCachingTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseCachingTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseHeaderTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseSendFileTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseSendFileTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseSendFileTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseSendFileTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ResponseTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ServerTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ServerTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ServerTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/ServerTests.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Utilities.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Utilities.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Utilities.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.FunctionalTests/Utilities.cs diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.Tests/Microsoft.AspNetCore.Server.HttpSys.Tests.csproj b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.Tests/Microsoft.AspNetCore.Server.HttpSys.Tests.csproj similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.Tests/Microsoft.AspNetCore.Server.HttpSys.Tests.csproj rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.Tests/Microsoft.AspNetCore.Server.HttpSys.Tests.csproj diff --git a/test/Microsoft.AspNetCore.Server.HttpSys.Tests/UrlPrefixTests.cs b/src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.Tests/UrlPrefixTests.cs similarity index 100% rename from test/Microsoft.AspNetCore.Server.HttpSys.Tests/UrlPrefixTests.cs rename to src/HttpSysServer/test/Microsoft.AspNetCore.Server.HttpSys.Tests/UrlPrefixTests.cs diff --git a/version.props b/src/HttpSysServer/version.props similarity index 100% rename from version.props rename to src/HttpSysServer/version.props