Skip to content

Commit

Permalink
MockTimeProvider -> FakeTimeProvider (#51147)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tratcher authored Oct 5, 2023
1 parent 3d068e2 commit 933bc84
Show file tree
Hide file tree
Showing 41 changed files with 135 additions and 289 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Time.Testing;
using Microsoft.Net.Http.Headers;
using Xunit.Sdk;

Expand Down Expand Up @@ -160,7 +161,7 @@ public async Task CanChangeAccessTokenResponseJsonOptions(string addIdentityMode
[Fact]
public async Task CanCustomizeBearerTokenExpiration()
{
var clock = new MockTimeProvider();
var clock = new FakeTimeProvider();
var expireTimeSpan = TimeSpan.FromSeconds(42);

await using var app = await CreateAppAsync(services =>
Expand Down Expand Up @@ -320,7 +321,7 @@ public async Task Returns401UnauthorizedStatusGivenNullOrEmptyRefreshToken()
[Fact]
public async Task CanCustomizeRefreshTokenExpiration()
{
var clock = new MockTimeProvider();
var clock = new FakeTimeProvider();
var expireTimeSpan = TimeSpan.FromHours(42);

await using var app = await CreateAppAsync(services =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
<Compile Include="..\..\UI\src\UIFramework.cs" Link="Infrastructure\UIFramework.cs" />
<Compile Include="$(SharedSourceRoot)ThrowHelpers\ArgumentNullThrowHelper.cs" LinkBase="Shared" />
<Compile Include="$(SharedSourceRoot)CallerArgument\CallerArgumentExpressionAttribute.cs" LinkBase="Shared" />
<Compile Include="$(SharedSourceRoot)test\MockTimeProvider.cs" LinkBase="Shared" />

<None Include="xunit.runner.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
Expand All @@ -23,6 +22,7 @@

<Reference Include="Microsoft.AspNetCore.Mvc.Testing" />
<Reference Include="Microsoft.EntityFrameworkCore.Sqlite" />
<Reference Include="Microsoft.Extensions.TimeProvider.Testing" />
<Reference Include="AngleSharp" />
<Reference Include="System.Net.Http" />

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

<ItemGroup>
<Compile Include="$(IdentityTestSharedSourceRoot)**\*.cs" LinkBase="Shared" />
<Compile Include="$(SharedSourceRoot)test\MockTimeProvider.cs" LinkBase="Shared" />
</ItemGroup>

<ItemGroup>
Expand All @@ -19,6 +18,7 @@
<Reference Include="Microsoft.AspNetCore.Identity.UI" />
<Reference Include="Microsoft.Extensions.Configuration" />
<Reference Include="Microsoft.Extensions.Options.ConfigurationExtensions" />
<Reference Include="Microsoft.Extensions.TimeProvider.Testing" />
</ItemGroup>

<Target Name="AddProjectReferenceAssemblyInfo" BeforeTargets="GetAssemblyAttributes" DependsOnTargets="ResolveAssemblyReferences">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Time.Testing;
using Moq;

namespace Microsoft.AspNetCore.Identity.Test;
Expand Down Expand Up @@ -271,7 +272,7 @@ public async Task OnValidateIdentityDoesNotRejectsWhenNotExpired()
public async Task OnValidateIdentityDoesNotExtendExpirationWhenSlidingIsDisabled()
{
var user = new PocoUser("test");
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var httpContext = new Mock<HttpContext>();
var userManager = MockHelpers.MockUserManager<PocoUser>();
var identityOptions = new Mock<IOptions<IdentityOptions>>();
Expand Down
18 changes: 10 additions & 8 deletions src/Identity/test/InMemory.Test/FunctionalTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,12 @@
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Time.Testing;
using Microsoft.Net.Http.Headers;

namespace Microsoft.AspNetCore.Identity.InMemory;

public class FunctionalTest
public class FunctionalTest : LoggedTest
{
const string TestPassword = "[PLACEHOLDER]-1a";

Expand Down Expand Up @@ -67,7 +68,7 @@ public async Task CookieContainsRoleClaim()
[InlineData(false)]
public async Task CanCreateMeLoginAndCookieStopsWorkingAfterExpiration(bool testCore)
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var server = await CreateServer(services =>
{
services.ConfigureApplicationCookie(options =>
Expand Down Expand Up @@ -115,7 +116,7 @@ public async Task CanCreateMeLoginAndCookieStopsWorkingAfterExpiration(bool test
[InlineData(false, false)]
public async Task CanCreateMeLoginAndSecurityStampExtendsExpiration(bool rememberMe, bool testCore)
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var server = await CreateServer(services =>
{
services.AddSingleton<TimeProvider>(timeProvider);
Expand Down Expand Up @@ -164,7 +165,7 @@ public async Task CanCreateMeLoginAndSecurityStampExtendsExpiration(bool remembe
[InlineData(false)]
public async Task CanAccessOldPrincipalDuringSecurityStampReplacement(bool testCore)
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var server = await CreateServer(services =>
{
services.AddSingleton<TimeProvider>(timeProvider);
Expand Down Expand Up @@ -217,7 +218,7 @@ public async Task CanAccessOldPrincipalDuringSecurityStampReplacement(bool testC
[InlineData(false)]
public async Task TwoFactorRememberCookieVerification(bool testCore)
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var server = await CreateServer(services => services.AddSingleton<TimeProvider>(timeProvider), testCore: testCore);

var transaction1 = await SendAsync(server, "http://example.com/createMe");
Expand Down Expand Up @@ -246,7 +247,7 @@ public async Task TwoFactorRememberCookieVerification(bool testCore)
[InlineData(false)]
public async Task TwoFactorRememberCookieClearedBySecurityStampChange(bool testCore)
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var server = await CreateServer(services => services.AddSingleton<TimeProvider>(timeProvider), testCore: testCore);

var transaction1 = await SendAsync(server, "http://example.com/createMe");
Expand All @@ -271,7 +272,7 @@ public async Task TwoFactorRememberCookieClearedBySecurityStampChange(bool testC
Assert.Equal(HttpStatusCode.OK, transaction5.Response.StatusCode);

// Wait for validation interval
timeProvider.Advance(TimeSpan.FromMinutes(30));
timeProvider.Advance(TimeSpan.FromMinutes(30) + TimeSpan.FromMilliseconds(1));

var transaction6 = await SendAsync(server, "http://example.com/isTwoFactorRememebered", transaction2.CookieNameValue);
Assert.Equal(HttpStatusCode.InternalServerError, transaction6.Response.StatusCode);
Expand All @@ -287,7 +288,7 @@ private static string FindClaimValue(Transaction transaction, string claimType)
return claim.Attribute("value").Value;
}

private static async Task<TestServer> CreateServer(Action<IServiceCollection> configureServices = null, Func<HttpContext, Task> testpath = null, Uri baseAddress = null, bool testCore = false)
private async Task<TestServer> CreateServer(Action<IServiceCollection> configureServices = null, Func<HttpContext, Task> testpath = null, Uri baseAddress = null, bool testCore = false)
{
var host = new HostBuilder()
.ConfigureWebHost(builder =>
Expand Down Expand Up @@ -391,6 +392,7 @@ private static async Task<TestServer> CreateServer(Action<IServiceCollection> co
services.AddSingleton<IUserStore<PocoUser>>(store);
services.AddSingleton<IRoleStore<PocoRole>>(store);
configureServices?.Invoke(services);
AddTestLogging(services);
})
.UseTestServer())
.Build();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
</PropertyGroup>

<ItemGroup>
<Compile Include="$(IdentityTestSharedSourceRoot)**\*.cs" LinkBase="Shared" />
<Compile Include="$(SharedSourceRoot)test\MockTimeProvider.cs" LinkBase="Shared" />
</ItemGroup>

<ItemGroup>
Expand All @@ -16,6 +15,7 @@
<Reference Include="Microsoft.AspNetCore.Identity" />
<Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.EntityFrameworkCore.Sqlite" />
<Reference Include="Microsoft.Extensions.TimeProvider.Testing" />
</ItemGroup>

</Project>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,10 @@
</Content>
</ItemGroup>

<ItemGroup>
<Compile Include="$(SharedSourceRoot)test\MockTimeProvider.cs" LinkBase="Shared" />
</ItemGroup>

<ItemGroup>
<Reference Include="Microsoft.AspNetCore.OutputCaching" />
<Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.TimeProvider.Testing" />
</ItemGroup>

</Project>
11 changes: 6 additions & 5 deletions src/Middleware/OutputCaching/test/OutputCacheMiddlewareTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Logging.Testing;
using Microsoft.Extensions.Primitives;
using Microsoft.Extensions.Time.Testing;
using Microsoft.Net.Http.Headers;

namespace Microsoft.AspNetCore.OutputCaching.Tests;
Expand Down Expand Up @@ -366,7 +367,7 @@ public void ContentIsNotModified_IfNoneMatch_MatchesAtLeastOneValue_True()
[Fact]
public void StartResponseAsync_IfAllowResponseCaptureIsTrue_SetsResponseTime()
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var middleware = TestUtils.CreateTestMiddleware(options: new OutputCacheOptions
{
TimeProvider = timeProvider
Expand All @@ -382,7 +383,7 @@ public void StartResponseAsync_IfAllowResponseCaptureIsTrue_SetsResponseTime()
[Fact]
public void StartResponseAsync_IfAllowResponseCaptureIsTrue_SetsResponseTimeOnlyOnce()
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var middleware = TestUtils.CreateTestMiddleware(options: new OutputCacheOptions
{
TimeProvider = timeProvider
Expand Down Expand Up @@ -419,7 +420,7 @@ public void FinalizeCacheHeadersAsync_ResponseValidity_IgnoresExpiryIfAvailable(
{
// The Expires header should not be used when set in the response

var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var options = new OutputCacheOptions
{
TimeProvider = timeProvider
Expand All @@ -442,7 +443,7 @@ public void FinalizeCacheHeadersAsync_ResponseValidity_UseMaxAgeIfAvailable()
{
// The MaxAge header should not be used if set in the response

var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var sink = new TestSink();
var options = new OutputCacheOptions
{
Expand All @@ -468,7 +469,7 @@ public void FinalizeCacheHeadersAsync_ResponseValidity_UseMaxAgeIfAvailable()
[Fact]
public void FinalizeCacheHeadersAsync_ResponseValidity_UseSharedMaxAgeIfAvailable()
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var sink = new TestSink();
var options = new OutputCacheOptions
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,10 @@
</Content>
</ItemGroup>

<ItemGroup>
<Compile Include="$(SharedSourceRoot)test\MockTimeProvider.cs" LinkBase="Shared" />
</ItemGroup>

<ItemGroup>
<Reference Include="Microsoft.AspNetCore.ResponseCaching" />
<Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.TimeProvider.Testing" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging.Testing;
using Microsoft.Extensions.Primitives;
using Microsoft.Extensions.Time.Testing;
using Microsoft.Net.Http.Headers;

namespace Microsoft.AspNetCore.ResponseCaching.Tests;
Expand Down Expand Up @@ -357,7 +358,7 @@ public void ContentIsNotModified_IfNoneMatch_MatchesAtLeastOneValue_True()
[Fact]
public void StartResponseAsync_IfAllowResponseCaptureIsTrue_SetsResponseTime()
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var middleware = TestUtils.CreateTestMiddleware(options: new ResponseCachingOptions
{
TimeProvider = timeProvider
Expand All @@ -373,7 +374,7 @@ public void StartResponseAsync_IfAllowResponseCaptureIsTrue_SetsResponseTime()
[Fact]
public void StartResponseAsync_IfAllowResponseCaptureIsTrue_SetsResponseTimeOnlyOnce()
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var middleware = TestUtils.CreateTestMiddleware(options: new ResponseCachingOptions
{
TimeProvider = timeProvider
Expand Down Expand Up @@ -443,10 +444,10 @@ public void FinalizeCacheHeadersAsync_DefaultResponseValidity_Is10Seconds()
[Fact]
public void FinalizeCacheHeadersAsync_ResponseValidity_UseExpiryIfAvailable()
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var now = timeProvider.GetUtcNow();
now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Offset).AddSeconds(1); // Round up to seconds.
timeProvider.AdvanceTo(now);
timeProvider.SetUtcNow(now);
var sink = new TestSink();
var middleware = TestUtils.CreateTestMiddleware(testSink: sink, options: new ResponseCachingOptions
{
Expand All @@ -466,7 +467,7 @@ public void FinalizeCacheHeadersAsync_ResponseValidity_UseExpiryIfAvailable()
[Fact]
public void FinalizeCacheHeadersAsync_ResponseValidity_UseMaxAgeIfAvailable()
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var sink = new TestSink();
var middleware = TestUtils.CreateTestMiddleware(testSink: sink, options: new ResponseCachingOptions
{
Expand All @@ -491,7 +492,7 @@ public void FinalizeCacheHeadersAsync_ResponseValidity_UseMaxAgeIfAvailable()
[Fact]
public void FinalizeCacheHeadersAsync_ResponseValidity_UseSharedMaxAgeIfAvailable()
{
var timeProvider = new MockTimeProvider();
var timeProvider = new FakeTimeProvider();
var sink = new TestSink();
var middleware = TestUtils.CreateTestMiddleware(testSink: sink, options: new ResponseCachingOptions
{
Expand Down
3 changes: 2 additions & 1 deletion src/Security/Authentication/test/CertificateTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Time.Testing;

namespace Microsoft.AspNetCore.Authentication.Certificate.Test;

Expand Down Expand Up @@ -689,7 +690,7 @@ public async Task VerifyValidationResultNeverCachedAfter30Min(bool cache)
const string Expected = "John Doe";
var validationCount = 0;
// The test certs are generated based off UtcNow.
var timeProvider = new MockTimeProvider(TimeProvider.System.GetUtcNow());
var timeProvider = new FakeTimeProvider(TimeProvider.System.GetUtcNow());

using var host = await CreateHost(
new CertificateAuthenticationOptions
Expand Down
3 changes: 2 additions & 1 deletion src/Security/Authentication/test/CookieTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Time.Testing;

namespace Microsoft.AspNetCore.Authentication.Cookies;

public class CookieTests : SharedAuthenticationTests<CookieAuthenticationOptions>
{
private readonly MockTimeProvider _timeProvider = new();
private readonly FakeTimeProvider _timeProvider = new();

protected override string DefaultScheme => CookieAuthenticationDefaults.AuthenticationScheme;
protected override Type HandlerType => typeof(CookieAuthenticationHandler);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

<ItemGroup>
<Compile Include="$(SharedSourceRoot)test\Certificates\Certificates.cs" />
<Compile Include="$(SharedSourceRoot)test\MockTimeProvider.cs" />

<Content Include="WsFederation\federationmetadata.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
Expand Down Expand Up @@ -50,6 +49,7 @@
<Reference Include="Microsoft.AspNetCore.Authentication.WsFederation" />
<Reference Include="Microsoft.AspNetCore.HttpOverrides" />
<Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.Extensions.TimeProvider.Testing" />
<Reference Include="Microsoft.Net.Http.Headers" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Time.Testing;

namespace Microsoft.AspNetCore.Authentication;

public abstract class SharedAuthenticationTests<TOptions> where TOptions : AuthenticationSchemeOptions
{
protected MockTimeProvider TimeProvider { get; } = new();
protected FakeTimeProvider TimeProvider { get; } = new();

protected abstract string DefaultScheme { get; }
protected virtual string DisplayName { get; }
Expand Down
Loading

0 comments on commit 933bc84

Please sign in to comment.