mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-03-18 15:23:47 +01:00
* Version 2.x * Setup .NET 9 * 12 * cleanup some #if for NETSTANDARD1_3 * cleanup + fix tests for net8 * openapi * NO ConfigureAwait(false) + cleanup * . * #endif * HashSet * WireMock.Net.NUnit * HttpContext * Add WebSockets (#1423) * Add WebSockets * Add tests * fix * more tests * Add tests * ... * remove IOwin * - * tests * fluent * ok * match * . * byte[] * x * func * func * byte * trans * ... * frameworks......... * jmes * xxx * sc * using var httpClient = new HttpClient(); * usings * maxRetries * up * xunit v3 * ct * --- * ct * ct2 * T Unit * WireMock.Net.TUnitTests / 10 * t unit first * --project * no tunit * t2 * --project * --project * ci - --project * publish ./test/wiremock-coverage.xml * windows * . * log * ... * log * goed * BodyType * . * . * --scenario * ... * pact * ct * . * WireMock.Net.RestClient.AwesomeAssertions (#1427) * WireMock.Net.RestClient.AwesomeAssertions * ok * atpath * fix test * sonar fixes * ports * proxy test * FIX? * --- * await Task.Delay(100, _ct); * ? * --project * Aspire: use IDistributedApplicationEventingSubscriber (#1428) * broadcast * ok * more tsts * . * Collection * up * . * 2 * remove nfluent * <VersionPrefix>2.0.0-preview-02</VersionPrefix> * ... * . * nuget icon * . * <PackageReference Include="JmesPath.Net" Version="1.1.0" /> * x * 500 * . * fix some warnings * ws
106 lines
3.5 KiB
C#
106 lines
3.5 KiB
C#
// Copyright © WireMock.Net
|
|
|
|
#if NET8_0_OR_GREATER
|
|
using System.Net;
|
|
using System.Net.Http.Headers;
|
|
using System.Text;
|
|
using AwesomeAssertions;
|
|
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.Hosting;
|
|
using Microsoft.AspNetCore.Hosting.Server;
|
|
using Microsoft.AspNetCore.Hosting.Server.Features;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using WireMock.Net.Xunit;
|
|
using WireMock.RequestBuilders;
|
|
using WireMock.ResponseBuilders;
|
|
using WireMock.Server;
|
|
using WireMock.Settings;
|
|
|
|
namespace WireMock.Net.Tests.ResponseBuilders;
|
|
|
|
public sealed class ResponseWithProxyIntegrationTests(ITestOutputHelper output)
|
|
{
|
|
private readonly CancellationToken _ct = TestContext.Current.CancellationToken;
|
|
|
|
[Fact]
|
|
public async Task Response_UsingTextPlain()
|
|
{
|
|
// Given
|
|
using var server = await TestServer.New().Run();
|
|
var port = server.GetPort();
|
|
output.WriteLine($"Server running on port {port}");
|
|
|
|
var settings = new WireMockServerSettings
|
|
{
|
|
Port = 0,
|
|
Logger = new TestOutputHelperWireMockLogger(output)
|
|
};
|
|
using var mockServer = WireMockServer.Start(settings);
|
|
mockServer.Given(Request.Create().WithPath("/zipcode").UsingPatch())
|
|
.RespondWith(Response.Create().WithProxy($"http://localhost:{port}"));
|
|
|
|
using var client = new HttpClient { BaseAddress = new Uri(mockServer.Urls[0]) };
|
|
using var content = new ByteArrayContent("0123"u8.ToArray());
|
|
content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
|
|
|
|
// When
|
|
var response = await client.PatchAsync("/zipcode", content, _ct);
|
|
|
|
// Then
|
|
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
|
response.Content.Headers.GetValues("Content-Type").Should().BeEquivalentTo("text/plain; charset=utf-8");
|
|
var result = await response.Content.ReadAsStringAsync(_ct);
|
|
result.Should().Be("0123");
|
|
}
|
|
|
|
sealed class Disposable(Action dispose) : IDisposable
|
|
{
|
|
public void Dispose() => dispose();
|
|
}
|
|
|
|
sealed class TestServer(WebApplication app) : IDisposable
|
|
{
|
|
private Disposable _disposable = new(() => { });
|
|
|
|
public static TestServer New()
|
|
{
|
|
var builder = WebApplication.CreateBuilder();
|
|
builder.WebHost.ConfigureKestrel(opts => opts.ListenAnyIP(0));
|
|
|
|
var app = builder.Build();
|
|
|
|
app.MapPatch("/zipcode", async (HttpRequest req) =>
|
|
{
|
|
var memory = new MemoryStream();
|
|
await req.Body.CopyToAsync(memory);
|
|
var content = Encoding.UTF8.GetString(memory.ToArray());
|
|
return content;
|
|
});
|
|
return new(app);
|
|
}
|
|
|
|
public int GetPort()
|
|
=> app.Services.GetRequiredService<IServer>().Features.Get<IServerAddressesFeature>()!.Addresses
|
|
.Select(x => new Uri(x).Port)
|
|
.First();
|
|
|
|
public async ValueTask<TestServer> Run()
|
|
{
|
|
var started = new TaskCompletionSource();
|
|
var host = app.Services.GetRequiredService<IHostApplicationLifetime>();
|
|
host.ApplicationStarted.Register(started.SetResult);
|
|
_ = Task.Run(() => app.RunAsync());
|
|
await started.Task;
|
|
_disposable = new(host.StopApplication);
|
|
return this;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_disposable.Dispose();
|
|
}
|
|
}
|
|
}
|
|
#endif |