Browse Source

Use the generic host builder on .NET Core 3.1

pull/966/head
Kévin Chalet 6 years ago
committed by GitHub
parent
commit
8021c15328
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddict.Server.AspNetCore.IntegrationTests.csproj
  2. 64
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTestServer.cs
  3. 7
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Authentication.cs
  4. 4
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Exchange.cs
  5. 4
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Introspection.cs
  6. 4
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Revocation.cs
  7. 7
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Session.cs
  8. 83
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.cs
  9. 9
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestClient.cs
  10. 21
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestServer.cs
  11. 210
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Authentication.cs
  12. 207
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Discovery.cs
  13. 290
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Exchange.cs
  14. 150
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Introspection.cs
  15. 102
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Revocation.cs
  16. 74
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Session.cs
  17. 77
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Userinfo.cs
  18. 350
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.cs
  19. 38
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTestServer.cs
  20. 7
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Authentication.cs
  21. 4
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Exchange.cs
  22. 4
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Introspection.cs
  23. 4
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Revocation.cs
  24. 7
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Session.cs
  25. 37
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.cs

5
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddict.Server.AspNetCore.IntegrationTests.csproj

@ -21,4 +21,9 @@
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
</ItemGroup> </ItemGroup>
<PropertyGroup Condition=" '$(TargetFramework)' != 'net461' And '$(TargetFramework)' != 'net472' And
'$(TargetFramework)' != 'netcoreapp2.1'">
<DefineConstants>$(DefineConstants);SUPPORTS_GENERIC_HOST</DefineConstants>
</PropertyGroup>
</Project> </Project>

64
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTestServer.cs

@ -0,0 +1,64 @@
/*
* Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
* See https://github.com/openiddict/openiddict-core for more information concerning
* the license and the contributors participating to this project.
*/
using System.Threading.Tasks;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using OpenIddict.Server.FunctionalTests;
namespace OpenIddict.Server.AspNetCore.FunctionalTests
{
/// <summary>
/// Represents a test host used by the server integration tests.
/// </summary>
public class OpenIddictServerAspNetCoreIntegrationTestServer : OpenIddictServerIntegrationTestServer
{
public OpenIddictServerAspNetCoreIntegrationTestServer(TestServer server)
=> Server = server;
#if SUPPORTS_GENERIC_HOST
public OpenIddictServerAspNetCoreIntegrationTestServer(IHost host)
{
Host = host;
Server = host.GetTestServer();
}
#endif
/// <summary>
/// Gets the ASP.NET Core test server used by this instance.
/// </summary>
public TestServer Server { get; }
#if SUPPORTS_GENERIC_HOST
/// <summary>
/// Gets the generic host used by this instance.
/// </summary>
public IHost Host { get; }
#endif
public override ValueTask<OpenIddictServerIntegrationTestClient> CreateClientAsync()
=> new ValueTask<OpenIddictServerIntegrationTestClient>(
new OpenIddictServerIntegrationTestClient(Server.CreateClient()));
public override
#if SUPPORTS_GENERIC_HOST
async
#endif
ValueTask DisposeAsync()
{
// Dispose of the underlying test server.
Server.Dispose();
#if SUPPORTS_GENERIC_HOST
// Stop and dispose of the underlying generic host.
await Host.StopAsync();
Host.Dispose();
#else
return default;
#endif
}
}
}

7
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Authentication.cs

@ -19,7 +19,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractAuthorizationRequest_RequestIdParameterIsRejectedWhenRequestCachingIsDisabled() public async Task ExtractAuthorizationRequest_RequestIdParameterIsRejectedWhenRequestCachingIsDisabled()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -36,7 +37,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractAuthorizationRequest_InvalidRequestIdParameterIsRejected() public async Task ExtractAuthorizationRequest_InvalidRequestIdParameterIsRejected()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddDistributedMemoryCache(); options.Services.AddDistributedMemoryCache();
@ -44,6 +45,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
.EnableAuthorizationEndpointCaching(); .EnableAuthorizationEndpointCaching();
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {

4
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Exchange.cs

@ -21,7 +21,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractTokenRequest_MultipleClientCredentialsCauseAnError() public async Task ExtractTokenRequest_MultipleClientCredentialsCauseAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -39,6 +39,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/token", new OpenIddictRequest var response = await client.PostAsync("/connect/token", new OpenIddictRequest
{ {

4
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Introspection.cs

@ -21,7 +21,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractIntrospectionRequest_MultipleClientCredentialsCauseAnError() public async Task ExtractIntrospectionRequest_MultipleClientCredentialsCauseAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -39,6 +39,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {

4
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Revocation.cs

@ -21,7 +21,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractRevocationRequest_MultipleClientCredentialsCauseAnError() public async Task ExtractRevocationRequest_MultipleClientCredentialsCauseAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -39,6 +39,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {

7
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Session.cs

@ -19,7 +19,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractLogoutRequest_RequestIdParameterIsRejectedWhenRequestCachingIsDisabled() public async Task ExtractLogoutRequest_RequestIdParameterIsRejectedWhenRequestCachingIsDisabled()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
@ -36,7 +37,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractLogoutRequest_InvalidRequestIdParameterIsRejected() public async Task ExtractLogoutRequest_InvalidRequestIdParameterIsRejected()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddDistributedMemoryCache(); options.Services.AddDistributedMemoryCache();
@ -44,6 +45,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
.EnableLogoutEndpointCaching(); .EnableLogoutEndpointCaching();
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
{ {

83
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.cs

@ -16,6 +16,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using OpenIddict.Abstractions; using OpenIddict.Abstractions;
using OpenIddict.Server.FunctionalTests; using OpenIddict.Server.FunctionalTests;
using Xunit; using Xunit;
@ -31,7 +32,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessChallenge_ReturnsParametersFromAuthenticationProperties() public async Task ProcessChallenge_ReturnsParametersFromAuthenticationProperties()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
options.SetTokenEndpointUris("/challenge/custom"); options.SetTokenEndpointUris("/challenge/custom");
@ -45,6 +46,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/challenge/custom", new OpenIddictRequest var response = await client.PostAsync("/challenge/custom", new OpenIddictRequest
{ {
@ -70,7 +73,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessChallenge_ReturnsErrorFromAuthenticationProperties() public async Task ProcessChallenge_ReturnsErrorFromAuthenticationProperties()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
options.SetTokenEndpointUris("/challenge/custom"); options.SetTokenEndpointUris("/challenge/custom");
@ -84,6 +87,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/challenge/custom", new OpenIddictRequest var response = await client.PostAsync("/challenge/custom", new OpenIddictRequest
{ {
@ -168,10 +173,10 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
[InlineData("/.WELL-KNOWN/JWKS/SUBPATH", OpenIddictServerEndpointType.Unknown)] [InlineData("/.WELL-KNOWN/JWKS/SUBPATH", OpenIddictServerEndpointType.Unknown)]
[InlineData("/.well-known/jwks/subpath/", OpenIddictServerEndpointType.Unknown)] [InlineData("/.well-known/jwks/subpath/", OpenIddictServerEndpointType.Unknown)]
[InlineData("/.WELL-KNOWN/JWKS/SUBPATH/", OpenIddictServerEndpointType.Unknown)] [InlineData("/.WELL-KNOWN/JWKS/SUBPATH/", OpenIddictServerEndpointType.Unknown)]
public Task ProcessRequest_MatchesCorrespondingEndpoint(string path, OpenIddictServerEndpointType type) public async Task ProcessRequest_MatchesCorrespondingEndpoint(string path, OpenIddictServerEndpointType type)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -185,8 +190,10 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
return client.PostAsync(path, new OpenIddictRequest()); await client.PostAsync(path, new OpenIddictRequest());
} }
[Theory] [Theory]
@ -199,10 +206,10 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
[InlineData("/custom/connect/userinfo", OpenIddictServerEndpointType.Userinfo)] [InlineData("/custom/connect/userinfo", OpenIddictServerEndpointType.Userinfo)]
[InlineData("/custom/.well-known/openid-configuration", OpenIddictServerEndpointType.Configuration)] [InlineData("/custom/.well-known/openid-configuration", OpenIddictServerEndpointType.Configuration)]
[InlineData("/custom/.well-known/jwks", OpenIddictServerEndpointType.Cryptography)] [InlineData("/custom/.well-known/jwks", OpenIddictServerEndpointType.Cryptography)]
public Task ProcessRequest_AllowsOverridingEndpoint(string address, OpenIddictServerEndpointType type) public async Task ProcessRequest_AllowsOverridingEndpoint(string address, OpenIddictServerEndpointType type)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -223,8 +230,10 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
return client.PostAsync(address, new OpenIddictRequest()); await client.PostAsync(address, new OpenIddictRequest());
} }
[Theory] [Theory]
@ -239,7 +248,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessRequest_RejectsInsecureHttpRequests(string address) public async Task ProcessRequest_RejectsInsecureHttpRequests(string address)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -247,6 +256,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
.Configure(options => options.DisableTransportSecurityRequirement = false); .Configure(options => options.DisableTransportSecurityRequirement = false);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync(address, new OpenIddictRequest()); var response = await client.PostAsync(address, new OpenIddictRequest());
@ -268,7 +279,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessRequest_AllowsHandlingResponse(string address) public async Task ProcessRequest_AllowsHandlingResponse(string address)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -286,6 +297,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync(address, new OpenIddictRequest()); var response = await client.PostAsync(address, new OpenIddictRequest());
@ -306,7 +319,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessRequest_AllowsSkippingHandler(string address) public async Task ProcessRequest_AllowsSkippingHandler(string address)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -319,6 +332,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync(address, new OpenIddictRequest()); var response = await client.PostAsync(address, new OpenIddictRequest());
@ -330,7 +345,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessSignIn_ReturnsParametersFromAuthenticationProperties() public async Task ProcessSignIn_ReturnsParametersFromAuthenticationProperties()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
options.SetTokenEndpointUris("/signin/custom"); options.SetTokenEndpointUris("/signin/custom");
@ -344,6 +359,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/signin/custom", new OpenIddictRequest var response = await client.PostAsync("/signin/custom", new OpenIddictRequest
{ {
@ -369,7 +386,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessSignOut_ReturnsParametersFromAuthenticationProperties() public async Task ProcessSignOut_ReturnsParametersFromAuthenticationProperties()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
options.SetLogoutEndpointUris("/signout/custom"); options.SetLogoutEndpointUris("/signout/custom");
@ -383,6 +400,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/signout/custom", new OpenIddictRequest var response = await client.PostAsync("/signout/custom", new OpenIddictRequest
{ {
@ -396,10 +415,17 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
Assert.Equal("Bob l'Eponge", (string) response["string_parameter"]); Assert.Equal("Bob l'Eponge", (string) response["string_parameter"]);
} }
protected override OpenIddictServerIntegrationTestClient CreateClient(Action<OpenIddictServerBuilder> configuration = null) protected override
#if SUPPORTS_GENERIC_HOST
async
#endif
ValueTask<OpenIddictServerIntegrationTestServer> CreateServerAsync(Action<OpenIddictServerBuilder> configuration = null)
{ {
#if SUPPORTS_GENERIC_HOST
var builder = new HostBuilder();
#else
var builder = new WebHostBuilder(); var builder = new WebHostBuilder();
#endif
builder.UseEnvironment("Testing"); builder.UseEnvironment("Testing");
builder.ConfigureServices(ConfigureServices); builder.ConfigureServices(ConfigureServices);
@ -416,7 +442,27 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
}); });
}); });
builder.Configure(app => #if SUPPORTS_GENERIC_HOST
builder.ConfigureWebHost(options =>
{
options.UseTestServer();
options.Configure(ConfigurePipeline);
});
#else
builder.Configure(ConfigurePipeline);
#endif
#if SUPPORTS_GENERIC_HOST
var host = await builder.StartAsync();
return new OpenIddictServerAspNetCoreIntegrationTestServer(host);
#else
var server = new TestServer(builder);
return new ValueTask<OpenIddictServerIntegrationTestServer>(new OpenIddictServerAspNetCoreIntegrationTestServer(server));
#endif
void ConfigurePipeline(IApplicationBuilder app)
{ {
app.Use(next => async context => app.Use(next => async context =>
{ {
@ -544,10 +590,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
name = "Bob le Magnifique" name = "Bob le Magnifique"
})); }));
}); });
}); }
var server = new TestServer(builder);
return new OpenIddictServerIntegrationTestClient(server.CreateClient());
} }
} }
} }

9
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestClient.cs

@ -23,7 +23,7 @@ namespace OpenIddict.Server.FunctionalTests
/// Exposes methods that allow sending OpenID Connect /// Exposes methods that allow sending OpenID Connect
/// requests and extracting the corresponding responses. /// requests and extracting the corresponding responses.
/// </summary> /// </summary>
public class OpenIddictServerIntegrationTestClient public class OpenIddictServerIntegrationTestClient : IAsyncDisposable
{ {
/// <summary> /// <summary>
/// Initializes a new instance of the OpenID Connect client. /// Initializes a new instance of the OpenID Connect client.
@ -500,5 +500,12 @@ namespace OpenIddict.Server.FunctionalTests
return new OpenIddictResponse(); return new OpenIddictResponse();
} }
public ValueTask DisposeAsync()
{
HttpClient.Dispose();
return default;
}
} }
} }

21
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestServer.cs

@ -0,0 +1,21 @@
/*
* Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
* See https://github.com/openiddict/openiddict-core for more information concerning
* the license and the contributors participating to this project.
*/
using System;
using System.Threading.Tasks;
namespace OpenIddict.Server.FunctionalTests
{
/// <summary>
/// Represents a test host used by the server integration tests.
/// </summary>
public abstract class OpenIddictServerIntegrationTestServer : IAsyncDisposable
{
public abstract ValueTask<OpenIddictServerIntegrationTestClient> CreateClientAsync();
public virtual ValueTask DisposeAsync() => default;
}
}

210
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Authentication.cs

@ -32,7 +32,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractAuthorizationRequest_UnexpectedMethodReturnsAnError(string method) public async Task ExtractAuthorizationRequest_UnexpectedMethodReturnsAnError(string method)
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.SendAsync(method, "/connect/authorize", new OpenIddictRequest()); var response = await client.SendAsync(method, "/connect/authorize", new OpenIddictRequest());
@ -46,7 +47,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractAuthorizationRequest_UnsupportedRequestParameterIsRejected() public async Task ExtractAuthorizationRequest_UnsupportedRequestParameterIsRejected()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -69,7 +71,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractAuthorizationRequest_UnsupportedRequestUriParameterIsRejected() public async Task ExtractAuthorizationRequest_UnsupportedRequestUriParameterIsRejected()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -97,7 +100,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractAuthorizationRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ExtractAuthorizationRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -110,6 +113,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/connect/authorize"); var response = await client.GetAsync("/connect/authorize");
@ -123,7 +128,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractAuthorizationRequest_AllowsHandlingResponse() public async Task ExtractAuthorizationRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -141,6 +146,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/connect/authorize"); var response = await client.GetAsync("/connect/authorize");
@ -152,7 +159,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractAuthorizationRequest_AllowsSkippingHandler() public async Task ExtractAuthorizationRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -165,6 +172,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/connect/authorize"); var response = await client.GetAsync("/connect/authorize");
@ -176,7 +185,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingClientIdCausesAnError() public async Task ValidateAuthorizationRequest_MissingClientIdCausesAnError()
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -193,7 +203,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingRedirectUriCausesAnErrorForOpenIdRequests() public async Task ValidateAuthorizationRequest_MissingRedirectUriCausesAnErrorForOpenIdRequests()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -216,7 +227,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_InvalidRedirectUriCausesAnError(string address, string message) public async Task ValidateAuthorizationRequest_InvalidRedirectUriCausesAnError(string address, string message)
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -235,7 +247,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingResponseTypeCausesAnError() public async Task ValidateAuthorizationRequest_MissingResponseTypeCausesAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -261,7 +274,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_UnsafeResponseModeCausesAnError(string type, string mode) public async Task ValidateAuthorizationRequest_UnsafeResponseModeCausesAnError(string type, string mode)
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -288,7 +302,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingNonceCausesAnErrorForOpenIdRequests(string type) public async Task ValidateAuthorizationRequest_MissingNonceCausesAnErrorForOpenIdRequests(string type)
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -312,7 +327,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingOpenIdScopeCausesAnErrorForOpenIdRequests(string type) public async Task ValidateAuthorizationRequest_MissingOpenIdScopeCausesAnErrorForOpenIdRequests(string type)
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -334,7 +350,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_InvalidPromptCausesAnError(string prompt) public async Task ValidateAuthorizationRequest_InvalidPromptCausesAnError(string prompt)
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -364,7 +381,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_ValidPromptDoesNotCauseAnError(string prompt) public async Task ValidateAuthorizationRequest_ValidPromptDoesNotCauseAnError(string prompt)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -378,6 +395,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -404,7 +423,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingCodeResponseTypeCausesAnErrorWhenCodeChallengeIsUsed(string type) public async Task ValidateAuthorizationRequest_MissingCodeResponseTypeCausesAnErrorWhenCodeChallengeIsUsed(string type)
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -428,7 +448,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingCodeChallengeCausesAnErrorWhenCodeChallengeMethodIsSpecified() public async Task ValidateAuthorizationRequest_MissingCodeChallengeCausesAnErrorWhenCodeChallengeMethodIsSpecified()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -449,7 +470,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_InvalidCodeChallengeMethodCausesAnError() public async Task ValidateAuthorizationRequest_InvalidCodeChallengeMethodCausesAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -471,7 +493,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_NoneFlowIsRejected() public async Task ValidateAuthorizationRequest_NoneFlowIsRejected()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -490,7 +513,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_UnknownResponseTypeParameterIsRejected() public async Task ValidateAuthorizationRequest_UnknownResponseTypeParameterIsRejected()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -519,11 +543,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenCorrespondingFlowIsDisabled(string flow, string type) public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenCorrespondingFlowIsDisabled(string flow, string type)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Configure(options => options.GrantTypes.Remove(flow)); options.Configure(options => options.GrantTypes.Remove(flow));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -543,7 +569,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenUnregisteredScopeIsSpecified() public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenUnregisteredScopeIsSpecified()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(CreateApplicationManager(mock => options.Services.AddSingleton(CreateApplicationManager(mock =>
{ {
@ -568,6 +594,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -586,7 +614,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsValidatedWhenScopeRegisteredInOptionsIsSpecified() public async Task ValidateAuthorizationRequest_RequestIsValidatedWhenScopeRegisteredInOptionsIsSpecified()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.RegisterScopes("registered_scope"); options.RegisterScopes("registered_scope");
options.SetRevocationEndpointUris(Array.Empty<Uri>()); options.SetRevocationEndpointUris(Array.Empty<Uri>());
@ -631,6 +659,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -652,7 +682,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsValidatedWhenRegisteredScopeIsSpecified() public async Task ValidateAuthorizationRequest_RequestIsValidatedWhenRegisteredScopeIsSpecified()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
var scope = new OpenIddictScope(); var scope = new OpenIddictScope();
@ -696,6 +726,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -717,11 +749,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestWithOfflineAccessScopeIsRejectedWhenRefreshTokenFlowIsDisabled() public async Task ValidateAuthorizationRequest_RequestWithOfflineAccessScopeIsRejectedWhenRefreshTokenFlowIsDisabled()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Configure(options => options.GrantTypes.Remove(GrantTypes.RefreshToken)); options.Configure(options => options.GrantTypes.Remove(GrantTypes.RefreshToken));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -740,7 +774,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_UnknownResponseModeParameterIsRejected() public async Task ValidateAuthorizationRequest_UnknownResponseModeParameterIsRejected()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -760,7 +795,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenCodeChallengeMethodIsMissing() public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenCodeChallengeMethodIsMissing()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -781,13 +817,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenCodeChallengeMethodIsNotEnabled() public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenCodeChallengeMethodIsNotEnabled()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
options.Services.PostConfigure<OpenIddictServerOptions>(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
options.CodeChallengeMethods.Clear()); options.CodeChallengeMethods.Clear());
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -807,7 +845,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenPlainCodeChallengeMethodIsNotExplicitlyEnabled() public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenPlainCodeChallengeMethodIsNotExplicitlyEnabled()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -831,7 +870,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsValidatedWhenCodeChallengeMethodIsRegistered(string method) public async Task ValidateAuthorizationRequest_RequestIsValidatedWhenCodeChallengeMethodIsRegistered(string method)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
options.Configure(options => options.CodeChallengeMethods.Clear()); options.Configure(options => options.CodeChallengeMethods.Clear());
@ -847,6 +886,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -870,7 +911,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_PkceRequestWithForbiddenResponseTypeIsRejected(string type) public async Task ValidateAuthorizationRequest_PkceRequestWithForbiddenResponseTypeIsRejected(string type)
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -893,7 +935,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenRedirectUriIsMissing() public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenRedirectUriIsMissing()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -913,7 +956,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingRedirectUriCausesAnException() public async Task ValidateAuthorizationRequest_MissingRedirectUriCausesAnException()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act and assert // Act and assert
var exception = await Assert.ThrowsAsync<InvalidOperationException>(delegate var exception = await Assert.ThrowsAsync<InvalidOperationException>(delegate
@ -934,7 +978,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_InvalidRedirectUriCausesAnException() public async Task ValidateAuthorizationRequest_InvalidRedirectUriCausesAnException()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -947,6 +991,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act and assert // Act and assert
var exception = await Assert.ThrowsAsync<InvalidOperationException>(delegate var exception = await Assert.ThrowsAsync<InvalidOperationException>(delegate
{ {
@ -973,11 +1019,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(value: null); .ReturnsAsync(value: null);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1012,11 +1060,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true); .ReturnsAsync(true);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1054,13 +1104,15 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
options.Configure(options => options.IgnoreEndpointPermissions = false); options.Configure(options => options.IgnoreEndpointPermissions = false);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1128,13 +1180,15 @@ namespace OpenIddict.Server.FunctionalTests
} }
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
options.Configure(options => options.IgnoreGrantTypePermissions = false); options.Configure(options => options.IgnoreGrantTypePermissions = false);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1176,13 +1230,15 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
options.Configure(options => options.IgnoreGrantTypePermissions = false); options.Configure(options => options.IgnoreGrantTypePermissions = false);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1215,11 +1271,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1259,13 +1317,15 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
options.RegisterScopes(Scopes.Email, Scopes.Profile); options.RegisterScopes(Scopes.Email, Scopes.Profile);
options.Configure(options => options.IgnoreScopePermissions = false); options.Configure(options => options.IgnoreScopePermissions = false);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1308,11 +1368,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true); .ReturnsAsync(true);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1351,7 +1413,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.SetRevocationEndpointUris(Array.Empty<Uri>()); options.SetRevocationEndpointUris(Array.Empty<Uri>());
options.DisableAuthorizationStorage(); options.DisableAuthorizationStorage();
@ -1370,6 +1432,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1407,7 +1471,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true); .ReturnsAsync(true);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.SetRevocationEndpointUris(Array.Empty<Uri>()); options.SetRevocationEndpointUris(Array.Empty<Uri>());
options.DisableAuthorizationStorage(); options.DisableAuthorizationStorage();
@ -1426,6 +1490,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1455,7 +1521,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ValidateAuthorizationRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1468,6 +1534,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1487,7 +1555,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_AllowsHandlingResponse() public async Task ValidateAuthorizationRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1505,6 +1573,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1522,7 +1592,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_AllowsSkippingHandler() public async Task ValidateAuthorizationRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1535,6 +1605,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1559,7 +1631,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleAuthorizationRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task HandleAuthorizationRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1572,6 +1644,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1591,7 +1665,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleAuthorizationRequest_AllowsHandlingResponse() public async Task HandleAuthorizationRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1609,6 +1683,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1626,7 +1702,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleAuthorizationRequest_AllowsSkippingHandler() public async Task HandleAuthorizationRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1639,6 +1715,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1663,7 +1741,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyAuthorizationResponse_ResponseModeIsAutomaticallyInferred(string type, string mode) public async Task ApplyAuthorizationResponse_ResponseModeIsAutomaticallyInferred(string type, string mode)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1685,6 +1763,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1703,7 +1783,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyAuthorizationResponse_AllowsHandlingResponse() public async Task ApplyAuthorizationResponse_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1730,6 +1810,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1747,7 +1829,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyAuthorizationResponse_ResponseContainsCustomParameters() public async Task ApplyAuthorizationResponse_ResponseContainsCustomParameters()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1774,6 +1856,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1796,7 +1880,7 @@ namespace OpenIddict.Server.FunctionalTests
// To emulate this behavior, the error property is manually set to null. // To emulate this behavior, the error property is manually set to null.
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1809,6 +1893,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act and assert // Act and assert
var exception = await Assert.ThrowsAsync<InvalidOperationException>(delegate var exception = await Assert.ThrowsAsync<InvalidOperationException>(delegate
{ {
@ -1826,7 +1912,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyAuthorizationResponse_DoesNotSetStateWhenUserIsNotRedirected() public async Task ApplyAuthorizationResponse_DoesNotSetStateWhenUserIsNotRedirected()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1848,6 +1934,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1864,7 +1952,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyAuthorizationResponse_FlowsStateWhenRedirectUriIsUsed() public async Task ApplyAuthorizationResponse_FlowsStateWhenRedirectUriIsUsed()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1878,6 +1966,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1895,7 +1985,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyAuthorizationResponse_DoesNotOverrideStateSetByApplicationCode() public async Task ApplyAuthorizationResponse_DoesNotOverrideStateSetByApplicationCode()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1917,6 +2007,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {
@ -1939,7 +2031,7 @@ namespace OpenIddict.Server.FunctionalTests
// as validated and a signin grant is applied to return an authorization response. // as validated and a signin grant is applied to return an authorization response.
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1953,6 +2045,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {

207
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Discovery.cs

@ -31,7 +31,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractConfigurationRequest_UnexpectedMethodReturnsAnError(string method) public async Task ExtractConfigurationRequest_UnexpectedMethodReturnsAnError(string method)
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.SendAsync(method, "/.well-known/openid-configuration", new OpenIddictRequest()); var response = await client.SendAsync(method, "/.well-known/openid-configuration", new OpenIddictRequest());
@ -52,7 +53,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractConfigurationRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ExtractConfigurationRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -65,6 +66,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -78,7 +81,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractConfigurationRequest_AllowsHandlingResponse() public async Task ExtractConfigurationRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -96,6 +99,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -107,7 +112,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractConfigurationRequest_AllowsSkippingHandler() public async Task ExtractConfigurationRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -120,6 +125,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -138,7 +145,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateConfigurationRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ValidateConfigurationRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -151,6 +158,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -164,7 +173,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateConfigurationRequest_AllowsHandlingResponse() public async Task ValidateConfigurationRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -182,6 +191,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -193,7 +204,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateConfigurationRequest_AllowsSkippingHandler() public async Task ValidateConfigurationRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -206,6 +217,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -217,7 +230,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_IssuerIsAutomaticallyInferred() public async Task HandleConfigurationRequest_IssuerIsAutomaticallyInferred()
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -231,11 +245,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_RegisteredIssuerIsAlwaysPreferred() public async Task HandleConfigurationRequest_RegisteredIssuerIsAlwaysPreferred()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.SetIssuer(new Uri("https://www.fabrikam.com/")); options.SetIssuer(new Uri("https://www.fabrikam.com/"));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -248,7 +264,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_AbsoluteEndpointsAreCorrectlyExposed() public async Task HandleConfigurationRequest_AbsoluteEndpointsAreCorrectlyExposed()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.SetAuthorizationEndpointUris("https://www.fabrikam.com/path/authorization_endpoint") options.SetAuthorizationEndpointUris("https://www.fabrikam.com/path/authorization_endpoint")
.SetCryptographyEndpointUris("https://www.fabrikam.com/path/cryptography_endpoint") .SetCryptographyEndpointUris("https://www.fabrikam.com/path/cryptography_endpoint")
@ -260,6 +276,8 @@ namespace OpenIddict.Server.FunctionalTests
.SetUserinfoEndpointUris("https://www.fabrikam.com/path/userinfo_endpoint"); .SetUserinfoEndpointUris("https://www.fabrikam.com/path/userinfo_endpoint");
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -340,7 +358,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_RelativeEndpointsAreCorrectlyComputed(string issuer, string[] endpoints) public async Task HandleConfigurationRequest_RelativeEndpointsAreCorrectlyComputed(string issuer, string[] endpoints)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.SetIssuer(new Uri(issuer, UriKind.Absolute)); options.SetIssuer(new Uri(issuer, UriKind.Absolute));
@ -354,6 +372,8 @@ namespace OpenIddict.Server.FunctionalTests
.SetUserinfoEndpointUris(endpoints[7]); .SetUserinfoEndpointUris(endpoints[7]);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -387,13 +407,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoClientAuthenticationMethodIsIncludedWhenTokenEndpointIsDisabled() public async Task HandleConfigurationRequest_NoClientAuthenticationMethodIsIncludedWhenTokenEndpointIsDisabled()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Configure(options => options.GrantTypes.Clear()); options.Configure(options => options.GrantTypes.Clear());
options.Configure(options => options.GrantTypes.Add(GrantTypes.Implicit)); options.Configure(options => options.GrantTypes.Add(GrantTypes.Implicit));
options.SetTokenEndpointUris(Array.Empty<Uri>()); options.SetTokenEndpointUris(Array.Empty<Uri>());
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -405,7 +427,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_SupportedClientAuthenticationMethodsAreIncludedWhenTokenEndpointIsEnabled() public async Task HandleConfigurationRequest_SupportedClientAuthenticationMethodsAreIncludedWhenTokenEndpointIsEnabled()
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -420,11 +443,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoClientAuthenticationMethodIsIncludedWhenIntrospectionEndpointIsDisabled() public async Task HandleConfigurationRequest_NoClientAuthenticationMethodIsIncludedWhenIntrospectionEndpointIsDisabled()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.SetIntrospectionEndpointUris(Array.Empty<Uri>()); options.SetIntrospectionEndpointUris(Array.Empty<Uri>());
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -436,7 +461,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_SupportedClientAuthenticationMethodsAreIncludedWhenIntrospectionEndpointIsEnabled() public async Task HandleConfigurationRequest_SupportedClientAuthenticationMethodsAreIncludedWhenIntrospectionEndpointIsEnabled()
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -451,11 +477,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoClientAuthenticationMethodIsIncludedWhenRevocationEndpointIsDisabled() public async Task HandleConfigurationRequest_NoClientAuthenticationMethodIsIncludedWhenRevocationEndpointIsDisabled()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.SetRevocationEndpointUris(Array.Empty<Uri>()); options.SetRevocationEndpointUris(Array.Empty<Uri>());
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -467,7 +495,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_SupportedClientAuthenticationMethodsAreIncludedWhenRevocationEndpointIsEnabled() public async Task HandleConfigurationRequest_SupportedClientAuthenticationMethodsAreIncludedWhenRevocationEndpointIsEnabled()
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -482,13 +511,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_ConfiguredGrantTypesAreReturned() public async Task HandleConfigurationRequest_ConfiguredGrantTypesAreReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.Services.PostConfigure<OpenIddictServerOptions>(options => await using var server = await CreateServerAsync(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
{ {
options.GrantTypes.Clear(); options.GrantTypes.Clear();
options.GrantTypes.Add(GrantTypes.AuthorizationCode); options.GrantTypes.Add(GrantTypes.AuthorizationCode);
options.GrantTypes.Add(GrantTypes.Password); options.GrantTypes.Add(GrantTypes.Password);
})); }));
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
var types = (string[]) response[Metadata.GrantTypesSupported]; var types = (string[]) response[Metadata.GrantTypesSupported];
@ -503,11 +534,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoSupportedCodeChallengeMethodsPropertyIsReturnedWhenNoMethodIsConfigured() public async Task HandleConfigurationRequest_NoSupportedCodeChallengeMethodsPropertyIsReturnedWhenNoMethodIsConfigured()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.PostConfigure<OpenIddictServerOptions>(options => options.CodeChallengeMethods.Clear()); options.Services.PostConfigure<OpenIddictServerOptions>(options => options.CodeChallengeMethods.Clear());
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -519,13 +552,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_ConfiguredCodeChallengeMethodsAreReturned() public async Task HandleConfigurationRequest_ConfiguredCodeChallengeMethodsAreReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.Services.PostConfigure<OpenIddictServerOptions>(options => await using var server = await CreateServerAsync(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
{ {
options.CodeChallengeMethods.Clear(); options.CodeChallengeMethods.Clear();
options.CodeChallengeMethods.Add(CodeChallengeMethods.Sha256); options.CodeChallengeMethods.Add(CodeChallengeMethods.Sha256);
options.CodeChallengeMethods.Add(CodeChallengeMethods.Plain); options.CodeChallengeMethods.Add(CodeChallengeMethods.Plain);
})); }));
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
var methods = (string[]) response[Metadata.CodeChallengeMethodsSupported]; var methods = (string[]) response[Metadata.CodeChallengeMethodsSupported];
@ -540,11 +575,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoSupportedResponseModesPropertyIsReturnedWhenNoResponseModeIsConfigured() public async Task HandleConfigurationRequest_NoSupportedResponseModesPropertyIsReturnedWhenNoResponseModeIsConfigured()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.PostConfigure<OpenIddictServerOptions>(options => options.ResponseModes.Clear()); options.Services.PostConfigure<OpenIddictServerOptions>(options => options.ResponseModes.Clear());
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -556,13 +593,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_ConfiguredResponseModesAreReturned() public async Task HandleConfigurationRequest_ConfiguredResponseModesAreReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.Services.PostConfigure<OpenIddictServerOptions>(options => await using var server = await CreateServerAsync(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
{ {
options.ResponseModes.Clear(); options.ResponseModes.Clear();
options.ResponseModes.Add(ResponseModes.FormPost); options.ResponseModes.Add(ResponseModes.FormPost);
options.ResponseModes.Add(ResponseModes.Fragment); options.ResponseModes.Add(ResponseModes.Fragment);
})); }));
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
var modes = (string[]) response[Metadata.ResponseModesSupported]; var modes = (string[]) response[Metadata.ResponseModesSupported];
@ -577,11 +616,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoSupportedResponseTypesPropertyIsReturnedWhenNoResponseTypeIsConfigured() public async Task HandleConfigurationRequest_NoSupportedResponseTypesPropertyIsReturnedWhenNoResponseTypeIsConfigured()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.PostConfigure<OpenIddictServerOptions>(options => options.ResponseTypes.Clear()); options.Services.PostConfigure<OpenIddictServerOptions>(options => options.ResponseTypes.Clear());
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -593,13 +634,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_ConfiguredResponseTypesAreReturned() public async Task HandleConfigurationRequest_ConfiguredResponseTypesAreReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.Services.PostConfigure<OpenIddictServerOptions>(options => await using var server = await CreateServerAsync(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
{ {
options.ResponseTypes.Clear(); options.ResponseTypes.Clear();
options.ResponseTypes.Add(ResponseTypes.Code); options.ResponseTypes.Add(ResponseTypes.Code);
options.ResponseTypes.Add(ResponseTypes.Code + ' ' + ResponseTypes.IdToken); options.ResponseTypes.Add(ResponseTypes.Code + ' ' + ResponseTypes.IdToken);
})); }));
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
var types = (string[]) response[Metadata.ResponseTypesSupported]; var types = (string[]) response[Metadata.ResponseTypesSupported];
@ -614,11 +657,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoSupportedScopesPropertyIsReturnedWhenNoScopeIsConfigured() public async Task HandleConfigurationRequest_NoSupportedScopesPropertyIsReturnedWhenNoScopeIsConfigured()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.PostConfigure<OpenIddictServerOptions>(options => options.Scopes.Clear()); options.Services.PostConfigure<OpenIddictServerOptions>(options => options.Scopes.Clear());
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -630,13 +675,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_ConfiguredScopesAreReturned() public async Task HandleConfigurationRequest_ConfiguredScopesAreReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.Services.PostConfigure<OpenIddictServerOptions>(options => await using var server = await CreateServerAsync(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
{ {
options.Scopes.Clear(); options.Scopes.Clear();
options.Scopes.Add(Scopes.OpenId); options.Scopes.Add(Scopes.OpenId);
options.Scopes.Add("custom_scope"); options.Scopes.Add("custom_scope");
})); }));
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
var scopes = (string[]) response[Metadata.ScopesSupported]; var scopes = (string[]) response[Metadata.ScopesSupported];
@ -651,11 +698,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoSupportedClaimsPropertyIsReturnedWhenNoClaimIsConfigured() public async Task HandleConfigurationRequest_NoSupportedClaimsPropertyIsReturnedWhenNoClaimIsConfigured()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.PostConfigure<OpenIddictServerOptions>(options => options.Claims.Clear()); options.Services.PostConfigure<OpenIddictServerOptions>(options => options.Claims.Clear());
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -667,13 +716,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_ConfiguredClaimsAreReturned() public async Task HandleConfigurationRequest_ConfiguredClaimsAreReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.Services.PostConfigure<OpenIddictServerOptions>(options => await using var server = await CreateServerAsync(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
{ {
options.Claims.Clear(); options.Claims.Clear();
options.Claims.Add(Claims.Profile); options.Claims.Add(Claims.Profile);
options.Claims.Add("custom_claim"); options.Claims.Add("custom_claim");
})); }));
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
var claims = (string[]) response[Metadata.ClaimsSupported]; var claims = (string[]) response[Metadata.ClaimsSupported];
@ -688,7 +739,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_SupportedSubjectTypesAreCorrectlyReturned() public async Task HandleConfigurationRequest_SupportedSubjectTypesAreCorrectlyReturned()
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -712,12 +764,14 @@ namespace OpenIddict.Server.FunctionalTests
// Arrange // Arrange
var credentials = new SigningCredentials(Mock.Of<AsymmetricSecurityKey>(), algorithm); var credentials = new SigningCredentials(Mock.Of<AsymmetricSecurityKey>(), algorithm);
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Configure(options => options.SigningCredentials.Clear()); options.Configure(options => options.SigningCredentials.Clear());
options.AddSigningCredentials(credentials); options.AddSigningCredentials(credentials);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
var algorithms = (string[]) response[Metadata.IdTokenSigningAlgValuesSupported]; var algorithms = (string[]) response[Metadata.IdTokenSigningAlgValuesSupported];
@ -730,13 +784,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_SymmetricSigningKeysAreIgnored() public async Task HandleConfigurationRequest_SymmetricSigningKeysAreIgnored()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Configure(options => options.SigningCredentials.Clear()); options.Configure(options => options.SigningCredentials.Clear());
options.AddSigningKey(new SymmetricSecurityKey(new byte[256 / 8])); options.AddSigningKey(new SymmetricSecurityKey(new byte[256 / 8]));
options.AddSigningCredentials(new SigningCredentials(Mock.Of<AsymmetricSecurityKey>(), Algorithms.RsaSha256)); options.AddSigningCredentials(new SigningCredentials(Mock.Of<AsymmetricSecurityKey>(), Algorithms.RsaSha256));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
var algorithms = (string[]) response[Metadata.IdTokenSigningAlgValuesSupported]; var algorithms = (string[]) response[Metadata.IdTokenSigningAlgValuesSupported];
@ -752,7 +808,7 @@ namespace OpenIddict.Server.FunctionalTests
// Arrange // Arrange
var credentials = new SigningCredentials(Mock.Of<AsymmetricSecurityKey>(), SecurityAlgorithms.RsaSha256Signature); var credentials = new SigningCredentials(Mock.Of<AsymmetricSecurityKey>(), SecurityAlgorithms.RsaSha256Signature);
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Configure(options => options.SigningCredentials.Clear()); options.Configure(options => options.SigningCredentials.Clear());
options.AddSigningCredentials(credentials); options.AddSigningCredentials(credentials);
@ -760,6 +816,8 @@ namespace OpenIddict.Server.FunctionalTests
options.AddSigningCredentials(credentials); options.AddSigningCredentials(credentials);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
var algorithms = (string[]) response[Metadata.IdTokenSigningAlgValuesSupported]; var algorithms = (string[]) response[Metadata.IdTokenSigningAlgValuesSupported];
@ -772,7 +830,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_SupportedParametersAreReturned() public async Task HandleConfigurationRequest_SupportedParametersAreReturned()
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -794,7 +853,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task HandleConfigurationRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -807,6 +866,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -820,7 +881,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_AllowsHandlingResponse() public async Task HandleConfigurationRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -838,6 +899,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -849,7 +912,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_AllowsSkippingHandler() public async Task HandleConfigurationRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -862,6 +925,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -873,7 +938,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyConfigurationResponse_AllowsHandlingResponse() public async Task ApplyConfigurationResponse_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -891,6 +956,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -902,7 +969,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyConfigurationResponse_ResponseContainsCustomParameters() public async Task ApplyConfigurationResponse_ResponseContainsCustomParameters()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -920,6 +987,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/openid-configuration"); var response = await client.GetAsync("/.well-known/openid-configuration");
@ -937,7 +1006,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractCryptographyRequest_UnexpectedMethodReturnsAnError(string method) public async Task ExtractCryptographyRequest_UnexpectedMethodReturnsAnError(string method)
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.SendAsync(method, "/.well-known/jwks", new OpenIddictRequest()); var response = await client.SendAsync(method, "/.well-known/jwks", new OpenIddictRequest());
@ -958,7 +1028,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractCryptographyRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ExtractCryptographyRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -971,6 +1041,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
@ -984,7 +1056,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractCryptographyRequest_AllowsHandlingResponse() public async Task ExtractCryptographyRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1002,6 +1074,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
@ -1013,7 +1087,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractCryptographyRequest_AllowsSkippingHandler() public async Task ExtractCryptographyRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1026,6 +1100,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
@ -1044,7 +1120,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateCryptographyRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ValidateCryptographyRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1057,6 +1133,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
@ -1070,7 +1148,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateCryptographyRequest_AllowsHandlingResponse() public async Task ValidateCryptographyRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1088,6 +1166,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
@ -1099,7 +1179,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateCryptographyRequest_AllowsSkippingHandler() public async Task ValidateCryptographyRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1112,6 +1192,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
@ -1134,11 +1216,13 @@ namespace OpenIddict.Server.FunctionalTests
var factory = Mock.Of<CryptoProviderFactory>(mock => !mock.IsSupportedAlgorithm(algorithm, It.IsAny<SecurityKey>())); var factory = Mock.Of<CryptoProviderFactory>(mock => !mock.IsSupportedAlgorithm(algorithm, It.IsAny<SecurityKey>()));
var key = Mock.Of<SecurityKey>(mock => mock.CryptoProviderFactory == factory); var key = Mock.Of<SecurityKey>(mock => mock.CryptoProviderFactory == factory);
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.AddSigningCredentials(new SigningCredentials(key, algorithm)); options.AddSigningCredentials(new SigningCredentials(key, algorithm));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
var keys = (JsonElement) response[Parameters.Keys]; var keys = (JsonElement) response[Parameters.Keys];
@ -1164,12 +1248,14 @@ namespace OpenIddict.Server.FunctionalTests
Q = Convert.FromBase64String("vQy5C++AzF+TRh6qwbKzOqt87ZHEHidIAh6ivRNewjzIgCWXpseVl7DimY1YdViOnw1VI7xY+EyiyTanq5caTqqB3KcDm2t40bJfrZuUcn/5puRIh1bKNDwIMLsuNCrjHmDlNbocqpYMOh0Pgw7ARNbqrnPjWsYGJPuMNFpax/U=") Q = Convert.FromBase64String("vQy5C++AzF+TRh6qwbKzOqt87ZHEHidIAh6ivRNewjzIgCWXpseVl7DimY1YdViOnw1VI7xY+EyiyTanq5caTqqB3KcDm2t40bJfrZuUcn/5puRIh1bKNDwIMLsuNCrjHmDlNbocqpYMOh0Pgw7ARNbqrnPjWsYGJPuMNFpax/U=")
}; };
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Configure(options => options.SigningCredentials.Clear()); options.Configure(options => options.SigningCredentials.Clear());
options.AddSigningKey(new RsaSecurityKey(parameters)); options.AddSigningKey(new RsaSecurityKey(parameters));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
var key = response[Parameters.Keys]?[0]; var key = response[Parameters.Keys]?[0];
@ -1222,12 +1308,14 @@ namespace OpenIddict.Server.FunctionalTests
var algorithm = ECDsa.Create(parameters); var algorithm = ECDsa.Create(parameters);
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Configure(options => options.SigningCredentials.Clear()); options.Configure(options => options.SigningCredentials.Clear());
options.AddSigningKey(new ECDsaSecurityKey(algorithm)); options.AddSigningKey(new ECDsaSecurityKey(algorithm));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
var key = response[Parameters.Keys]?[0]; var key = response[Parameters.Keys]?[0];
@ -1244,7 +1332,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleCryptographyRequest_X509CertificatesAreCorrectlyExposed() public async Task HandleCryptographyRequest_X509CertificatesAreCorrectlyExposed()
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
@ -1266,7 +1355,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleCryptographyRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task HandleCryptographyRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1279,6 +1368,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
@ -1292,7 +1383,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleCryptographyRequest_AllowsHandlingResponse() public async Task HandleCryptographyRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1310,6 +1401,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
@ -1321,7 +1414,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleCryptographyRequest_AllowsSkippingHandler() public async Task HandleCryptographyRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1334,6 +1427,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
@ -1345,7 +1440,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyCryptographyResponse_AllowsHandlingResponse() public async Task ApplyCryptographyResponse_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1363,6 +1458,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");
@ -1374,7 +1471,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyCryptographyResponse_ResponseContainsCustomParameters() public async Task ApplyCryptographyResponse_ResponseContainsCustomParameters()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1392,6 +1489,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/.well-known/jwks"); var response = await client.GetAsync("/.well-known/jwks");

290
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Exchange.cs

File diff suppressed because it is too large

150
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Introspection.cs

@ -34,7 +34,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractIntrospectionRequest_UnexpectedMethodReturnsAnError(string method) public async Task ExtractIntrospectionRequest_UnexpectedMethodReturnsAnError(string method)
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.SendAsync(method, "/connect/introspect", new OpenIddictRequest()); var response = await client.SendAsync(method, "/connect/introspect", new OpenIddictRequest());
@ -55,7 +56,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractIntrospectionRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ExtractIntrospectionRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -68,6 +69,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest()); var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest());
@ -81,7 +84,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractIntrospectionRequest_AllowsHandlingResponse() public async Task ExtractIntrospectionRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -99,6 +102,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/connect/introspect"); var response = await client.GetAsync("/connect/introspect");
@ -110,7 +115,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractIntrospectionRequest_AllowsSkippingHandler() public async Task ExtractIntrospectionRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -123,6 +128,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/connect/introspect"); var response = await client.GetAsync("/connect/introspect");
@ -134,7 +141,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_MissingTokenCausesAnError() public async Task ValidateIntrospectionRequest_MissingTokenCausesAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
@ -151,13 +159,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_InvalidTokenCausesAnError() public async Task ValidateIntrospectionRequest_InvalidTokenCausesAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -173,7 +183,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_ExpiredTokenCausesAnError() public async Task ValidateIntrospectionRequest_ExpiredTokenCausesAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -196,6 +206,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -212,7 +224,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_AuthorizationCodeCausesAnErrorWhenPresentersAreMissing() public async Task ValidateIntrospectionRequest_AuthorizationCodeCausesAnErrorWhenPresentersAreMissing()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -233,6 +245,8 @@ namespace OpenIddict.Server.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act and assert // Act and assert
var exception = await Assert.ThrowsAsync<InvalidOperationException>(delegate var exception = await Assert.ThrowsAsync<InvalidOperationException>(delegate
{ {
@ -251,7 +265,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_AuthorizationCodeCausesAnErrorWhenCallerIsNotAValidPresenter() public async Task ValidateIntrospectionRequest_AuthorizationCodeCausesAnErrorWhenCallerIsNotAValidPresenter()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -274,6 +288,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -291,7 +307,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_AccessTokenCausesAnErrorWhenCallerIsNotAValidAudienceOrPresenter() public async Task ValidateIntrospectionRequest_AccessTokenCausesAnErrorWhenCallerIsNotAValidAudienceOrPresenter()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -315,6 +331,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -332,7 +350,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_IdentityTokenCausesAnErrorWhenCallerIsNotAValidAudience() public async Task ValidateIntrospectionRequest_IdentityTokenCausesAnErrorWhenCallerIsNotAValidAudience()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -355,6 +373,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -372,7 +392,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_RefreshTokenCausesAnErrorWhenCallerIsNotAValidPresenter() public async Task ValidateIntrospectionRequest_RefreshTokenCausesAnErrorWhenCallerIsNotAValidPresenter()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -395,6 +415,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -412,11 +434,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_RequestWithoutClientIdIsRejectedWhenClientIdentificationIsRequired() public async Task ValidateIntrospectionRequest_RequestWithoutClientIdIsRejectedWhenClientIdentificationIsRequired()
{ {
// Arrange // Arrange
var client = CreateClient(builder => await using var server = await CreateServerAsync(builder =>
{ {
builder.Configure(options => options.AcceptAnonymousClients = false); builder.Configure(options => options.AcceptAnonymousClients = false);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -438,11 +462,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(value: null); .ReturnsAsync(value: null);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -477,13 +503,15 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
options.Configure(options => options.IgnoreEndpointPermissions = false); options.Configure(options => options.IgnoreEndpointPermissions = false);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -515,11 +543,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true); .ReturnsAsync(true);
}); });
var client = CreateClient(builder => await using var server = await CreateServerAsync(builder =>
{ {
builder.Services.AddSingleton(manager); builder.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -551,11 +581,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(builder => await using var server = await CreateServerAsync(builder =>
{ {
builder.Services.AddSingleton(manager); builder.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -590,11 +622,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -621,7 +655,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ValidateIntrospectionRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -649,6 +683,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -665,7 +701,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_AllowsHandlingResponse() public async Task ValidateIntrospectionRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -698,6 +734,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -712,7 +750,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_AllowsSkippingHandler() public async Task ValidateIntrospectionRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -740,6 +778,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -754,7 +794,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleIntrospectionRequest_BasicClaimsAreCorrectlyReturned() public async Task HandleIntrospectionRequest_BasicClaimsAreCorrectlyReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -782,6 +822,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(ValidateExpirationDate.Descriptor); options.RemoveEventHandler(ValidateExpirationDate.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -808,7 +850,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleIntrospectionRequest_NonBasicAuthorizationCodeClaimsAreNotReturned() public async Task HandleIntrospectionRequest_NonBasicAuthorizationCodeClaimsAreNotReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -831,6 +873,8 @@ namespace OpenIddict.Server.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -849,7 +893,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleIntrospectionRequest_NonBasicRefreshTokenClaimsAreNotReturned() public async Task HandleIntrospectionRequest_NonBasicRefreshTokenClaimsAreNotReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -872,6 +916,8 @@ namespace OpenIddict.Server.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -904,7 +950,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true); .ReturnsAsync(true);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.AddEventHandler<ProcessAuthenticationContext>(builder => options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{ {
@ -929,6 +975,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -962,7 +1010,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true); .ReturnsAsync(true);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.AddEventHandler<ProcessAuthenticationContext>(builder => options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{ {
@ -985,6 +1033,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -1017,7 +1067,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true); .ReturnsAsync(true);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.AddEventHandler<ProcessAuthenticationContext>(builder => options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{ {
@ -1044,6 +1094,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -1082,7 +1134,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true); .ReturnsAsync(true);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.AddEventHandler<ProcessAuthenticationContext>(builder => options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{ {
@ -1116,6 +1168,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -1161,7 +1215,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(value: null); .ReturnsAsync(value: null);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.UseReferenceTokens(); options.UseReferenceTokens();
@ -1184,6 +1238,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -1209,7 +1265,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(new OpenIddictAuthorization()); .ReturnsAsync(new OpenIddictAuthorization());
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.AddEventHandler<ProcessAuthenticationContext>(builder => options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{ {
@ -1276,6 +1332,8 @@ namespace OpenIddict.Server.FunctionalTests
options.UseReferenceTokens(); options.UseReferenceTokens();
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -1300,7 +1358,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(value: null); .ReturnsAsync(value: null);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.AddEventHandler<ProcessAuthenticationContext>(builder => options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{ {
@ -1368,6 +1426,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -1398,7 +1458,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.AddEventHandler<ProcessAuthenticationContext>(builder => options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{ {
@ -1466,6 +1526,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -1509,7 +1571,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.AddEventHandler<ProcessAuthenticationContext>(builder => options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{ {
@ -1551,6 +1613,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -1578,7 +1642,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleIntrospectionRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task HandleIntrospectionRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1606,6 +1670,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -1622,7 +1688,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleIntrospectionRequest_AllowsHandlingResponse() public async Task HandleIntrospectionRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1655,6 +1721,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -1669,7 +1737,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleIntrospectionRequest_AllowsSkippingHandler() public async Task HandleIntrospectionRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1697,6 +1765,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -1711,7 +1781,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyIntrospectionResponse_AllowsHandlingResponse() public async Task ApplyIntrospectionResponse_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1744,6 +1814,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {
@ -1758,7 +1830,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyIntrospectionResponse_ResponseContainsCustomParameters() public async Task ApplyIntrospectionResponse_ResponseContainsCustomParameters()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1776,6 +1848,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {

102
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Revocation.cs

@ -31,7 +31,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractRevocationRequest_UnexpectedMethodReturnsAnError(string method) public async Task ExtractRevocationRequest_UnexpectedMethodReturnsAnError(string method)
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.SendAsync(method, "/connect/revoke", new OpenIddictRequest()); var response = await client.SendAsync(method, "/connect/revoke", new OpenIddictRequest());
@ -52,7 +53,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractRevocationRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ExtractRevocationRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -65,6 +66,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest()); var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest());
@ -78,7 +81,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractRevocationRequest_AllowsHandlingResponse() public async Task ExtractRevocationRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -96,6 +99,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest()); var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest());
@ -107,7 +112,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractRevocationRequest_AllowsSkippingHandler() public async Task ExtractRevocationRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -120,6 +125,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest()); var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest());
@ -131,7 +138,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_MissingTokenCausesAnError() public async Task ValidateRevocationRequest_MissingTokenCausesAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
@ -148,7 +156,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_IdentityTokenCausesAnUnsupportedTokenTypeError() public async Task ValidateRevocationRequest_IdentityTokenCausesAnUnsupportedTokenTypeError()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -171,6 +179,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -188,7 +198,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_AuthorizationCodeCausesAnErrorWhenCallerIsNotAValidPresenter() public async Task ValidateRevocationRequest_AuthorizationCodeCausesAnErrorWhenCallerIsNotAValidPresenter()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -211,6 +221,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -228,7 +240,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_AccessTokenCausesAnErrorWhenCallerIsNotAValidAudienceOrPresenter() public async Task ValidateRevocationRequest_AccessTokenCausesAnErrorWhenCallerIsNotAValidAudienceOrPresenter()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -252,6 +264,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -269,7 +283,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_RefreshTokenCausesAnErrorWhenCallerIsNotAValidPresenter() public async Task ValidateRevocationRequest_RefreshTokenCausesAnErrorWhenCallerIsNotAValidPresenter()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -292,6 +306,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor); options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -309,11 +325,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_RequestWithoutClientIdIsRejectedWhenClientIdentificationIsRequired() public async Task ValidateRevocationRequest_RequestWithoutClientIdIsRejectedWhenClientIdentificationIsRequired()
{ {
// Arrange // Arrange
var client = CreateClient(builder => await using var server = await CreateServerAsync(builder =>
{ {
builder.Configure(options => options.AcceptAnonymousClients = false); builder.Configure(options => options.AcceptAnonymousClients = false);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -336,11 +354,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(value: null); .ReturnsAsync(value: null);
}); });
var client = CreateClient(builder => await using var server = await CreateServerAsync(builder =>
{ {
builder.Services.AddSingleton(manager); builder.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -375,13 +395,15 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(builder => await using var server = await CreateServerAsync(builder =>
{ {
builder.Services.AddSingleton(manager); builder.Services.AddSingleton(manager);
builder.Configure(options => options.IgnoreEndpointPermissions = false); builder.Configure(options => options.IgnoreEndpointPermissions = false);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -414,11 +436,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true); .ReturnsAsync(true);
}); });
var client = CreateClient(builder => await using var server = await CreateServerAsync(builder =>
{ {
builder.Services.AddSingleton(manager); builder.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -451,11 +475,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(builder => await using var server = await CreateServerAsync(builder =>
{ {
builder.Services.AddSingleton(manager); builder.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -491,11 +517,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(builder => await using var server = await CreateServerAsync(builder =>
{ {
builder.Services.AddSingleton(manager); builder.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -525,7 +553,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ValidateRevocationRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -553,6 +581,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -569,7 +599,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_AllowsHandlingResponse() public async Task ValidateRevocationRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -602,6 +632,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -616,7 +648,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_AllowsSkippingHandler() public async Task ValidateRevocationRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -644,6 +676,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -664,7 +698,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(value: null); .ReturnsAsync(value: null);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.AddEventHandler<ProcessAuthenticationContext>(builder => options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{ {
@ -687,6 +721,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -722,7 +758,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(TokenTypeHints.RefreshToken); .ReturnsAsync(TokenTypeHints.RefreshToken);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.AddEventHandler<ProcessAuthenticationContext>(builder => options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{ {
@ -745,6 +781,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -783,7 +821,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true); .ReturnsAsync(true);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.AddEventHandler<ProcessAuthenticationContext>(builder => options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{ {
@ -806,6 +844,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -830,7 +870,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleRevocationRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task HandleRevocationRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -858,6 +898,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -874,7 +916,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleRevocationRequest_AllowsHandlingResponse() public async Task HandleRevocationRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -907,6 +949,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -921,7 +965,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleRevocationRequest_AllowsSkippingHandler() public async Task HandleRevocationRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -949,6 +993,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -963,7 +1009,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyRevocationResponse_AllowsHandlingResponse() public async Task ApplyRevocationResponse_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -996,6 +1042,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {
@ -1010,7 +1058,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyRevocationResponse_ResponseContainsCustomParameters() public async Task ApplyRevocationResponse_ResponseContainsCustomParameters()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -1028,6 +1076,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {

74
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Session.cs

@ -28,7 +28,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractLogoutRequest_UnexpectedMethodReturnsAnError(string method) public async Task ExtractLogoutRequest_UnexpectedMethodReturnsAnError(string method)
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.SendAsync(method, "/connect/logout", new OpenIddictRequest()); var response = await client.SendAsync(method, "/connect/logout", new OpenIddictRequest());
@ -49,7 +50,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractLogoutRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ExtractLogoutRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -62,6 +63,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest()); var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -75,7 +78,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractLogoutRequest_AllowsHandlingResponse() public async Task ExtractLogoutRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -93,6 +96,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/connect/logout"); var response = await client.GetAsync("/connect/logout");
@ -104,7 +109,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractLogoutRequest_AllowsSkippingHandler() public async Task ExtractLogoutRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -117,6 +122,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/connect/logout"); var response = await client.GetAsync("/connect/logout");
@ -132,7 +139,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateLogoutRequest_RequestIsRejectedWhenRedirectUriIsInvalid(string address, string message) public async Task ValidateLogoutRequest_RequestIsRejectedWhenRedirectUriIsInvalid(string address, string message)
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
@ -155,11 +163,13 @@ namespace OpenIddict.Server.FunctionalTests
.Returns(AsyncEnumerable.Empty<OpenIddictApplication>()); .Returns(AsyncEnumerable.Empty<OpenIddictApplication>());
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
{ {
@ -195,13 +205,15 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
options.Configure(options => options.IgnoreEndpointPermissions = false); options.Configure(options => options.IgnoreEndpointPermissions = false);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
{ {
@ -243,7 +255,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false); .ReturnsAsync(false);
}); });
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddSingleton(manager); options.Services.AddSingleton(manager);
@ -251,6 +263,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Configure(options => options.IgnoreEndpointPermissions = false); options.Configure(options => options.IgnoreEndpointPermissions = false);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/signout", new OpenIddictRequest var response = await client.PostAsync("/signout", new OpenIddictRequest
{ {
@ -278,7 +292,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateLogoutRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ValidateLogoutRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -291,6 +305,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest()); var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -304,7 +320,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateLogoutRequest_AllowsHandlingResponse() public async Task ValidateLogoutRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -322,6 +338,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest()); var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -333,7 +351,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateLogoutRequest_AllowsSkippingHandler() public async Task ValidateLogoutRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -346,6 +364,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest()); var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -364,7 +384,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleLogoutRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task HandleLogoutRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -377,6 +397,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest()); var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -390,7 +412,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleLogoutRequest_AllowsHandlingResponse() public async Task HandleLogoutRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -408,6 +430,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest()); var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -419,7 +443,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleLogoutRequest_AllowsSkippingHandler() public async Task HandleLogoutRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -432,6 +456,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest()); var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -443,7 +469,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyLogoutResponse_AllowsHandlingResponse() public async Task ApplyLogoutResponse_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -461,6 +487,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest()); var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -472,7 +500,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyLogoutResponse_ResponseContainsCustomParameters() public async Task ApplyLogoutResponse_ResponseContainsCustomParameters()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -490,6 +518,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
{ {
@ -505,12 +535,14 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyLogoutResponse_DoesNotSetStateWhenUserIsNotRedirected() public async Task ApplyLogoutResponse_DoesNotSetStateWhenUserIsNotRedirected()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
options.SetLogoutEndpointUris("/signout"); options.SetLogoutEndpointUris("/signout");
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/signout", new OpenIddictRequest var response = await client.PostAsync("/signout", new OpenIddictRequest
{ {
@ -525,12 +557,14 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyLogoutResponse_FlowsStateWhenRedirectUriIsUsed() public async Task ApplyLogoutResponse_FlowsStateWhenRedirectUriIsUsed()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
options.SetLogoutEndpointUris("/signout"); options.SetLogoutEndpointUris("/signout");
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/signout", new OpenIddictRequest var response = await client.PostAsync("/signout", new OpenIddictRequest
{ {
@ -546,7 +580,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyLogoutResponse_DoesNotOverrideStateSetByApplicationCode() public async Task ApplyLogoutResponse_DoesNotOverrideStateSetByApplicationCode()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
options.SetLogoutEndpointUris("/signout"); options.SetLogoutEndpointUris("/signout");
@ -560,6 +594,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/signout", new OpenIddictRequest var response = await client.PostAsync("/signout", new OpenIddictRequest
{ {

77
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Userinfo.cs

@ -28,7 +28,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractUserinfoRequest_UnexpectedMethodReturnsAnError(string method) public async Task ExtractUserinfoRequest_UnexpectedMethodReturnsAnError(string method)
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.SendAsync(method, "/connect/userinfo", new OpenIddictRequest()); var response = await client.SendAsync(method, "/connect/userinfo", new OpenIddictRequest());
@ -49,7 +50,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractUserinfoRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ExtractUserinfoRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -62,6 +63,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest()); var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest());
@ -75,7 +78,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractUserinfoRequest_AllowsHandlingResponse() public async Task ExtractUserinfoRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -93,6 +96,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/connect/userinfo"); var response = await client.GetAsync("/connect/userinfo");
@ -104,7 +109,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractUserinfoRequest_AllowsSkippingHandler() public async Task ExtractUserinfoRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -117,6 +122,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.GetAsync("/connect/userinfo"); var response = await client.GetAsync("/connect/userinfo");
@ -128,7 +135,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateUserinfoRequest_MissingTokenCausesAnError() public async Task ValidateUserinfoRequest_MissingTokenCausesAnError()
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
@ -144,7 +152,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateUserinfoRequest_InvalidTokenCausesAnError() public async Task ValidateUserinfoRequest_InvalidTokenCausesAnError()
{ {
// Arrange // Arrange
var client = CreateClient(); await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
@ -161,7 +170,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateUserinfoRequest_ExpiredTokenCausesAnError() public async Task ValidateUserinfoRequest_ExpiredTokenCausesAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -182,6 +191,8 @@ namespace OpenIddict.Server.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -204,7 +215,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateUserinfoRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task ValidateUserinfoRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -232,6 +243,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -248,7 +261,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateUserinfoRequest_AllowsHandlingResponse() public async Task ValidateUserinfoRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -281,6 +294,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -295,7 +310,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateUserinfoRequest_AllowsSkippingHandler() public async Task ValidateUserinfoRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -323,6 +338,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -337,7 +354,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_BasicClaimsAreCorrectlyReturned() public async Task HandleUserinfoRequest_BasicClaimsAreCorrectlyReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -359,6 +376,8 @@ namespace OpenIddict.Server.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -376,7 +395,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_NonBasicClaimsAreNotReturnedWhenNoScopeWasGranted() public async Task HandleUserinfoRequest_NonBasicClaimsAreNotReturnedWhenNoScopeWasGranted()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -406,6 +425,8 @@ namespace OpenIddict.Server.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -423,7 +444,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_ProfileClaimsAreCorrectlyReturned() public async Task HandleUserinfoRequest_ProfileClaimsAreCorrectlyReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -452,6 +473,8 @@ namespace OpenIddict.Server.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -468,7 +491,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_EmailClaimIsCorrectlyReturned() public async Task HandleUserinfoRequest_EmailClaimIsCorrectlyReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -492,6 +515,8 @@ namespace OpenIddict.Server.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -506,7 +531,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_PhoneClaimIsCorrectlyReturned() public async Task HandleUserinfoRequest_PhoneClaimIsCorrectlyReturned()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -530,6 +555,8 @@ namespace OpenIddict.Server.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -551,7 +578,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_AllowsRejectingRequest(string error, string description, string uri) public async Task HandleUserinfoRequest_AllowsRejectingRequest(string error, string description, string uri)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -579,6 +606,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -595,7 +624,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_AllowsHandlingResponse() public async Task HandleUserinfoRequest_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -628,6 +657,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -642,7 +673,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_AllowsSkippingHandler() public async Task HandleUserinfoRequest_AllowsSkippingHandler()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -670,6 +701,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -684,7 +717,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyUserinfoResponse_AllowsHandlingResponse() public async Task ApplyUserinfoResponse_AllowsHandlingResponse()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -717,6 +750,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {
@ -731,7 +766,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyUserinfoResponse_ResponseContainsCustomParameters() public async Task ApplyUserinfoResponse_ResponseContainsCustomParameters()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -764,6 +799,8 @@ namespace OpenIddict.Server.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{ {

350
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.cs

File diff suppressed because it is too large

38
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTestServer.cs

@ -0,0 +1,38 @@
/*
* Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
* See https://github.com/openiddict/openiddict-core for more information concerning
* the license and the contributors participating to this project.
*/
using System.Threading.Tasks;
using Microsoft.Owin.Testing;
using OpenIddict.Server.FunctionalTests;
namespace OpenIddict.Server.Owin.FunctionalTests
{
/// <summary>
/// Represents a test host used by the server integration tests.
/// </summary>
public class OpenIddictServerOwinIntegrationTestServer : OpenIddictServerIntegrationTestServer
{
public OpenIddictServerOwinIntegrationTestServer(TestServer server)
=> Server = server;
/// <summary>
/// Gets the ASP.NET Core test server used by this instance.
/// </summary>
public TestServer Server { get; }
public override ValueTask<OpenIddictServerIntegrationTestClient> CreateClientAsync()
=> new ValueTask<OpenIddictServerIntegrationTestClient>(
new OpenIddictServerIntegrationTestClient(Server.HttpClient));
public override ValueTask DisposeAsync()
{
// Dispose of the underlying test server.
Server.Dispose();
return default;
}
}
}

7
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Authentication.cs

@ -19,7 +19,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractAuthorizationRequest_RequestIdParameterIsRejectedWhenRequestCachingIsDisabled() public async Task ExtractAuthorizationRequest_RequestIdParameterIsRejectedWhenRequestCachingIsDisabled()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -36,7 +37,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractAuthorizationRequest_InvalidRequestIdParameterIsRejected() public async Task ExtractAuthorizationRequest_InvalidRequestIdParameterIsRejected()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddDistributedMemoryCache(); options.Services.AddDistributedMemoryCache();
@ -44,6 +45,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
.EnableAuthorizationEndpointCaching(); .EnableAuthorizationEndpointCaching();
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{ {

4
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Exchange.cs

@ -20,7 +20,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractTokenRequest_MultipleClientCredentialsCauseAnError() public async Task ExtractTokenRequest_MultipleClientCredentialsCauseAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -38,6 +38,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/token", new OpenIddictRequest var response = await client.PostAsync("/connect/token", new OpenIddictRequest
{ {

4
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Introspection.cs

@ -20,7 +20,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractIntrospectionRequest_MultipleClientCredentialsCauseAnError() public async Task ExtractIntrospectionRequest_MultipleClientCredentialsCauseAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -38,6 +38,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{ {

4
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Revocation.cs

@ -20,7 +20,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractRevocationRequest_MultipleClientCredentialsCauseAnError() public async Task ExtractRevocationRequest_MultipleClientCredentialsCauseAnError()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -38,6 +38,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{ {

7
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Session.cs

@ -19,7 +19,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractLogoutRequest_RequestIdParameterIsRejectedWhenRequestCachingIsDisabled() public async Task ExtractLogoutRequest_RequestIdParameterIsRejectedWhenRequestCachingIsDisabled()
{ {
// Arrange // Arrange
var client = CreateClient(options => options.EnableDegradedMode()); await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
@ -36,7 +37,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractLogoutRequest_InvalidRequestIdParameterIsRejected() public async Task ExtractLogoutRequest_InvalidRequestIdParameterIsRejected()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.Services.AddDistributedMemoryCache(); options.Services.AddDistributedMemoryCache();
@ -44,6 +45,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
.EnableLogoutEndpointCaching(); .EnableLogoutEndpointCaching();
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
{ {

37
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.cs

@ -30,7 +30,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ProcessChallenge_ReturnsErrorFromAuthenticationProperties() public async Task ProcessChallenge_ReturnsErrorFromAuthenticationProperties()
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
options.SetTokenEndpointUris("/challenge/custom"); options.SetTokenEndpointUris("/challenge/custom");
@ -44,6 +44,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync("/challenge/custom", new OpenIddictRequest var response = await client.PostAsync("/challenge/custom", new OpenIddictRequest
{ {
@ -128,10 +130,10 @@ namespace OpenIddict.Server.Owin.FunctionalTests
[InlineData("/.WELL-KNOWN/JWKS/SUBPATH", OpenIddictServerEndpointType.Unknown)] [InlineData("/.WELL-KNOWN/JWKS/SUBPATH", OpenIddictServerEndpointType.Unknown)]
[InlineData("/.well-known/jwks/subpath/", OpenIddictServerEndpointType.Unknown)] [InlineData("/.well-known/jwks/subpath/", OpenIddictServerEndpointType.Unknown)]
[InlineData("/.WELL-KNOWN/JWKS/SUBPATH/", OpenIddictServerEndpointType.Unknown)] [InlineData("/.WELL-KNOWN/JWKS/SUBPATH/", OpenIddictServerEndpointType.Unknown)]
public Task ProcessRequest_MatchesCorrespondingEndpoint(string path, OpenIddictServerEndpointType type) public async Task ProcessRequest_MatchesCorrespondingEndpoint(string path, OpenIddictServerEndpointType type)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -145,8 +147,10 @@ namespace OpenIddict.Server.Owin.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
return client.PostAsync(path, new OpenIddictRequest()); await client.PostAsync(path, new OpenIddictRequest());
} }
[Theory] [Theory]
@ -159,10 +163,10 @@ namespace OpenIddict.Server.Owin.FunctionalTests
[InlineData("/custom/connect/userinfo", OpenIddictServerEndpointType.Userinfo)] [InlineData("/custom/connect/userinfo", OpenIddictServerEndpointType.Userinfo)]
[InlineData("/custom/.well-known/openid-configuration", OpenIddictServerEndpointType.Configuration)] [InlineData("/custom/.well-known/openid-configuration", OpenIddictServerEndpointType.Configuration)]
[InlineData("/custom/.well-known/jwks", OpenIddictServerEndpointType.Cryptography)] [InlineData("/custom/.well-known/jwks", OpenIddictServerEndpointType.Cryptography)]
public Task ProcessRequest_AllowsOverridingEndpoint(string address, OpenIddictServerEndpointType type) public async Task ProcessRequest_AllowsOverridingEndpoint(string address, OpenIddictServerEndpointType type)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -183,8 +187,10 @@ namespace OpenIddict.Server.Owin.FunctionalTests
}); });
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
return client.PostAsync(address, new OpenIddictRequest()); await client.PostAsync(address, new OpenIddictRequest());
} }
[Theory] [Theory]
@ -199,7 +205,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ProcessRequest_RejectsInsecureHttpRequests(string address) public async Task ProcessRequest_RejectsInsecureHttpRequests(string address)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -207,6 +213,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
.Configure(options => options.DisableTransportSecurityRequirement = false); .Configure(options => options.DisableTransportSecurityRequirement = false);
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync(address, new OpenIddictRequest()); var response = await client.PostAsync(address, new OpenIddictRequest());
@ -228,7 +236,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ProcessRequest_AllowsHandlingResponse(string address) public async Task ProcessRequest_AllowsHandlingResponse(string address)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -246,6 +254,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync(address, new OpenIddictRequest()); var response = await client.PostAsync(address, new OpenIddictRequest());
@ -266,7 +276,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ProcessRequest_AllowsSkippingHandler(string address) public async Task ProcessRequest_AllowsSkippingHandler(string address)
{ {
// Arrange // Arrange
var client = CreateClient(options => await using var server = await CreateServerAsync(options =>
{ {
options.EnableDegradedMode(); options.EnableDegradedMode();
@ -279,6 +289,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
})); }));
}); });
await using var client = await server.CreateClientAsync();
// Act // Act
var response = await client.PostAsync(address, new OpenIddictRequest()); var response = await client.PostAsync(address, new OpenIddictRequest());
@ -286,7 +298,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
Assert.Equal("Bob le Magnifique", (string) response["name"]); Assert.Equal("Bob le Magnifique", (string) response["name"]);
} }
protected override OpenIddictServerIntegrationTestClient CreateClient(Action<OpenIddictServerBuilder> configuration = null) protected override ValueTask<OpenIddictServerIntegrationTestServer> CreateServerAsync(Action<OpenIddictServerBuilder> configuration = null)
{ {
var services = new ServiceCollection(); var services = new ServiceCollection();
ConfigureServices(services); ConfigureServices(services);
@ -402,7 +414,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
}); });
}); });
return new OpenIddictServerIntegrationTestClient(server.HttpClient); return new ValueTask<OpenIddictServerIntegrationTestServer>(
new OpenIddictServerOwinIntegrationTestServer(server));
} }
} }
} }

Loading…
Cancel
Save