Skip to content

Commit 67a745c

Browse files
committed
Moar testing
1 parent 25dffc3 commit 67a745c

File tree

2 files changed

+71
-25
lines changed

2 files changed

+71
-25
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System.Collections.Generic;
2+
using System.Runtime.Serialization;
3+
4+
namespace StackExchange.Utils.Tests
5+
{
6+
public class HttpBinResponse
7+
{
8+
[DataMember(Name = "args")]
9+
public Dictionary<string, string> args { get; set; }
10+
11+
[DataMember(Name = "data")]
12+
public string Data { get; set; }
13+
14+
[DataMember(Name = "files")]
15+
public Dictionary<string, string> files { get; set; }
16+
17+
[DataMember(Name = "form")]
18+
public Dictionary<string, string> Form { get; set; }
19+
20+
[DataMember(Name = "headers")]
21+
public Dictionary<string, string> Headers { get; set; }
22+
23+
[DataMember(Name = "json")]
24+
public object JSON { get; set; }
25+
26+
[DataMember(Name = "origin")]
27+
public string Origin { get; set; }
28+
29+
[DataMember(Name = "url")]
30+
public string Url { get; set; }
31+
}
32+
}

tests/StackExchange.Utils.Tests/HttpTests.cs

+39-25
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
using System;
2-
using System.Collections.Generic;
32
using System.Net;
43
using System.Net.Http;
5-
using System.Runtime.Serialization;
64
using System.Threading.Tasks;
75
using Xunit;
86

@@ -70,43 +68,59 @@ public async Task BasicPut()
7068
[Fact]
7169
public async Task BasicDelete()
7270
{
73-
var guid = Guid.NewGuid().ToString();
7471
var result = await Http.Request("https://httpbin.org/delete")
75-
.SendPlaintext(guid)
7672
.ExpectJson<HttpBinResponse>()
7773
.DeleteAsync();
7874
Assert.True(result.Success);
7975
Assert.Equal(HttpStatusCode.OK, result.StatusCode);
80-
Assert.True(result.Data.Form.ContainsKey(guid));
8176
Assert.Equal("https://httpbin.org/delete", result.Data.Url);
8277
Assert.Equal(Http.DefaultSettings.UserAgent, result.Data.Headers["User-Agent"]);
8378
}
8479

85-
private class HttpBinResponse
80+
[Fact]
81+
public async Task ErrorIgnores()
8682
{
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++;
9286

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);
9593

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
98101

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+
}
107110

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);
110124
}
111125
}
112126
}

0 commit comments

Comments
 (0)