/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Security/Authentication/test/RemoteAuthenticationTests.cs
100 строк
4 KB
Chris Ross
Obsolete and replace ISystemClock in Security, Identity #47472 (#47717)
26 апр 2023, 05:02
Не верифицирован
26 апр 2023, 05:02
726f467
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace Microsoft.AspNetCore.Authentication; public abstract class RemoteAuthenticationTests<TOptions> : SharedAuthenticationTests<TOptions> where TOptions : RemoteAuthenticationOptions { protected override string DisplayName => DefaultScheme; private Task<IHost> CreateHost(Action<TOptions> configureOptions, Func<HttpContext, Task> testpath = null, bool isDefault = true) => CreateHostWithServices(s => { var builder = s.AddAuthentication(); s.AddSingleton<IConfiguration>(new ConfigurationManager()); if (isDefault) { s.Configure<AuthenticationOptions>(o => o.DefaultScheme = DefaultScheme); } RegisterAuth(builder, o => { o.TimeProvider = TimeProvider; configureOptions(o); }); }, testpath); protected virtual async Task<IHost> CreateHostWithServices(Action<IServiceCollection> configureServices, Func<HttpContext, Task> testpath = null) { var host = new HostBuilder() .ConfigureWebHost(webHostBuilder => webHostBuilder.UseTestServer() .Configure(app => { app.Use(async (context, next) => { if (testpath != null) { await testpath(context); } await next(context); }); }) .ConfigureServices(configureServices)) .Build(); await host.StartAsync(); return host; } protected abstract void ConfigureDefaults(TOptions o); [Fact] public async Task VerifySignInSchemeCannotBeSetToSelf() { using var host = await CreateHost( o => { ConfigureDefaults(o); o.SignInScheme = DefaultScheme; }, context => context.ChallengeAsync(DefaultScheme)); using var server = host.GetTestServer(); var error = await Assert.ThrowsAsync<InvalidOperationException>(() => server.SendAsync("https://example.com/challenge")); Assert.Contains("cannot be set to itself", error.Message); } [Fact] public async Task VerifySignInSchemeCannotBeSetToSelfUsingDefaultScheme() { using var host = await CreateHost( o => o.SignInScheme = null, context => context.ChallengeAsync(DefaultScheme), isDefault: true); using var server = host.GetTestServer(); var error = await Assert.ThrowsAsync<InvalidOperationException>(() => server.SendAsync("https://example.com/challenge")); Assert.Contains("cannot be set to itself", error.Message); } [Fact] public async Task VerifySignInSchemeCannotBeSetToSelfUsingDefaultSignInScheme() { using var host = await CreateHostWithServices( services => { var builder = services.AddAuthentication(o => o.DefaultSignInScheme = DefaultScheme); RegisterAuth(builder, o => o.SignInScheme = null); }, context => context.ChallengeAsync(DefaultScheme)); using var server = host.GetTestServer(); var error = await Assert.ThrowsAsync<InvalidOperationException>(() => server.SendAsync("https://example.com/challenge")); Assert.Contains("cannot be set to itself", error.Message); } }