|
1 | 1 | using System;
|
2 |
| -using System.Collections.Generic; |
3 | 2 | using System.Net;
|
4 | 3 | using System.Net.Http;
|
5 |
| -using System.Runtime.Serialization; |
6 | 4 | using System.Threading.Tasks;
|
7 | 5 | using Xunit;
|
8 | 6 |
|
@@ -70,43 +68,59 @@ public async Task BasicPut()
|
70 | 68 | [Fact]
|
71 | 69 | public async Task BasicDelete()
|
72 | 70 | {
|
73 |
| - var guid = Guid.NewGuid().ToString(); |
74 | 71 | var result = await Http.Request("https://httpbin.org/delete")
|
75 |
| - .SendPlaintext(guid) |
76 | 72 | .ExpectJson<HttpBinResponse>()
|
77 | 73 | .DeleteAsync();
|
78 | 74 | Assert.True(result.Success);
|
79 | 75 | Assert.Equal(HttpStatusCode.OK, result.StatusCode);
|
80 |
| - Assert.True(result.Data.Form.ContainsKey(guid)); |
81 | 76 | Assert.Equal("https://httpbin.org/delete", result.Data.Url);
|
82 | 77 | Assert.Equal(Http.DefaultSettings.UserAgent, result.Data.Headers["User-Agent"]);
|
83 | 78 | }
|
84 | 79 |
|
85 |
| - private class HttpBinResponse |
| 80 | + [Fact] |
| 81 | + public async Task ErrorIgnores() |
86 | 82 | {
|
87 |
| - [DataMember(Name = "args")] |
88 |
| - public Dictionary<string, string> args { get; set; } |
89 |
| - |
90 |
| - [DataMember(Name = "data")] |
91 |
| - public string Data { get; set; } |
| 83 | + var settings = new HttpSettings(); |
| 84 | + var errorCount = 0; |
| 85 | + settings.Exception += (_, __) => errorCount++; |
92 | 86 |
|
93 |
| - [DataMember(Name = "files")] |
94 |
| - public Dictionary<string, string> files { get; set; } |
| 87 | + var result = await Http.Request("https://httpbin.org/satus/404", settings) |
| 88 | + .ExpectHttpSuccess() |
| 89 | + .GetAsync(); |
| 90 | + Assert.False(result.Success); |
| 91 | + Assert.Equal(HttpStatusCode.NotFound, result.StatusCode); |
| 92 | + Assert.Equal(1, errorCount); |
95 | 93 |
|
96 |
| - [DataMember(Name = "form")] |
97 |
| - public Dictionary<string, string> Form { get; set; } |
| 94 | + result = await Http.Request("https://httpbin.org/satus/404", settings) |
| 95 | + .WithoutLogging(HttpStatusCode.NotFound) |
| 96 | + .ExpectHttpSuccess() |
| 97 | + .GetAsync(); |
| 98 | + Assert.False(result.Success); |
| 99 | + Assert.Equal(HttpStatusCode.NotFound, result.StatusCode); |
| 100 | + Assert.Equal(1, errorCount); // didn't go up |
98 | 101 |
|
99 |
| - [DataMember(Name = "headers")] |
100 |
| - public Dictionary<string, string> Headers { get; set; } |
101 |
| - |
102 |
| - [DataMember(Name = "json")] |
103 |
| - public object JSON { get; set; } |
104 |
| - |
105 |
| - [DataMember(Name = "origin")] |
106 |
| - public string Origin { get; set; } |
| 102 | + result = await Http.Request("https://httpbin.org/satus/404", settings) |
| 103 | + .WithoutErrorLogging() |
| 104 | + .ExpectHttpSuccess() |
| 105 | + .GetAsync(); |
| 106 | + Assert.False(result.Success); |
| 107 | + Assert.Equal(HttpStatusCode.NotFound, result.StatusCode); |
| 108 | + Assert.Equal(1, errorCount); // didn't go up |
| 109 | + } |
107 | 110 |
|
108 |
| - [DataMember(Name = "url")] |
109 |
| - public string Url { get; set; } |
| 111 | + [Fact] |
| 112 | + public async Task Timeouts() |
| 113 | + { |
| 114 | + var result = await Http.Request("https://httpbin.org/delay/10") |
| 115 | + .WithTimeout(TimeSpan.FromSeconds(1)) |
| 116 | + .ExpectHttpSuccess() |
| 117 | + .GetAsync(); |
| 118 | + Assert.False(result.Success); |
| 119 | + Assert.NotNull(result.Error); |
| 120 | + Assert.Equal("HttpClient request timed out. Timeout: 1,000ms", result.Error.Message); |
| 121 | + var err = Assert.IsType<HttpClientException>(result.Error); |
| 122 | + Assert.Equal("https://httpbin.org/delay/10", err.Uri.ToString()); |
| 123 | + Assert.Null(err.StatusCode); |
110 | 124 | }
|
111 | 125 | }
|
112 | 126 | }
|
0 commit comments