Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.
/ corefx Public archive

Commit

Permalink
HttpWebRequest tests hardened & RequestStream tests disabled on Deskt…
Browse files Browse the repository at this point in the history
…op (#19584)

* Changed a lot of tests to LoopBackServer

* Hardened some tests with Outerloop and disabled RequestStreamTests

* Removed unneccesary Outerloops
  • Loading branch information
ViktorHofer authored and stephentoub committed May 10, 2017
1 parent cd7c7f2 commit bec96bf
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 54 deletions.
146 changes: 94 additions & 52 deletions src/System.Net.Requests/tests/HttpWebRequestTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ public void AllowReadStreamBuffering_SetTrueThenGet_ExpectTrue(Uri remoteServer)
Assert.True(request.AllowReadStreamBuffering);
}

[OuterLoop]
[Theory, MemberData(nameof(EchoServers))]
public async Task ContentLength_Get_ExpectSameAsGetResponseStream(Uri remoteServer)
{
Expand All @@ -135,14 +136,19 @@ public async Task ContentLength_Get_ExpectSameAsGetResponseStream(Uri remoteServ
}
}

[Theory, MemberData(nameof(EchoServers))]
public void ContentLength_SetAfterRequestSubmitted_ThrowsInvalidOperationException(Uri remoteServer)
[Fact]
public async Task ContentLength_SetAfterRequestSubmitted_ThrowsInvalidOperationException()
{
HttpWebRequest request = WebRequest.CreateHttp(remoteServer);
using (WebResponse response = request.GetResponse())
await LoopbackServer.CreateServerAsync(async (server, uri) =>
{
Assert.Throws<InvalidOperationException>(() => request.ContentLength = 255);
}
HttpWebRequest request = WebRequest.CreateHttp(uri);
Task<WebResponse> getResponse = request.GetResponseAsync();
await LoopbackServer.ReadRequestAndSendResponseAsync(server);
using (WebResponse response = await getResponse)
{
Assert.Throws<InvalidOperationException>(() => request.ContentLength = 255);
}
});
}

[Theory, MemberData(nameof(EchoServers))]
Expand Down Expand Up @@ -178,14 +184,19 @@ public void ContentType_SetThenGetEmptyValue_ExpectNull(Uri remoteServer)
Assert.Null(request.ContentType);
}

[Theory, MemberData(nameof(EchoServers))]
public void MaximumResponseHeadersLength_SetAfterRequestSubmitted_ThrowsInvalidOperationException(Uri remoteServer)
[Fact]
public async Task MaximumResponseHeadersLength_SetAfterRequestSubmitted_ThrowsInvalidOperationException()
{
HttpWebRequest request = WebRequest.CreateHttp(remoteServer);
using (WebResponse response = request.GetResponse())
await LoopbackServer.CreateServerAsync(async (server, uri) =>
{
Assert.Throws<InvalidOperationException>(() => request.MaximumResponseHeadersLength = 255);
}
HttpWebRequest request = WebRequest.CreateHttp(uri);
Task<WebResponse> getResponse = request.GetResponseAsync();
await LoopbackServer.ReadRequestAndSendResponseAsync(server);
using (WebResponse response = await getResponse)
{
Assert.Throws<InvalidOperationException>(() => request.MaximumResponseHeadersLength = 255);
}
});
}

[Theory, MemberData(nameof(EchoServers))]
Expand Down Expand Up @@ -221,14 +232,19 @@ public void MaximumAutomaticRedirections_SetThenGetOne_Success(Uri remoteServer)
Assert.Equal(MaximumAutomaticRedirections, request.MaximumAutomaticRedirections);
}

[Theory, MemberData(nameof(EchoServers))]
public void ContinueTimeout_SetAfterRequestSubmitted_ThrowsInvalidOperationException(Uri remoteServer)
[Fact]
public async Task ContinueTimeout_SetAfterRequestSubmitted_ThrowsInvalidOperationException()
{
HttpWebRequest request = WebRequest.CreateHttp(remoteServer);
using (WebResponse response = request.GetResponse())
await LoopbackServer.CreateServerAsync(async (server, uri) =>
{
Assert.Throws<InvalidOperationException>(() => request.ContinueTimeout = 255);
}
HttpWebRequest request = WebRequest.CreateHttp(uri);
Task<WebResponse> getResponse = request.GetResponseAsync();
await LoopbackServer.ReadRequestAndSendResponseAsync(server);
using (WebResponse response = await getResponse)
{
Assert.Throws<InvalidOperationException>(() => request.ContinueTimeout = 255);
}
});
}

[Theory, MemberData(nameof(EchoServers))]
Expand Down Expand Up @@ -301,7 +317,8 @@ await LoopbackServer.CreateServerAsync((server, url) =>
var sw = Stopwatch.StartNew();
WebException exception = Assert.Throws<WebException>(() =>
{
var response = (HttpWebResponse)request.GetResponse();
var response = request.GetResponse();
response.Dispose();
});
sw.Stop();
Expand Down Expand Up @@ -331,14 +348,19 @@ public void UserAgent_SetThenGetWindows_ValuesMatch(Uri remoteServer)
Assert.Equal(UserAgent, request.UserAgent);
}

[Theory, MemberData(nameof(EchoServers))]
public void Host_SetAfterRequestSubmitted_ThrowsInvalidOperationException(Uri remoteServer)
[Fact]
public async Task Host_SetAfterRequestSubmitted_ThrowsInvalidOperationException()
{
HttpWebRequest request = WebRequest.CreateHttp(remoteServer);
using (WebResponse response = request.GetResponse())
await LoopbackServer.CreateServerAsync(async (server, uri) =>
{
Assert.Throws<InvalidOperationException>(() => request.Host = "localhost");
}
HttpWebRequest request = WebRequest.CreateHttp(uri);
Task<WebResponse> getResponse = request.GetResponseAsync();
await LoopbackServer.ReadRequestAndSendResponseAsync(server);
using (WebResponse response = await getResponse)
{
Assert.Throws<InvalidOperationException>(() => request.Host = "localhost");
}
});
}

[Theory, MemberData(nameof(EchoServers))]
Expand Down Expand Up @@ -458,7 +480,7 @@ public void KeepAlive_SetThenGetBoolean_ValuesMatch(Uri remoteServer)
[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #19225")]
public void KeepAlive_CorrectConnectionHeaderSent(bool? keepAlive)
{
HttpWebRequest request = WebRequest.CreateHttp(System.Net.Test.Common.Configuration.Http.RemoteEchoServer);
HttpWebRequest request = WebRequest.CreateHttp(Test.Common.Configuration.Http.RemoteEchoServer);

if (keepAlive.HasValue)
{
Expand All @@ -483,14 +505,19 @@ public void KeepAlive_CorrectConnectionHeaderSent(bool? keepAlive)
}
}

[Theory, MemberData(nameof(EchoServers))]
public void AutomaticDecompression_SetAfterRequestSubmitted_ThrowsInvalidOperationException(Uri remoteServer)
[Fact]
public async Task AutomaticDecompression_SetAfterRequestSubmitted_ThrowsInvalidOperationException()
{
HttpWebRequest request = WebRequest.CreateHttp(remoteServer);
using (WebResponse response = request.GetResponse())
await LoopbackServer.CreateServerAsync(async (server, uri) =>
{
Assert.Throws<InvalidOperationException>(() => request.AutomaticDecompression = DecompressionMethods.Deflate);
}
HttpWebRequest request = WebRequest.CreateHttp(uri);
Task<WebResponse> getResponse = request.GetResponseAsync();
await LoopbackServer.ReadRequestAndSendResponseAsync(server);
using (WebResponse response = await getResponse)
{
Assert.Throws<InvalidOperationException>(() => request.AutomaticDecompression = DecompressionMethods.Deflate);
}
});
}

[Theory, MemberData(nameof(EchoServers))]
Expand Down Expand Up @@ -692,14 +719,19 @@ public void Date_SetMinDateAfterValidDate_ValuesMatch(Uri remoteServer)
Assert.Equal(date, request.Date);
}

[Theory, MemberData(nameof(EchoServers))]
public void SendChunked_SetAfterRequestSubmitted_ThrowsInvalidOperationException(Uri remoteServer)
[Fact]
public async Task SendChunked_SetAfterRequestSubmitted_ThrowsInvalidOperationException()
{
HttpWebRequest request = WebRequest.CreateHttp(remoteServer);
using (WebResponse response = request.GetResponse())
await LoopbackServer.CreateServerAsync(async (server, uri) =>
{
Assert.Throws<InvalidOperationException>(() => request.SendChunked = true);
}
HttpWebRequest request = WebRequest.CreateHttp(uri);
Task<WebResponse> getResponse = request.GetResponseAsync();
await LoopbackServer.ReadRequestAndSendResponseAsync(server);
using (WebResponse response = await getResponse)
{
Assert.Throws<InvalidOperationException>(() => request.SendChunked = true);
}
});
}

[Theory, MemberData(nameof(EchoServers))]
Expand Down Expand Up @@ -1039,7 +1071,8 @@ public async Task GetResponseAsync_UseDefaultCredentials_ExpectSuccess(Uri remot
{
HttpWebRequest request = WebRequest.CreateHttp(remoteServer);
request.UseDefaultCredentials = true;
await request.GetResponseAsync();
var response = await request.GetResponseAsync();
response.Dispose();
}

[OuterLoop] // fails on networks with DNS servers that provide a dummy page for invalid addresses
Expand Down Expand Up @@ -1075,14 +1108,19 @@ public async Task HaveResponse_GetResponseAsync_ExpectTrue(Uri remoteServer)
}
}

[MemberData(nameof(EchoServers))]
public void Headers_SetAfterRequestSubmitted_ThrowsInvalidOperationException(Uri remoteServer)
[Fact]
public async Task Headers_SetAfterRequestSubmitted_ThrowsInvalidOperationException()
{
HttpWebRequest request = WebRequest.CreateHttp(remoteServer);
using (request.GetResponse())
await LoopbackServer.CreateServerAsync(async (server, uri) =>
{
Assert.Throws<InvalidOperationException>(() => request.Headers = null);
}
HttpWebRequest request = WebRequest.CreateHttp(uri);
Task<WebResponse> getResponse = request.GetResponseAsync();
await LoopbackServer.ReadRequestAndSendResponseAsync(server);
using (WebResponse response = await getResponse)
{
Assert.Throws<InvalidOperationException>(() => request.Headers = null);
}
});
}

[ConditionalTheory(nameof(PlatformDetection) + "." + nameof(PlatformDetection.IsNotFedoraOrRedHatOrCentos))] // #16201
Expand Down Expand Up @@ -1123,15 +1161,19 @@ public void Method_SetInvalidString_ThrowsArgumentException(Uri remoteServer)
Assert.Throws<ArgumentException>("value", () => request.Method = "Method(2");
}

[OuterLoop]
[Theory, MemberData(nameof(EchoServers))]
public void Proxy_SetAfterRequestSubmitted_ThrowsInvalidOperationException(Uri remoteServer)
[Fact]
public async Task Proxy_SetAfterRequestSubmitted_ThrowsInvalidOperationException()
{
HttpWebRequest request = WebRequest.CreateHttp(remoteServer);
using (var response = (HttpWebResponse)request.GetResponse())
await LoopbackServer.CreateServerAsync(async (server, uri) =>
{
Assert.Throws<InvalidOperationException>(() => request.Proxy = WebRequest.DefaultWebProxy);
}
HttpWebRequest request = WebRequest.CreateHttp(uri);
Task<WebResponse> getResponse = request.GetResponseAsync();
await LoopbackServer.ReadRequestAndSendResponseAsync(server);
using (WebResponse response = await getResponse)
{
Assert.Throws<InvalidOperationException>(() => request.Proxy = WebRequest.DefaultWebProxy);
}
});
}

[Theory, MemberData(nameof(EchoServers))]
Expand Down
5 changes: 3 additions & 2 deletions src/System.Net.Requests/tests/RequestStreamTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

namespace System.Net.Tests
{
[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "Tests hang on .NET Framework")]
public class RequestStreamTest
{
readonly byte[] buffer = new byte[1];
Expand Down Expand Up @@ -62,7 +63,7 @@ public void Write_OffsetPlusCountMaxValueExceedsBufferLength_Throws()
}
}

#endregion
#endregion

#region WriteAsync

Expand Down Expand Up @@ -223,7 +224,7 @@ private Stream GetRequestStream()
{
HttpWebRequest request = HttpWebRequest.CreateHttp(System.Net.Test.Common.Configuration.Http.RemoteEchoServer);
request.Method = "POST";
return request.GetRequestStreamAsync().GetAwaiter().GetResult();
return request.GetRequestStream();
}
}
}

0 comments on commit bec96bf

Please sign in to comment.