1
1
// Copyright (c) .NET Foundation. All rights reserved.
2
2
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3
3
4
- using System ;
5
4
using System . Collections . Generic ;
6
5
using System . Linq ;
7
6
using System . Net ;
8
7
using System . Net . Http ;
9
8
using System . Threading . Tasks ;
10
- using Microsoft . AspNet . Builder ;
11
- using Microsoft . Framework . DependencyInjection ;
12
9
using Xunit ;
13
10
14
11
namespace Microsoft . AspNet . Mvc . FunctionalTests
15
12
{
16
- public class AntiforgeryTests
13
+ public class AntiforgeryTests : IClassFixture < MvcTestFixture < AntiforgeryTokenWebSite . Startup > >
17
14
{
18
- private const string SiteName = nameof ( AntiforgeryTokenWebSite ) ;
19
- private readonly Action < IApplicationBuilder > _app = new AntiforgeryTokenWebSite . Startup ( ) . Configure ;
20
- private readonly Action < IServiceCollection > _configureServices = new AntiforgeryTokenWebSite . Startup ( ) . ConfigureServices ;
15
+ public AntiforgeryTests ( MvcTestFixture < AntiforgeryTokenWebSite . Startup > fixture )
16
+ {
17
+ Client = fixture . Client ;
18
+ }
19
+
20
+ public HttpClient Client { get ; }
21
21
22
22
[ Fact ]
23
23
public async Task MultipleAFTokensWithinTheSamePage_GeneratesASingleCookieToken ( )
24
24
{
25
- // Arrange
26
- var server = TestHelper . CreateServer ( _app , SiteName , _configureServices ) ;
27
- var client = server . CreateClient ( ) ;
25
+ // Arrange & Act
26
+ var response = await Client . GetAsync ( "http://localhost/Account/Login" ) ;
28
27
29
- // Act
30
- var response = await client . GetAsync ( "http://localhost/Account/Login" ) ;
31
-
32
- //Assert
28
+ // Assert
33
29
Assert . Equal ( HttpStatusCode . OK , response . StatusCode ) ;
34
30
var header = Assert . Single ( response . Headers . GetValues ( "X-Frame-Options" ) ) ;
35
31
Assert . Equal ( "SAMEORIGIN" , header ) ;
@@ -45,11 +41,8 @@ public async Task MultipleAFTokensWithinTheSamePage_GeneratesASingleCookieToken(
45
41
public async Task MultipleFormPostWithingASingleView_AreAllowed ( )
46
42
{
47
43
// Arrange
48
- var server = TestHelper . CreateServer ( _app , SiteName , _configureServices ) ;
49
- var client = server . CreateClient ( ) ;
50
-
51
- // do a get response.
52
- var getResponse = await client . GetAsync ( "http://localhost/Account/Login" ) ;
44
+ // Do a get request.
45
+ var getResponse = await Client . GetAsync ( "http://localhost/Account/Login" ) ;
53
46
var responseBody = await getResponse . Content . ReadAsStringAsync ( ) ;
54
47
55
48
// Get the AF token for the second login. If the cookies are generated twice(i.e are different),
@@ -69,7 +62,7 @@ public async Task MultipleFormPostWithingASingleView_AreAllowed()
69
62
request . Content = new FormUrlEncodedContent ( nameValueCollection ) ;
70
63
71
64
// Act
72
- var response = await client . SendAsync ( request ) ;
65
+ var response = await Client . SendAsync ( request ) ;
73
66
74
67
// Assert
75
68
Assert . Equal ( HttpStatusCode . OK , response . StatusCode ) ;
@@ -80,10 +73,7 @@ public async Task MultipleFormPostWithingASingleView_AreAllowed()
80
73
public async Task InvalidCookieToken_Throws ( )
81
74
{
82
75
// Arrange
83
- var server = TestHelper . CreateServer ( _app , SiteName , _configureServices ) ;
84
- var client = server . CreateClient ( ) ;
85
-
86
- var getResponse = await client . GetAsync ( "http://localhost/Account/Login" ) ;
76
+ var getResponse = await Client . GetAsync ( "http://localhost/Account/Login" ) ;
87
77
var responseBody = await getResponse . Content . ReadAsStringAsync ( ) ;
88
78
var formToken = AntiforgeryTestHelper . RetrieveAntiforgeryToken ( responseBody , "Account/Login" ) ;
89
79
@@ -101,7 +91,7 @@ public async Task InvalidCookieToken_Throws()
101
91
request . Content = new FormUrlEncodedContent ( nameValueCollection ) ;
102
92
103
93
// Act
104
- var response = await client . SendAsync ( request ) ;
94
+ var response = await Client . SendAsync ( request ) ;
105
95
106
96
// Assert
107
97
var exception = response . GetServerException ( ) ;
@@ -112,10 +102,7 @@ public async Task InvalidCookieToken_Throws()
112
102
public async Task InvalidFormToken_Throws ( )
113
103
{
114
104
// Arrange
115
- var server = TestHelper . CreateServer ( _app , SiteName , _configureServices ) ;
116
- var client = server . CreateClient ( ) ;
117
-
118
- var getResponse = await client . GetAsync ( "http://localhost/Account/Login" ) ;
105
+ var getResponse = await Client . GetAsync ( "http://localhost/Account/Login" ) ;
119
106
var responseBody = await getResponse . Content . ReadAsStringAsync ( ) ;
120
107
var cookieToken = AntiforgeryTestHelper . RetrieveAntiforgeryCookie ( getResponse ) ;
121
108
var request = new HttpRequestMessage ( HttpMethod . Post , "http://localhost/Account/Login" ) ;
@@ -131,7 +118,7 @@ public async Task InvalidFormToken_Throws()
131
118
request . Content = new FormUrlEncodedContent ( nameValueCollection ) ;
132
119
133
120
// Act
134
- var response = await client . SendAsync ( request ) ;
121
+ var response = await Client . SendAsync ( request ) ;
135
122
136
123
// Assert
137
124
var exception = response . GetServerException ( ) ;
@@ -142,16 +129,13 @@ public async Task InvalidFormToken_Throws()
142
129
public async Task IncompatibleCookieToken_Throws ( )
143
130
{
144
131
// Arrange
145
- var server = TestHelper . CreateServer ( _app , SiteName , _configureServices ) ;
146
- var client = server . CreateClient ( ) ;
147
-
148
132
// do a get response.
149
133
// We do two requests to get two different sets of antiforgery cookie and token values.
150
- var getResponse1 = await client . GetAsync ( "http://localhost/Account/Login" ) ;
134
+ var getResponse1 = await Client . GetAsync ( "http://localhost/Account/Login" ) ;
151
135
var responseBody1 = await getResponse1 . Content . ReadAsStringAsync ( ) ;
152
136
var formToken1 = AntiforgeryTestHelper . RetrieveAntiforgeryToken ( responseBody1 , "Account/Login" ) ;
153
137
154
- var getResponse2 = await client . GetAsync ( "http://localhost/Account/Login" ) ;
138
+ var getResponse2 = await Client . GetAsync ( "http://localhost/Account/Login" ) ;
155
139
var responseBody2 = await getResponse2 . Content . ReadAsStringAsync ( ) ;
156
140
var cookieToken2 = AntiforgeryTestHelper . RetrieveAntiforgeryCookie ( getResponse2 ) ;
157
141
@@ -169,7 +153,7 @@ public async Task IncompatibleCookieToken_Throws()
169
153
request . Content = new FormUrlEncodedContent ( nameValueCollection ) ;
170
154
171
155
// Act
172
- var response = await client . SendAsync ( request ) ;
156
+ var response = await Client . SendAsync ( request ) ;
173
157
174
158
// Assert
175
159
var exception = response . GetServerException ( ) ;
@@ -180,11 +164,8 @@ public async Task IncompatibleCookieToken_Throws()
180
164
public async Task MissingCookieToken_Throws ( )
181
165
{
182
166
// Arrange
183
- var server = TestHelper . CreateServer ( _app , SiteName , _configureServices ) ;
184
- var client = server . CreateClient ( ) ;
185
-
186
167
// do a get response.
187
- var getResponse = await client . GetAsync ( "http://localhost/Account/Login" ) ;
168
+ var getResponse = await Client . GetAsync ( "http://localhost/Account/Login" ) ;
188
169
var responseBody = await getResponse . Content . ReadAsStringAsync ( ) ;
189
170
var formToken = AntiforgeryTestHelper . RetrieveAntiforgeryToken ( responseBody , "Account/Login" ) ;
190
171
var cookieTokenKey = AntiforgeryTestHelper . RetrieveAntiforgeryCookie ( getResponse ) . Key ;
@@ -200,7 +181,7 @@ public async Task MissingCookieToken_Throws()
200
181
request . Content = new FormUrlEncodedContent ( nameValueCollection ) ;
201
182
202
183
// Act
203
- var response = await client . SendAsync ( request ) ;
184
+ var response = await Client . SendAsync ( request ) ;
204
185
205
186
// Assert
206
187
var exception = response . GetServerException ( ) ;
@@ -213,9 +194,7 @@ public async Task MissingCookieToken_Throws()
213
194
public async Task MissingAFToken_Throws ( )
214
195
{
215
196
// Arrange
216
- var server = TestHelper . CreateServer ( _app , SiteName , _configureServices ) ;
217
- var client = server . CreateClient ( ) ;
218
- var getResponse = await client . GetAsync ( "http://localhost/Account/Login" ) ;
197
+ var getResponse = await Client . GetAsync ( "http://localhost/Account/Login" ) ;
219
198
var responseBody = await getResponse . Content . ReadAsStringAsync ( ) ;
220
199
var cookieToken = AntiforgeryTestHelper . RetrieveAntiforgeryCookie ( getResponse ) ;
221
200
@@ -230,7 +209,7 @@ public async Task MissingAFToken_Throws()
230
209
request . Content = new FormUrlEncodedContent ( nameValueCollection ) ;
231
210
232
211
// Act
233
- var response = await client . SendAsync ( request ) ;
212
+ var response = await Client . SendAsync ( request ) ;
234
213
235
214
// Assert
236
215
var exception = response . GetServerException ( ) ;
@@ -241,12 +220,8 @@ public async Task MissingAFToken_Throws()
241
220
[ Fact ]
242
221
public async Task SetCookieAndHeaderBeforeFlushAsync_GeneratesCookieTokenAndHeader ( )
243
222
{
244
- // Arrange
245
- var server = TestHelper . CreateServer ( _app , SiteName , _configureServices ) ;
246
- var client = server . CreateClient ( ) ;
247
-
248
- // Act
249
- var response = await client . GetAsync ( "http://localhost/Account/FlushAsyncLogin" ) ;
223
+ // Arrange & Act
224
+ var response = await Client . GetAsync ( "http://localhost/Account/FlushAsyncLogin" ) ;
250
225
251
226
// Assert
252
227
var header = Assert . Single ( response . Headers . GetValues ( "X-Frame-Options" ) ) ;
@@ -260,11 +235,8 @@ public async Task SetCookieAndHeaderBeforeFlushAsync_GeneratesCookieTokenAndHead
260
235
public async Task SetCookieAndHeaderBeforeFlushAsync_PostToForm ( )
261
236
{
262
237
// Arrange
263
- var server = TestHelper . CreateServer ( _app , SiteName , _configureServices ) ;
264
- var client = server . CreateClient ( ) ;
265
-
266
238
// do a get response.
267
- var getResponse = await client . GetAsync ( "http://localhost/Account/FlushAsyncLogin" ) ;
239
+ var getResponse = await Client . GetAsync ( "http://localhost/Account/FlushAsyncLogin" ) ;
268
240
var responseBody = await getResponse . Content . ReadAsStringAsync ( ) ;
269
241
270
242
var formToken = AntiforgeryTestHelper . RetrieveAntiforgeryToken ( responseBody , "Account/FlushAsyncLogin" ) ;
@@ -282,7 +254,7 @@ public async Task SetCookieAndHeaderBeforeFlushAsync_PostToForm()
282
254
request . Content = new FormUrlEncodedContent ( nameValueCollection ) ;
283
255
284
256
// Act
285
- var response = await client . SendAsync ( request ) ;
257
+ var response = await Client . SendAsync ( request ) ;
286
258
287
259
// Assert
288
260
Assert . Equal ( HttpStatusCode . OK , response . StatusCode ) ;
0 commit comments