@@ -99,7 +99,7 @@ public async Task WriteFileAsync_CopiesBuffer_ToOutputStream()
99
99
[ InlineData ( 6 , 10 , "World" , 5 ) ]
100
100
[ InlineData ( null , 5 , "World" , 5 ) ]
101
101
[ InlineData ( 6 , null , "World" , 5 ) ]
102
- public async Task WriteFileAsync_PreconditionStateShouldProcess_WritesRangeRequested ( long ? start , long ? end , string expectedString , long contentLength )
102
+ public async Task WriteFileAsync_PreconditionStateShouldProcess_RangeRequestIgnored_WritesRangeRequested_IfRangeProcessingOn ( long ? start , long ? end , string expectedString , long contentLength )
103
103
{
104
104
// Arrange
105
105
var contentType = "text/plain" ;
@@ -134,18 +134,29 @@ public async Task WriteFileAsync_PreconditionStateShouldProcess_WritesRangeReque
134
134
httpResponse . Body . Seek ( 0 , SeekOrigin . Begin ) ;
135
135
var streamReader = new StreamReader ( httpResponse . Body ) ;
136
136
var body = streamReader . ReadToEndAsync ( ) . Result ;
137
- Assert . Equal ( StatusCodes . Status206PartialContent , httpResponse . StatusCode ) ;
138
- Assert . Equal ( "bytes" , httpResponse . Headers [ HeaderNames . AcceptRanges ] ) ;
139
- var contentRange = new ContentRangeHeaderValue ( start . Value , end . Value , byteArray . Length ) ;
140
- Assert . Equal ( contentRange . ToString ( ) , httpResponse . Headers [ HeaderNames . ContentRange ] ) ;
141
137
Assert . Equal ( lastModified . ToString ( "R" ) , httpResponse . Headers [ HeaderNames . LastModified ] ) ;
142
138
Assert . Equal ( entityTag . ToString ( ) , httpResponse . Headers [ HeaderNames . ETag ] ) ;
143
- Assert . Equal ( contentLength , httpResponse . ContentLength ) ;
144
- Assert . Equal ( expectedString , body ) ;
139
+
140
+ if ( AppContext . TryGetSwitch ( FileResultExecutorBase . EnableRangeProcessingSwitch , out var enableRangeProcessingSwitch )
141
+ && enableRangeProcessingSwitch )
142
+ {
143
+ Assert . Equal ( StatusCodes . Status206PartialContent , httpResponse . StatusCode ) ;
144
+ Assert . Equal ( "bytes" , httpResponse . Headers [ HeaderNames . AcceptRanges ] ) ;
145
+ var contentRange = new ContentRangeHeaderValue ( start . Value , end . Value , byteArray . Length ) ;
146
+ Assert . Equal ( contentRange . ToString ( ) , httpResponse . Headers [ HeaderNames . ContentRange ] ) ;
147
+ Assert . Equal ( contentLength , httpResponse . ContentLength ) ;
148
+ Assert . Equal ( expectedString , body ) ;
149
+ }
150
+ else
151
+ {
152
+ Assert . Equal ( StatusCodes . Status200OK , httpResponse . StatusCode ) ;
153
+ Assert . Equal ( 11 , httpResponse . ContentLength ) ;
154
+ Assert . Equal ( "Hello World" , body ) ;
155
+ }
145
156
}
146
157
147
158
[ Fact ]
148
- public async Task WriteFileAsync_IfRangeHeaderValid_WritesRequestedRange ( )
159
+ public async Task WriteFileAsync_IfRangeHeaderValid_WritesRangeRequest_IfRangeProcessingOn ( )
149
160
{
150
161
// Arrange
151
162
var contentType = "text/plain" ;
@@ -179,18 +190,29 @@ public async Task WriteFileAsync_IfRangeHeaderValid_WritesRequestedRange()
179
190
httpResponse . Body . Seek ( 0 , SeekOrigin . Begin ) ;
180
191
var streamReader = new StreamReader ( httpResponse . Body ) ;
181
192
var body = streamReader . ReadToEndAsync ( ) . Result ;
182
- Assert . Equal ( StatusCodes . Status206PartialContent , httpResponse . StatusCode ) ;
183
- Assert . Equal ( "bytes" , httpResponse . Headers [ HeaderNames . AcceptRanges ] ) ;
184
- var contentRange = new ContentRangeHeaderValue ( 0 , 4 , byteArray . Length ) ;
185
- Assert . Equal ( contentRange . ToString ( ) , httpResponse . Headers [ HeaderNames . ContentRange ] ) ;
186
193
Assert . Equal ( lastModified . ToString ( "R" ) , httpResponse . Headers [ HeaderNames . LastModified ] ) ;
187
194
Assert . Equal ( entityTag . ToString ( ) , httpResponse . Headers [ HeaderNames . ETag ] ) ;
188
- Assert . Equal ( 5 , httpResponse . ContentLength ) ;
189
- Assert . Equal ( "Hello" , body ) ;
195
+
196
+ if ( AppContext . TryGetSwitch ( FileResultExecutorBase . EnableRangeProcessingSwitch , out var enableRangeProcessingSwitch )
197
+ && enableRangeProcessingSwitch )
198
+ {
199
+ Assert . Equal ( StatusCodes . Status206PartialContent , httpResponse . StatusCode ) ;
200
+ Assert . Equal ( "bytes" , httpResponse . Headers [ HeaderNames . AcceptRanges ] ) ;
201
+ var contentRange = new ContentRangeHeaderValue ( 0 , 4 , byteArray . Length ) ;
202
+ Assert . Equal ( contentRange . ToString ( ) , httpResponse . Headers [ HeaderNames . ContentRange ] ) ;
203
+ Assert . Equal ( 5 , httpResponse . ContentLength ) ;
204
+ Assert . Equal ( "Hello" , body ) ;
205
+ }
206
+ else
207
+ {
208
+ Assert . Equal ( StatusCodes . Status200OK , httpResponse . StatusCode ) ;
209
+ Assert . Equal ( 11 , httpResponse . ContentLength ) ;
210
+ Assert . Equal ( "Hello World" , body ) ;
211
+ }
190
212
}
191
213
192
214
[ Fact ]
193
- public async Task WriteFileAsync_IfRangeHeaderInvalid_RangeRequestedIgnored ( )
215
+ public async Task WriteFileAsync_IfRangeHeaderInvalid_RangeRequestIgnored ( )
194
216
{
195
217
// Arrange
196
218
var contentType = "text/plain" ;
@@ -225,7 +247,6 @@ public async Task WriteFileAsync_IfRangeHeaderInvalid_RangeRequestedIgnored()
225
247
var streamReader = new StreamReader ( httpResponse . Body ) ;
226
248
var body = streamReader . ReadToEndAsync ( ) . Result ;
227
249
Assert . Equal ( StatusCodes . Status200OK , httpResponse . StatusCode ) ;
228
- Assert . Equal ( "bytes" , httpResponse . Headers [ HeaderNames . AcceptRanges ] ) ;
229
250
Assert . Equal ( lastModified . ToString ( "R" ) , httpResponse . Headers [ HeaderNames . LastModified ] ) ;
230
251
Assert . Equal ( entityTag . ToString ( ) , httpResponse . Headers [ HeaderNames . ETag ] ) ;
231
252
Assert . Equal ( "Hello World" , body ) ;
@@ -265,7 +286,6 @@ public async Task WriteFileAsync_PreconditionStateUnspecified_RangeRequestIgnore
265
286
var body = streamReader . ReadToEndAsync ( ) . Result ;
266
287
Assert . Empty ( httpResponse . Headers [ HeaderNames . ContentRange ] ) ;
267
288
Assert . Equal ( StatusCodes . Status200OK , httpResponse . StatusCode ) ;
268
- Assert . Equal ( "bytes" , httpResponse . Headers [ HeaderNames . AcceptRanges ] ) ;
269
289
Assert . Equal ( lastModified . ToString ( "R" ) , httpResponse . Headers [ HeaderNames . LastModified ] ) ;
270
290
Assert . Equal ( entityTag . ToString ( ) , httpResponse . Headers [ HeaderNames . ETag ] ) ;
271
291
Assert . Equal ( "Hello World" , body ) ;
@@ -303,16 +323,26 @@ public async Task WriteFileAsync_PreconditionStateUnspecified_RangeRequestedNotS
303
323
var streamReader = new StreamReader ( httpResponse . Body ) ;
304
324
var body = streamReader . ReadToEndAsync ( ) . Result ;
305
325
var contentRange = new ContentRangeHeaderValue ( byteArray . Length ) ;
306
- Assert . Equal ( StatusCodes . Status416RangeNotSatisfiable , httpResponse . StatusCode ) ;
307
- Assert . Equal ( "bytes" , httpResponse . Headers [ HeaderNames . AcceptRanges ] ) ;
308
- Assert . Equal ( contentRange . ToString ( ) , httpResponse . Headers [ HeaderNames . ContentRange ] ) ;
309
326
Assert . Equal ( lastModified . ToString ( "R" ) , httpResponse . Headers [ HeaderNames . LastModified ] ) ;
310
327
Assert . Equal ( entityTag . ToString ( ) , httpResponse . Headers [ HeaderNames . ETag ] ) ;
311
- Assert . Empty ( body ) ;
328
+
329
+ if ( AppContext . TryGetSwitch ( FileResultExecutorBase . EnableRangeProcessingSwitch , out var enableRangeProcessingSwitch )
330
+ && enableRangeProcessingSwitch )
331
+ {
332
+ Assert . Equal ( StatusCodes . Status416RangeNotSatisfiable , httpResponse . StatusCode ) ;
333
+ Assert . Equal ( "bytes" , httpResponse . Headers [ HeaderNames . AcceptRanges ] ) ;
334
+ Assert . Equal ( contentRange . ToString ( ) , httpResponse . Headers [ HeaderNames . ContentRange ] ) ;
335
+ Assert . Empty ( body ) ;
336
+ }
337
+ else
338
+ {
339
+ Assert . Equal ( StatusCodes . Status200OK , httpResponse . StatusCode ) ;
340
+ Assert . Equal ( "Hello World" , body ) ;
341
+ }
312
342
}
313
343
314
344
[ Fact ]
315
- public async Task WriteFileAsync_RangeRequested_PreconditionFailed ( )
345
+ public async Task WriteFileAsync_PreconditionFailed ( )
316
346
{
317
347
// Arrange
318
348
var contentType = "text/plain" ;
@@ -346,15 +376,14 @@ public async Task WriteFileAsync_RangeRequested_PreconditionFailed()
346
376
var streamReader = new StreamReader ( httpResponse . Body ) ;
347
377
var body = streamReader . ReadToEndAsync ( ) . Result ;
348
378
Assert . Equal ( StatusCodes . Status412PreconditionFailed , httpResponse . StatusCode ) ;
349
- Assert . Equal ( "bytes" , httpResponse . Headers [ HeaderNames . AcceptRanges ] ) ;
350
379
Assert . Equal ( 11 , httpResponse . ContentLength ) ;
351
380
Assert . Empty ( httpResponse . Headers [ HeaderNames . ContentRange ] ) ;
352
381
Assert . NotEmpty ( httpResponse . Headers [ HeaderNames . LastModified ] ) ;
353
382
Assert . Empty ( body ) ;
354
383
}
355
384
356
385
[ Fact ]
357
- public async Task WriteFileAsync_RangeRequested_NotModified ( )
386
+ public async Task WriteFileAsync_NotModified ( )
358
387
{
359
388
// Arrange
360
389
var contentType = "text/plain" ;
@@ -388,7 +417,6 @@ public async Task WriteFileAsync_RangeRequested_NotModified()
388
417
var streamReader = new StreamReader ( httpResponse . Body ) ;
389
418
var body = streamReader . ReadToEndAsync ( ) . Result ;
390
419
Assert . Equal ( StatusCodes . Status304NotModified , httpResponse . StatusCode ) ;
391
- Assert . Equal ( "bytes" , httpResponse . Headers [ HeaderNames . AcceptRanges ] ) ;
392
420
Assert . Equal ( 11 , httpResponse . ContentLength ) ;
393
421
Assert . Empty ( httpResponse . Headers [ HeaderNames . ContentRange ] ) ;
394
422
Assert . NotEmpty ( httpResponse . Headers [ HeaderNames . LastModified ] ) ;
0 commit comments