csharp-sdk/tests/ModelContextProtocol.AspNetCore.Tests/Utils/KestrelInMemoryTest.cs
2025-11-17 11:48:18 -05:00

47 lines
1.5 KiB
C#

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Connections;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.Tests.Utils;
namespace ModelContextProtocol.AspNetCore.Tests.Utils;
public class KestrelInMemoryTest : LoggedTest
{
public KestrelInMemoryTest(ITestOutputHelper testOutputHelper)
: base(testOutputHelper)
{
Builder = WebApplication.CreateEmptyBuilder(new());
Builder.Services.AddSingleton<IConnectionListenerFactory>(KestrelInMemoryTransport);
Builder.WebHost.UseKestrelCore();
Builder.Services.AddRoutingCore();
Builder.Services.AddLogging();
Builder.Services.AddSingleton(XunitLoggerProvider);
SocketsHttpHandler.ConnectCallback = (context, token) =>
{
var connection = KestrelInMemoryTransport.CreateConnection(context.DnsEndPoint);
return new(connection.ClientStream);
};
HttpClient = new HttpClient(SocketsHttpHandler)
{
BaseAddress = new Uri("http://localhost:5000/"),
Timeout = TimeSpan.FromSeconds(10),
};
}
public WebApplicationBuilder Builder { get; }
public HttpClient HttpClient { get; }
public SocketsHttpHandler SocketsHttpHandler { get; } = new();
public KestrelInMemoryTransport KestrelInMemoryTransport { get; } = new();
public override void Dispose()
{
HttpClient.Dispose();
base.Dispose();
}
}