Skip to content

Commit bbdefbc

Browse files
committed
Adds the possibility to simulate a timeout.
1 parent 712c645 commit bbdefbc

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,5 @@ The following assertions should be able in the first release:
99
- WithContentType: Or headers in the body of a httprequestmessage
1010

1111
Preferably the follwing setup for responses:
12-
- Simulate timeout
1312
- easier response body creation?
1413

src/HttpClientTestHelpers/TestableHttpMessageHandler.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ public class TestableHttpMessageHandler : HttpMessageHandler
2424
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2525
{
2626
httpRequestMessages.Enqueue(request);
27+
28+
if(response is TimeoutHttpResponseMessage)
29+
{
30+
throw new TaskCanceledException(new OperationCanceledException().Message);
31+
}
2732
return Task.FromResult(response);
2833
}
2934

@@ -36,6 +41,14 @@ public void RespondWith(HttpResponseMessage httpResponseMessage)
3641
response = httpResponseMessage ?? throw new ArgumentNullException(nameof(httpResponseMessage));
3742
}
3843

44+
/// <summary>
45+
/// Simulate a timeout on the request by throwing a TaskCanceledException when a request is received.
46+
/// </summary>
47+
public void SimulateTimeout()
48+
{
49+
response = new TimeoutHttpResponseMessage();
50+
}
51+
3952
/// <summary>
4053
/// Validates that requests have been made, throws an exception when no requests were made.
4154
/// </summary>
@@ -81,5 +94,9 @@ public HttpRequestMessageAsserter ShouldNotHaveMadeRequestsTo(string pattern)
8194

8295
return new HttpRequestMessageAsserter(Requests, true).WithUriPattern(pattern);
8396
}
97+
98+
private class TimeoutHttpResponseMessage : HttpResponseMessage
99+
{
100+
}
84101
}
85102
}

test/HttpClientTestHelpers.Tests/TestableHttpMessageHandlerTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,5 +185,16 @@ public void RespondWith_NullValue_ThrowsArgumentNullException()
185185
Assert.Equal("httpResponseMessage", exception.ParamName);
186186
}
187187
#nullable restore
188+
189+
[Fact]
190+
public async Task SimulateTimout_WhenRequestIsMade_ThrowsTaskCancelationExceptionWithOperationCanceledMessage()
191+
{
192+
using var sut = new TestableHttpMessageHandler();
193+
sut.SimulateTimeout();
194+
using var client = new HttpClient(sut);
195+
196+
var exception = await Assert.ThrowsAsync<TaskCanceledException>(() => client.GetAsync("https://example.com"));
197+
Assert.Equal(new OperationCanceledException().Message, exception.Message);
198+
}
188199
}
189200
}

0 commit comments

Comments
 (0)