File tree Expand file tree Collapse file tree 3 files changed +28
-1
lines changed
src/HttpClientTestHelpers
test/HttpClientTestHelpers.Tests Expand file tree Collapse file tree 3 files changed +28
-1
lines changed Original file line number Diff line number Diff 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
1111Preferably the follwing setup for responses:
12- - Simulate timeout
1312- easier response body creation?
1413
Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff 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}
You can’t perform that action at this time.
0 commit comments