Skip to content

Commit

Permalink
Fix System.Net.Http.Functional.Tests.SocketsHttpHandlerTest_HttpClien…
Browse files Browse the repository at this point in the history
…tHandlerTest_Http3.ReadAsStreamAsync_Cancellation failure
  • Loading branch information
rzikm committed Apr 23, 2024
1 parent e8a5dce commit ac1f96f
Showing 1 changed file with 26 additions and 21 deletions.
47 changes: 26 additions & 21 deletions src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Linq;
using System.Net.Http.Headers;
using System.Net.Sockets;
using System.Net.Quic;
using System.Net.Test.Common;
using System.Security.Authentication;
using System.Security.Cryptography;
Expand Down Expand Up @@ -267,7 +268,7 @@ await LoopbackServer.CreateClientAndServerAsync(async proxyUri =>
public static IEnumerable<object[]> SecureAndNonSecure_IPBasedUri_MemberData() =>
from address in new[] { IPAddress.Loopback, IPAddress.IPv6Loopback }
from useSsl in BoolValues
// we could not create SslStream in browser, [ActiveIssue("https://github.com/dotnet/runtime/issues/37669", TestPlatforms.Browser)]
// we could not create SslStream in browser, [ActiveIssue("https://github.com/dotnet/runtime/issues/37669", TestPlatforms.Browser)]
where PlatformDetection.IsNotBrowser || !useSsl
select new object[] { address, useSsl };

Expand Down Expand Up @@ -877,8 +878,8 @@ await LoopbackServer.CreateClientAndServerAsync(async url =>
"\r\n" +
"5\r\n" +
"hello" + // missing \r\n terminator
//"5\r\n" +
//"world" + // missing \r\n terminator
//"5\r\n" +
//"world" + // missing \r\n terminator
"0\r\n" +
"\r\n"));
}
Expand Down Expand Up @@ -1091,7 +1092,7 @@ await LoopbackServerFactory.CreateClientAndServerAsync(async uri =>
if (PlatformDetection.IsBrowser)
{
#if !NETFRAMEWORK
if(slowChunks)
if (slowChunks)
{
Assert.Equal(1, await responseStream.ReadAsync(new Memory<byte>(buffer2)));
Assert.Equal((byte)'h', buffer2[0]);
Expand Down Expand Up @@ -1201,7 +1202,7 @@ await server.AcceptConnectionAsync(async connection =>
{
case true:
await connection.SendResponseAsync(HttpStatusCode.OK, headers: new HttpHeaderData[] { new HttpHeaderData("Transfer-Encoding", "chunked") }, isFinal: false);
if(PlatformDetection.IsBrowser && slowChunks)
if (PlatformDetection.IsBrowser && slowChunks)
{
await connection.SendResponseBodyAsync("1\r\nh\r\n", false);
await tcs.Task;
Expand All @@ -1216,12 +1217,12 @@ await server.AcceptConnectionAsync(async connection =>
break;
case false:
await connection.SendResponseAsync(HttpStatusCode.OK, headers: new HttpHeaderData[] { new HttpHeaderData("Content-Length", "11")}, content: "hello world");
await connection.SendResponseAsync(HttpStatusCode.OK, headers: new HttpHeaderData[] { new HttpHeaderData("Content-Length", "11") }, content: "hello world");
break;
case null:
// This inject Content-Length header with null value to hint Loopback code to not include one automatically.
await connection.SendResponseAsync(HttpStatusCode.OK, headers: new HttpHeaderData[] { new HttpHeaderData("Content-Length", null)}, isFinal: false);
await connection.SendResponseAsync(HttpStatusCode.OK, headers: new HttpHeaderData[] { new HttpHeaderData("Content-Length", null) }, isFinal: false);
await connection.SendResponseBodyAsync("hello world");
break;
}
Expand Down Expand Up @@ -1396,6 +1397,10 @@ await server.AcceptConnectionAsync(async connection =>
await connection.SendResponseAsync(HttpStatusCode.OK, headers: new HttpHeaderData[] { new HttpHeaderData("Transfer-Encoding", "chunked") }, isFinal: false);
await connection.SendResponseBodyAsync("1\r\nh\r\n", false);
}
catch (QuicException ex) when (ex.ApplicationErrorCode == 0x10c /*H3_REQUEST_CANCELLED*/)
{
// The request was cancelled before we sent the body, ignore
}
catch (IOException ex)
{
// when testing in the browser, we are using the WebSocket for the loopback
Expand Down Expand Up @@ -1450,10 +1455,10 @@ await LoopbackServerFactory.CreateServerAsync(async (server3, url3) =>
Task serverTask3 = server3.AcceptConnectionAsync(async connection3 =>
{
await connection3.ReadRequestDataAsync();
await connection3.SendResponseAsync(HttpStatusCode.OK, new HttpHeaderData[] { new HttpHeaderData("Content-Length", "20") }, isFinal : false);
await connection3.SendResponseBodyAsync("1234567890", isFinal : false);
await connection3.SendResponseAsync(HttpStatusCode.OK, new HttpHeaderData[] { new HttpHeaderData("Content-Length", "20") }, isFinal: false);
await connection3.SendResponseBodyAsync("1234567890", isFinal: false);
await unblockServers.Task;
await connection3.SendResponseBodyAsync("1234567890", isFinal : true);
await connection3.SendResponseBodyAsync("1234567890", isFinal: true);
});
// Make three requests
Expand Down Expand Up @@ -1527,7 +1532,7 @@ public async Task GetAsync_UnicodeHostName_SuccessStatusCodeInResponse()
}
}

#region Post Methods Tests
#region Post Methods Tests

[Fact]
[SkipOnPlatform(TestPlatforms.Browser, "ExpectContinue not supported on Browser")]
Expand Down Expand Up @@ -1571,13 +1576,13 @@ await server.AcceptConnectionAsync(async connection =>

public static IEnumerable<object[]> Interim1xxStatusCode()
{
yield return new object[] { (HttpStatusCode) 100 }; // 100 Continue.
yield return new object[] { (HttpStatusCode)100 }; // 100 Continue.
// 101 SwitchingProtocols will be treated as a final status code.
yield return new object[] { (HttpStatusCode) 102 }; // 102 Processing.
yield return new object[] { (HttpStatusCode) 103 }; // 103 EarlyHints.
yield return new object[] { (HttpStatusCode) 150 };
yield return new object[] { (HttpStatusCode) 180 };
yield return new object[] { (HttpStatusCode) 199 };
yield return new object[] { (HttpStatusCode)102 }; // 102 Processing.
yield return new object[] { (HttpStatusCode)103 }; // 103 EarlyHints.
yield return new object[] { (HttpStatusCode)150 };
yield return new object[] { (HttpStatusCode)180 };
yield return new object[] { (HttpStatusCode)199 };
}

[Theory]
Expand Down Expand Up @@ -1638,7 +1643,7 @@ await server.AcceptConnectionAsync(async connection =>
new HttpHeaderData("Content-type", "text/xml"),
new HttpHeaderData("Set-Cookie", SetCookieIgnored1)}, isFinal: false);
await connection.SendResponseAsync(responseStatusCode, headers: new HttpHeaderData[] {
await connection.SendResponseAsync(responseStatusCode, headers: new HttpHeaderData[] {
new HttpHeaderData("Cookie", "ignore_cookie=choco2"),
new HttpHeaderData("Content-type", "text/plain"),
new HttpHeaderData("Set-Cookie", SetCookieIgnored2)}, isFinal: false);
Expand Down Expand Up @@ -1742,7 +1747,7 @@ await server.AcceptConnectionAsync(async connection =>
{
await connection.ReadRequestDataAsync(readBody: false);
// Send multiple 100-Continue responses.
for (int count = 0 ; count < 4; count++)
for (int count = 0; count < 4; count++)
{
await connection.SendResponseAsync(HttpStatusCode.Continue, isFinal: false);
}
Expand Down Expand Up @@ -1846,7 +1851,7 @@ await server.AcceptConnectionAsync(async connection =>
{
await connection.ReadRequestDataAsync(readBody: false);
await connection.SendResponseAsync(HttpStatusCode.OK, headers: new HttpHeaderData[] {new HttpHeaderData("Content-Length", $"{ResponseString.Length}")}, isFinal : false);
await connection.SendResponseAsync(HttpStatusCode.OK, headers: new HttpHeaderData[] { new HttpHeaderData("Content-Length", $"{ResponseString.Length}") }, isFinal: false);
byte[] body = await connection.ReadRequestBodyAsync();
Assert.Equal(RequestString, Encoding.ASCII.GetString(body));
Expand Down Expand Up @@ -2127,7 +2132,7 @@ await LoopbackServerFactory.CreateServerAsync(async (server, rootUrl) =>
}
});
}
#endregion
#endregion

[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsNotBrowserDomSupported))]
public async Task GetAsync_InvalidUrl_ExpectedExceptionThrown()
Expand Down

0 comments on commit ac1f96f

Please sign in to comment.