mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-03-20 16:23:42 +01:00
Add unit tests for HttpClient with WebProxy (#1010)
* Add test for SSL / Https * Add unit tests for HttpClient with WebProxy * cert.pem * x * skip * example google * revert * host tests * sonar
This commit is contained in:
@@ -215,10 +215,13 @@ public class WireMockAssertionsTests : IDisposable
|
||||
{
|
||||
// Arrange
|
||||
using var server = WireMockServer.Start();
|
||||
using var client = server.CreateClient();
|
||||
using var client1 = server.CreateClient();
|
||||
|
||||
var handler = new HttpClientHandler();
|
||||
using var client2 = server.CreateClient(handler);
|
||||
|
||||
// Act 1
|
||||
await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "/")
|
||||
await client1.SendAsync(new HttpRequestMessage(HttpMethod.Get, "/")
|
||||
{
|
||||
Headers =
|
||||
{
|
||||
@@ -227,7 +230,7 @@ public class WireMockAssertionsTests : IDisposable
|
||||
});
|
||||
|
||||
// Act 2
|
||||
await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "/")
|
||||
await client2.SendAsync(new HttpRequestMessage(HttpMethod.Get, "/")
|
||||
{
|
||||
Headers =
|
||||
{
|
||||
|
||||
60
test/WireMock.Net.Tests/Owin/HostUrlOptionsTests.cs
Normal file
60
test/WireMock.Net.Tests/Owin/HostUrlOptionsTests.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using FluentAssertions;
|
||||
using WireMock.Owin;
|
||||
using WireMock.Types;
|
||||
using Xunit;
|
||||
|
||||
namespace WireMock.Net.Tests.Owin;
|
||||
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class HostUrlOptionsTests
|
||||
{
|
||||
[Fact]
|
||||
public void GetDetails_WithNoUrlsAndHttpScheme_ShouldReturnCorrectDetails()
|
||||
{
|
||||
// Arrange
|
||||
var options = new HostUrlOptions
|
||||
{
|
||||
HostingScheme = HostingScheme.Http,
|
||||
Port = 8080
|
||||
};
|
||||
|
||||
// Act
|
||||
var details = options.GetDetails();
|
||||
|
||||
// Assert
|
||||
details.Should().HaveCount(1);
|
||||
var detail = details.Single();
|
||||
detail.Should().Match<HostUrlDetails>(d =>
|
||||
d.Scheme == "http" &&
|
||||
d.Host == "localhost" &&
|
||||
d.Port == 8080 &&
|
||||
d.IsHttps == false
|
||||
);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetDetails_WithNoUrlsAndHttpsScheme_ShouldReturnCorrectDetails()
|
||||
{
|
||||
// Arrange
|
||||
var options = new HostUrlOptions
|
||||
{
|
||||
HostingScheme = HostingScheme.Https,
|
||||
Port = 8081
|
||||
};
|
||||
|
||||
// Act
|
||||
var details = options.GetDetails();
|
||||
|
||||
// Assert
|
||||
details.Should().HaveCount(1);
|
||||
var detail = details.Single();
|
||||
detail.Should().Match<HostUrlDetails>(d =>
|
||||
d.Scheme == "https" &&
|
||||
d.Host == "localhost" &&
|
||||
d.Port == 8081 &&
|
||||
d.IsHttps == true
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -110,6 +110,9 @@
|
||||
<None Update="OpenApiParser\*.yml">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="cert.pem">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="responsebody.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
@@ -100,6 +101,99 @@ public partial class WireMockServerTests
|
||||
server.Stop();
|
||||
}
|
||||
|
||||
#if NET461_OR_GREATER || NET6_0_OR_GREATER
|
||||
[Fact]
|
||||
public async Task WireMockServer_Should_Support_Https()
|
||||
{
|
||||
// Arrange
|
||||
const string body = "example";
|
||||
var path = $"/foo_{Guid.NewGuid()}";
|
||||
var settings = new WireMockServerSettings
|
||||
{
|
||||
UseSSL = true
|
||||
};
|
||||
var server = WireMockServer.Start(settings);
|
||||
|
||||
server
|
||||
.Given(Request.Create()
|
||||
.WithPath(path)
|
||||
.UsingGet()
|
||||
)
|
||||
.RespondWith(Response.Create()
|
||||
.WithBody(body)
|
||||
);
|
||||
|
||||
// Configure the HttpClient to trust self-signed certificates
|
||||
var handler = new HttpClientHandler
|
||||
{
|
||||
ServerCertificateCustomValidationCallback = (_, _, _, _) => true
|
||||
};
|
||||
using var client = new HttpClient(handler);
|
||||
|
||||
// Act
|
||||
var result = await client.GetStringAsync($"{server.Url}{path}").ConfigureAwait(false);
|
||||
|
||||
// Assert
|
||||
result.Should().Be(body);
|
||||
|
||||
server.Stop();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if NET6_0_OR_GREATER
|
||||
[Fact]
|
||||
public async Task WireMockServer_When_HttpClientWithWebProxyCallsHttp_Should_Work_Correct()
|
||||
{
|
||||
// Arrange
|
||||
const string body = "example";
|
||||
var settings = new WireMockServerSettings
|
||||
{
|
||||
HostingScheme = HostingScheme.Http
|
||||
};
|
||||
var server = WireMockServer.Start(settings);
|
||||
|
||||
// The response to an HTTP CONNECT method, which is used to establish a tunnel with a proxy, should typically be a 200 OK status code if the connection is successful.
|
||||
// This indicates that a tunnel has been established successfully between the client and the server via the proxy.
|
||||
server
|
||||
.Given(Request.Create()
|
||||
.UsingConnect()
|
||||
)
|
||||
.RespondWith(Response.Create()
|
||||
.WithBody("Connection established")
|
||||
);
|
||||
|
||||
server
|
||||
.Given(Request.Create()
|
||||
.UsingGet()
|
||||
)
|
||||
.RespondWith(Response.Create()
|
||||
.WithBody(body)
|
||||
);
|
||||
|
||||
var httpUrl = server.Urls.First();
|
||||
|
||||
// Act
|
||||
string result;
|
||||
var currentProxy = HttpClient.DefaultProxy;
|
||||
try
|
||||
{
|
||||
HttpClient.DefaultProxy = new WebProxy(httpUrl, false);
|
||||
|
||||
result = await new HttpClient().GetStringAsync(httpUrl).ConfigureAwait(false);
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Revert
|
||||
HttpClient.DefaultProxy = currentProxy;
|
||||
}
|
||||
|
||||
// Assert
|
||||
result.Should().Be(body);
|
||||
|
||||
server.Stop();
|
||||
}
|
||||
#endif
|
||||
|
||||
[Fact]
|
||||
public async Task WireMockServer_Should_respond_a_redirect_without_body()
|
||||
{
|
||||
|
||||
13
test/WireMock.Net.Tests/cert.pem
Normal file
13
test/WireMock.Net.Tests/cert.pem
Normal file
@@ -0,0 +1,13 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIB9TCCAZugAwIBAgIUYH7UM/DAXzosxsT+ea2jdYvhqqMwCgYIKoZIzj0EAwIw
|
||||
UDELMAkGA1UEBhMCTkwxEzARBgNVBAgMClNvbWUtU3RhdGUxFTATBgNVBAoMDFdp
|
||||
cmVNb2NrLk5ldDEVMBMGA1UEAwwMV2lyZU1vY2suTmV0MB4XDTIyMDgxMTE2MjE0
|
||||
NFoXDTMyMDYxOTE2MjE0NFowUDELMAkGA1UEBhMCTkwxEzARBgNVBAgMClNvbWUt
|
||||
U3RhdGUxFTATBgNVBAoMDFdpcmVNb2NrLk5ldDEVMBMGA1UEAwwMV2lyZU1vY2su
|
||||
TmV0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE39VoI268uDuIeKmRzr9e9jgM
|
||||
SGeuJTvTG7+cSXmeDymrVgIGXQgmqKA8TDXpJNrRhWMd/fpsnWu1JwJUjBmspaNT
|
||||
MFEwHQYDVR0OBBYEFILL8V+fAtMnccWKGAdkx2Dh/v/TMB8GA1UdIwQYMBaAFILL
|
||||
8V+fAtMnccWKGAdkx2Dh/v/TMA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwID
|
||||
SAAwRQIgKDLAG8OWK6GF5HV4kmWz3kp2V3yVsNK2V9Lw3dSE+YsCIQCK1EEBvuqc
|
||||
0ncZV4ETVnOY23PWFOMk1VwN2aoTi5n++Q==
|
||||
-----END CERTIFICATE-----
|
||||
Reference in New Issue
Block a user