@@ -40,6 +40,7 @@ public void AuthHandler_DefaultConstructor()
40
40
using ( AuthenticationHandler auth = new AuthenticationHandler ( ) )
41
41
{
42
42
Assert . IsNull ( auth . InnerHandler , "Http message handler initialized" ) ;
43
+ Assert . IsNull ( auth . AuthenticationProvider , "Authentication provider initialized" ) ;
43
44
Assert . IsInstanceOfType ( auth , typeof ( AuthenticationHandler ) , "Unexpected authentication handler set" ) ;
44
45
}
45
46
}
@@ -54,11 +55,17 @@ public void AuthHandler_AuthProviderHttpMessageHandlerConstructor()
54
55
Assert . IsInstanceOfType ( authenticationHandler , typeof ( AuthenticationHandler ) , "Unexpected authentication handler set" ) ;
55
56
}
56
57
57
- [ TestMethod ]
58
- public async Task AuthHandler_OkStatusShouldPassThrough ( )
58
+ [ DataTestMethod ]
59
+ [ DataRow ( HttpStatusCode . OK ) ]
60
+ [ DataRow ( HttpStatusCode . MovedPermanently ) ]
61
+ [ DataRow ( HttpStatusCode . NotFound ) ]
62
+ [ DataRow ( HttpStatusCode . BadRequest ) ]
63
+ [ DataRow ( HttpStatusCode . Forbidden ) ]
64
+ [ DataRow ( HttpStatusCode . GatewayTimeout ) ]
65
+ public async Task AuthHandler_NonUnauthorizedStatusShouldPassThrough ( HttpStatusCode statusCode )
59
66
{
60
67
var httpRequestMessage = new HttpRequestMessage ( HttpMethod . Get , "http://example.org/foo" ) ;
61
- var expectedResponse = new HttpResponseMessage ( HttpStatusCode . OK ) ;
68
+ var expectedResponse = new HttpResponseMessage ( statusCode ) ;
62
69
63
70
testHttpMessageHandler . SetHttpResponse ( expectedResponse ) ;
64
71
@@ -68,20 +75,130 @@ public async Task AuthHandler_OkStatusShouldPassThrough()
68
75
Assert . AreSame ( response . RequestMessage , httpRequestMessage , "Http response message sets wrong request message" ) ;
69
76
}
70
77
71
- [ DataTestMethod ]
72
- [ DataRow ( HttpStatusCode . Unauthorized ) ]
73
- public async Task AuthHandler_ShouldRetryUnAuthorizedResponse ( HttpStatusCode statusCode )
78
+ [ TestMethod ]
79
+ public async Task AuthHandler_ShouldRetryUnauthorizedGetRequest ( )
74
80
{
75
81
var httpRequestMessage = new HttpRequestMessage ( HttpMethod . Get , "http://example.com/bar" ) ;
76
- var unAuthorizedResponse = new HttpResponseMessage ( statusCode ) ;
82
+ var unauthorizedResponse = new HttpResponseMessage ( HttpStatusCode . Unauthorized ) ;
83
+ var expectedResponse = new HttpResponseMessage ( HttpStatusCode . OK ) ;
84
+
85
+ testHttpMessageHandler . SetHttpResponse ( unauthorizedResponse , expectedResponse ) ;
86
+
87
+ var response = await invoker . SendAsync ( httpRequestMessage , new CancellationToken ( ) ) ;
88
+
89
+ Assert . AreSame ( response . RequestMessage , httpRequestMessage , "Http response message sets wrong request message" ) ;
90
+ Assert . AreSame ( response , expectedResponse , "Retry didn't happen" ) ;
91
+ Assert . IsNull ( response . RequestMessage . Content , "Content is not null" ) ;
92
+ }
93
+
94
+ [ TestMethod ]
95
+ public async Task AuthHandler_ShouldRetryUnauthorizedPostRequestWithNoContent ( )
96
+ {
97
+ var httpRequestMessage = new HttpRequestMessage ( HttpMethod . Post , "http://example.com/bar" ) ;
98
+ var unauthorizedResponse = new HttpResponseMessage ( HttpStatusCode . Unauthorized ) ;
77
99
var expectedResponse = new HttpResponseMessage ( HttpStatusCode . OK ) ;
78
100
79
- testHttpMessageHandler . SetHttpResponse ( unAuthorizedResponse , expectedResponse ) ;
101
+ testHttpMessageHandler . SetHttpResponse ( unauthorizedResponse , expectedResponse ) ;
80
102
81
103
var response = await invoker . SendAsync ( httpRequestMessage , new CancellationToken ( ) ) ;
82
104
83
105
Assert . AreSame ( response . RequestMessage , httpRequestMessage , "Http response message sets wrong request message" ) ;
84
106
Assert . AreSame ( response , expectedResponse , "Retry didn't happen" ) ;
107
+ Assert . IsNull ( response . RequestMessage . Content , "Content is not null" ) ;
108
+ }
109
+
110
+ [ TestMethod ]
111
+ public async Task AuthHandler_ShouldRetryUnauthorizedPostRequestWithBufferContent ( )
112
+ {
113
+ var httpRequestMessage = new HttpRequestMessage ( HttpMethod . Post , "http://example.com/bar" ) ;
114
+ httpRequestMessage . Content = new StringContent ( "Hello World!" ) ;
115
+
116
+ var unauthorizedResponse = new HttpResponseMessage ( HttpStatusCode . Unauthorized ) ;
117
+ var okResponse = new HttpResponseMessage ( HttpStatusCode . OK ) ;
118
+
119
+ testHttpMessageHandler . SetHttpResponse ( unauthorizedResponse , okResponse ) ;
120
+
121
+ var response = await invoker . SendAsync ( httpRequestMessage , new CancellationToken ( ) ) ;
122
+
123
+ Assert . AreSame ( response , okResponse , "Retry didn't happen" ) ;
124
+ Assert . AreNotSame ( response , unauthorizedResponse , "Retry didn't happen" ) ;
125
+ Assert . IsNotNull ( response . RequestMessage . Content , "The request content is null" ) ;
126
+ Assert . AreEqual ( response . RequestMessage . Content . ReadAsStringAsync ( ) . Result , "Hello World!" , "Content changed" ) ;
127
+ }
128
+
129
+ [ TestMethod ]
130
+ public async Task AuthHandler_ShouldRetryUnauthorizedPatchRequestWithBufferContent ( )
131
+ {
132
+ var httpRequestMessage = new HttpRequestMessage ( new HttpMethod ( "PATCH" ) , "http://example.com/bar" ) ;
133
+ httpRequestMessage . Content = new StringContent ( "Hello World!" ) ;
134
+
135
+ var unauthorizedResponse = new HttpResponseMessage ( HttpStatusCode . Unauthorized ) ;
136
+ var okResponse = new HttpResponseMessage ( HttpStatusCode . OK ) ;
137
+
138
+ testHttpMessageHandler . SetHttpResponse ( unauthorizedResponse , okResponse ) ;
139
+
140
+ var response = await invoker . SendAsync ( httpRequestMessage , new CancellationToken ( ) ) ;
141
+
142
+ Assert . AreSame ( response , okResponse , "Retry didn't happen" ) ;
143
+ Assert . AreNotSame ( response , unauthorizedResponse , "Retry didn't happen" ) ;
144
+ Assert . IsNotNull ( response . RequestMessage . Content , "The request content is null" ) ;
145
+ Assert . AreEqual ( response . RequestMessage . Content . ReadAsStringAsync ( ) . Result , "Hello World!" , "Content changed" ) ;
146
+ }
147
+
148
+ [ TestMethod ]
149
+ public async Task AuthHandler_ShouldNotRetryUnauthorizedPutRequestWithStreamContent ( )
150
+ {
151
+ var httpRequestMessage = new HttpRequestMessage ( HttpMethod . Put , "http://example.com/bar" ) ;
152
+ httpRequestMessage . Content = new StringContent ( "Jambo" ) ;
153
+ httpRequestMessage . Content . Headers . ContentLength = - 1 ;
154
+
155
+ var unauthorizedResponse = new HttpResponseMessage ( HttpStatusCode . Unauthorized ) ;
156
+ var okResponse = new HttpResponseMessage ( HttpStatusCode . OK ) ;
157
+
158
+ testHttpMessageHandler . SetHttpResponse ( unauthorizedResponse , okResponse ) ;
159
+
160
+ var response = await invoker . SendAsync ( httpRequestMessage , new CancellationToken ( ) ) ;
161
+
162
+ Assert . AreNotSame ( response , okResponse , "Unexpected retry" ) ;
163
+ Assert . AreSame ( response , unauthorizedResponse , "Unexpected retry" ) ;
164
+ Assert . IsNotNull ( response . RequestMessage . Content , "Request content is null" ) ;
165
+ Assert . AreEqual ( response . RequestMessage . Content . Headers . ContentLength , - 1 , "Request content length changed" ) ;
166
+ }
167
+
168
+ [ TestMethod ]
169
+ public async Task AuthHandler_ShouldNotRetryUnauthorizedPatchRequestWithStreamContent ( )
170
+ {
171
+ var httpRequestMessage = new HttpRequestMessage ( new HttpMethod ( "PATCH" ) , "http://example.com/bar" ) ;
172
+ httpRequestMessage . Content = new StringContent ( "Jambo" ) ;
173
+ httpRequestMessage . Content . Headers . ContentLength = - 1 ;
174
+
175
+ var unauthorizedResponse = new HttpResponseMessage ( HttpStatusCode . Unauthorized ) ;
176
+ var okResponse = new HttpResponseMessage ( HttpStatusCode . OK ) ;
177
+
178
+ testHttpMessageHandler . SetHttpResponse ( unauthorizedResponse , okResponse ) ;
179
+
180
+ var response = await invoker . SendAsync ( httpRequestMessage , new CancellationToken ( ) ) ;
181
+
182
+ Assert . AreNotSame ( response , okResponse , "Unexpected retry" ) ;
183
+ Assert . AreSame ( response , unauthorizedResponse , "Unexpected retry" ) ;
184
+ Assert . IsNotNull ( response . RequestMessage . Content , "Request content is null" ) ;
185
+ Assert . AreEqual ( response . RequestMessage . Content . Headers . ContentLength , - 1 , "Request content length changed" ) ;
186
+ }
187
+
188
+ [ TestMethod ]
189
+ public async Task AuthHandler_ShouldReturnUnauthorizedRequestWithDefaultMaxRetryExceeded ( )
190
+ {
191
+ var httpRequestMessage = new HttpRequestMessage ( HttpMethod . Put , "http://example.com/bar" ) ;
192
+ httpRequestMessage . Content = new StringContent ( "Hello Mars!" ) ;
193
+ var unauthorizedResponse = new HttpResponseMessage ( HttpStatusCode . Unauthorized ) ;
194
+ var expectedResponse = new HttpResponseMessage ( HttpStatusCode . Unauthorized ) ;
195
+
196
+ testHttpMessageHandler . SetHttpResponse ( unauthorizedResponse , expectedResponse ) ;
197
+
198
+ var response = await invoker . SendAsync ( httpRequestMessage , new CancellationToken ( ) ) ;
199
+
200
+ Assert . AreSame ( response , expectedResponse , "Unexpected code returned" ) ;
201
+ Assert . AreEqual ( response . RequestMessage . Content . ReadAsStringAsync ( ) . Result , "Hello Mars!" ) ;
85
202
}
86
203
}
87
204
}
0 commit comments