Skip to content

Commit d55d2a3

Browse files
committed
Replace ISystemClock with TimeProvider in ResponseCaching
1 parent ab46872 commit d55d2a3

File tree

6 files changed

+27
-58
lines changed

6 files changed

+27
-58
lines changed

src/Middleware/ResponseCaching/src/Interfaces/ISystemClock.cs

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/Middleware/ResponseCaching/src/ResponseCachingMiddleware.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ internal async Task<bool> TryServeCachedResponseAsync(ResponseCachingContext con
142142

143143
context.CachedResponse = cachedResponse;
144144
context.CachedResponseHeaders = cachedResponse.Headers;
145-
context.ResponseTime = _options.SystemClock.UtcNow;
145+
context.ResponseTime = _options.Time.GetUtcNow();
146146
var cachedEntryAge = context.ResponseTime.Value - context.CachedResponse.Created;
147147
context.CachedEntryAge = cachedEntryAge > TimeSpan.Zero ? cachedEntryAge : TimeSpan.Zero;
148148

@@ -374,7 +374,7 @@ private bool OnStartResponse(ResponseCachingContext context)
374374
if (!context.ResponseStarted)
375375
{
376376
context.ResponseStarted = true;
377-
context.ResponseTime = _options.SystemClock.UtcNow;
377+
context.ResponseTime = _options.Time.GetUtcNow();
378378

379379
return true;
380380
}

src/Middleware/ResponseCaching/src/ResponseCachingOptions.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4-
using System.ComponentModel;
5-
64
namespace Microsoft.AspNetCore.ResponseCaching;
75

86
/// <summary>
@@ -31,6 +29,5 @@ public class ResponseCachingOptions
3129
/// <summary>
3230
/// For testing purposes only.
3331
/// </summary>
34-
[EditorBrowsable(EditorBrowsableState.Never)]
35-
internal ISystemClock SystemClock { get; set; } = new SystemClock();
32+
internal TimeProvider Time { get; set; } = TimeProvider.System;
3633
}

src/Middleware/ResponseCaching/src/SystemClock.cs

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/Middleware/ResponseCaching/test/ResponseCachingMiddlewareTests.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -356,44 +356,44 @@ public void ContentIsNotModified_IfNoneMatch_MatchesAtLeastOneValue_True()
356356
[Fact]
357357
public void StartResponsegAsync_IfAllowResponseCaptureIsTrue_SetsResponseTime()
358358
{
359-
var clock = new TestClock
359+
var time = new TestTime
360360
{
361361
UtcNow = DateTimeOffset.UtcNow
362362
};
363363
var middleware = TestUtils.CreateTestMiddleware(options: new ResponseCachingOptions
364364
{
365-
SystemClock = clock
365+
Time = time
366366
});
367367
var context = TestUtils.CreateTestContext();
368368
context.ResponseTime = null;
369369

370370
middleware.StartResponse(context);
371371

372-
Assert.Equal(clock.UtcNow, context.ResponseTime);
372+
Assert.Equal(time.UtcNow, context.ResponseTime);
373373
}
374374

375375
[Fact]
376376
public void StartResponseAsync_IfAllowResponseCaptureIsTrue_SetsResponseTimeOnlyOnce()
377377
{
378-
var clock = new TestClock
378+
var time = new TestTime
379379
{
380380
UtcNow = DateTimeOffset.UtcNow
381381
};
382382
var middleware = TestUtils.CreateTestMiddleware(options: new ResponseCachingOptions
383383
{
384-
SystemClock = clock
384+
Time = time
385385
});
386386
var context = TestUtils.CreateTestContext();
387-
var initialTime = clock.UtcNow;
387+
var initialTime = time.UtcNow;
388388
context.ResponseTime = null;
389389

390390
middleware.StartResponse(context);
391391
Assert.Equal(initialTime, context.ResponseTime);
392392

393-
clock.UtcNow += TimeSpan.FromSeconds(10);
393+
time.UtcNow += TimeSpan.FromSeconds(10);
394394

395395
middleware.StartResponse(context);
396-
Assert.NotEqual(clock.UtcNow, context.ResponseTime);
396+
Assert.NotEqual(time.UtcNow, context.ResponseTime);
397397
Assert.Equal(initialTime, context.ResponseTime);
398398
}
399399

@@ -448,19 +448,19 @@ public void FinalizeCacheHeadersAsync_DefaultResponseValidity_Is10Seconds()
448448
[Fact]
449449
public void FinalizeCacheHeadersAsync_ResponseValidity_UseExpiryIfAvailable()
450450
{
451-
var clock = new TestClock
451+
var time = new TestTime
452452
{
453453
UtcNow = DateTimeOffset.MinValue
454454
};
455455
var sink = new TestSink();
456456
var middleware = TestUtils.CreateTestMiddleware(testSink: sink, options: new ResponseCachingOptions
457457
{
458-
SystemClock = clock
458+
Time = time
459459
});
460460
var context = TestUtils.CreateTestContext();
461461

462-
context.ResponseTime = clock.UtcNow;
463-
context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(clock.UtcNow + TimeSpan.FromSeconds(11));
462+
context.ResponseTime = time.UtcNow;
463+
context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(time.UtcNow + TimeSpan.FromSeconds(11));
464464

465465
middleware.FinalizeCacheHeaders(context);
466466

@@ -471,24 +471,24 @@ public void FinalizeCacheHeadersAsync_ResponseValidity_UseExpiryIfAvailable()
471471
[Fact]
472472
public void FinalizeCacheHeadersAsync_ResponseValidity_UseMaxAgeIfAvailable()
473473
{
474-
var clock = new TestClock
474+
var time = new TestTime
475475
{
476476
UtcNow = DateTimeOffset.UtcNow
477477
};
478478
var sink = new TestSink();
479479
var middleware = TestUtils.CreateTestMiddleware(testSink: sink, options: new ResponseCachingOptions
480480
{
481-
SystemClock = clock
481+
Time = time
482482
});
483483
var context = TestUtils.CreateTestContext();
484484

485-
context.ResponseTime = clock.UtcNow;
485+
context.ResponseTime = time.UtcNow;
486486
context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue()
487487
{
488488
MaxAge = TimeSpan.FromSeconds(12)
489489
}.ToString();
490490

491-
context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(clock.UtcNow + TimeSpan.FromSeconds(11));
491+
context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(time.UtcNow + TimeSpan.FromSeconds(11));
492492

493493
middleware.FinalizeCacheHeaders(context);
494494

@@ -499,24 +499,24 @@ public void FinalizeCacheHeadersAsync_ResponseValidity_UseMaxAgeIfAvailable()
499499
[Fact]
500500
public void FinalizeCacheHeadersAsync_ResponseValidity_UseSharedMaxAgeIfAvailable()
501501
{
502-
var clock = new TestClock
502+
var time = new TestTime
503503
{
504504
UtcNow = DateTimeOffset.UtcNow
505505
};
506506
var sink = new TestSink();
507507
var middleware = TestUtils.CreateTestMiddleware(testSink: sink, options: new ResponseCachingOptions
508508
{
509-
SystemClock = clock
509+
Time = time
510510
});
511511
var context = TestUtils.CreateTestContext();
512512

513-
context.ResponseTime = clock.UtcNow;
513+
context.ResponseTime = time.UtcNow;
514514
context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue()
515515
{
516516
MaxAge = TimeSpan.FromSeconds(12),
517517
SharedMaxAge = TimeSpan.FromSeconds(13)
518518
}.ToString();
519-
context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(clock.UtcNow + TimeSpan.FromSeconds(11));
519+
context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(time.UtcNow + TimeSpan.FromSeconds(11));
520520

521521
middleware.FinalizeCacheHeaders(context);
522522

src/Middleware/ResponseCaching/test/TestUtils.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ private static IEnumerable<IHostBuilder> CreateBuildersWithResponseCaching(
172172
{
173173
responseCachingOptions.MaximumBodySize = options.MaximumBodySize;
174174
responseCachingOptions.UseCaseSensitivePaths = options.UseCaseSensitivePaths;
175-
responseCachingOptions.SystemClock = options.SystemClock;
175+
responseCachingOptions.Time = options.Time;
176176
}
177177
});
178178
})
@@ -390,7 +390,9 @@ public void Set(string key, IResponseCacheEntry entry, TimeSpan validFor)
390390
}
391391
}
392392

393-
internal class TestClock : ISystemClock
393+
internal class TestTime : TimeProvider
394394
{
395395
public DateTimeOffset UtcNow { get; set; }
396+
397+
public override DateTimeOffset GetUtcNow() => UtcNow;
396398
}

0 commit comments

Comments
 (0)