mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-01-11 21:10:32 +01:00
Fix unhandled exception when target is unavailable (#469)
* wip * fix * 31 * known
This commit is contained in:
@@ -6,7 +6,7 @@ variables:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- script: |
|
- script: |
|
||||||
dotnet test ./test/WireMock.Net.Tests/WireMock.Net.Tests.csproj --configuration $(buildConfiguration) --framework netcoreapp2.1 --logger trx
|
dotnet test ./test/WireMock.Net.Tests/WireMock.Net.Tests.csproj --configuration $(buildConfiguration) --framework netcoreapp3.1 --logger trx
|
||||||
- task: PublishTestResults@2
|
- task: PublishTestResults@2
|
||||||
inputs:
|
inputs:
|
||||||
testRunner: VSTest
|
testRunner: VSTest
|
||||||
|
|||||||
@@ -28,11 +28,11 @@ steps:
|
|||||||
displayName: Begin SonarScanner
|
displayName: Begin SonarScanner
|
||||||
condition: and(succeeded(), eq(variables['RUN_SONAR'], 'yes'))
|
condition: and(succeeded(), eq(variables['RUN_SONAR'], 'yes'))
|
||||||
|
|
||||||
# Build source, tests and run tests for net452 and netcoreapp2.1 (with coverage)
|
# Build source, tests and run tests for net452 and netcoreapp3.1 (with coverage)
|
||||||
- script: |
|
- script: |
|
||||||
dotnet test ./test/WireMock.Net.Tests/WireMock.Net.Tests.csproj --configuration Debug --framework net452
|
dotnet test ./test/WireMock.Net.Tests/WireMock.Net.Tests.csproj --configuration Debug --framework net452
|
||||||
dotnet test ./test/WireMock.Net.Tests/WireMock.Net.Tests.csproj --configuration Debug --framework netcoreapp2.1 --logger trx /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
|
dotnet test ./test/WireMock.Net.Tests/WireMock.Net.Tests.csproj --configuration Debug --framework netcoreapp3.1 --logger trx /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
|
||||||
displayName: 'Build source, tests and run tests for net452 and netcoreapp2.1 (with coverage)'
|
displayName: 'Build source, tests and run tests for net452 and netcoreapp3.1 (with coverage)'
|
||||||
|
|
||||||
# End SonarScanner
|
# End SonarScanner
|
||||||
- script: |
|
- script: |
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ namespace WireMock.Owin
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_options.Logger.Error($"Providing a Response for Mapping '{result?.Mapping?.Guid}' failed. HttpStatusCode set to 500. Exception: {ex}");
|
_options.Logger.Error($"Providing a Response for Mapping '{result?.Mapping?.Guid}' failed. HttpStatusCode set to 500. Exception: {ex}");
|
||||||
response = ResponseMessageBuilder.Create(JsonConvert.SerializeObject(ex), 500);
|
response = ResponseMessageBuilder.Create(ex.Message, 500);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,9 +2,8 @@
|
|||||||
using WireMock.Admin.Mappings;
|
using WireMock.Admin.Mappings;
|
||||||
using WireMock.Admin.Requests;
|
using WireMock.Admin.Requests;
|
||||||
using WireMock.Logging;
|
using WireMock.Logging;
|
||||||
using WireMock.Types;
|
|
||||||
using WireMock.ResponseBuilders;
|
using WireMock.ResponseBuilders;
|
||||||
using WireMock.Util;
|
using WireMock.Types;
|
||||||
|
|
||||||
namespace WireMock.Serialization
|
namespace WireMock.Serialization
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Authors>Stef Heyenrath</Authors>
|
<Authors>Stef Heyenrath</Authors>
|
||||||
<!--<TargetFrameworks>net452;netcoreapp2.1</TargetFrameworks>-->
|
<!--<TargetFrameworks>net452;netcoreapp2.1</TargetFrameworks>-->
|
||||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<AssemblyName>WireMock.Net.Tests</AssemblyName>
|
<AssemblyName>WireMock.Net.Tests</AssemblyName>
|
||||||
<PackageId>WireMock.Net.Tests</PackageId>
|
<PackageId>WireMock.Net.Tests</PackageId>
|
||||||
|
|||||||
@@ -5,7 +5,10 @@ using System.Net.Http;
|
|||||||
using System.Net.Http.Headers;
|
using System.Net.Http.Headers;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using FluentAssertions;
|
||||||
using NFluent;
|
using NFluent;
|
||||||
|
using WireMock.Admin.Mappings;
|
||||||
|
using WireMock.Logging;
|
||||||
using WireMock.Matchers.Request;
|
using WireMock.Matchers.Request;
|
||||||
using WireMock.RequestBuilders;
|
using WireMock.RequestBuilders;
|
||||||
using WireMock.ResponseBuilders;
|
using WireMock.ResponseBuilders;
|
||||||
@@ -50,7 +53,7 @@ namespace WireMock.Net.Tests
|
|||||||
public async Task WireMockServer_Proxy_Should_proxy_responses()
|
public async Task WireMockServer_Proxy_Should_proxy_responses()
|
||||||
{
|
{
|
||||||
// Assign
|
// Assign
|
||||||
string path = $"/prx_{Guid.NewGuid().ToString()}";
|
string path = $"/prx_{Guid.NewGuid()}";
|
||||||
var server = WireMockServer.Start();
|
var server = WireMockServer.Start();
|
||||||
server
|
server
|
||||||
.Given(Request.Create().WithPath(path))
|
.Given(Request.Create().WithPath(path))
|
||||||
@@ -76,7 +79,7 @@ namespace WireMock.Net.Tests
|
|||||||
public async Task WireMockServer_Proxy_Should_preserve_content_header_in_proxied_request()
|
public async Task WireMockServer_Proxy_Should_preserve_content_header_in_proxied_request()
|
||||||
{
|
{
|
||||||
// Assign
|
// Assign
|
||||||
string path = $"/prx_{Guid.NewGuid().ToString()}";
|
string path = $"/prx_{Guid.NewGuid()}";
|
||||||
var serverForProxyForwarding = WireMockServer.Start();
|
var serverForProxyForwarding = WireMockServer.Start();
|
||||||
serverForProxyForwarding
|
serverForProxyForwarding
|
||||||
.Given(Request.Create().WithPath(path))
|
.Given(Request.Create().WithPath(path))
|
||||||
@@ -123,7 +126,7 @@ namespace WireMock.Net.Tests
|
|||||||
public async Task WireMockServer_Proxy_Should_exclude_blacklisted_content_header_in_mapping()
|
public async Task WireMockServer_Proxy_Should_exclude_blacklisted_content_header_in_mapping()
|
||||||
{
|
{
|
||||||
// Assign
|
// Assign
|
||||||
string path = $"/prx_{Guid.NewGuid().ToString()}";
|
string path = $"/prx_{Guid.NewGuid()}";
|
||||||
var serverForProxyForwarding = WireMockServer.Start();
|
var serverForProxyForwarding = WireMockServer.Start();
|
||||||
serverForProxyForwarding
|
serverForProxyForwarding
|
||||||
.Given(Request.Create().WithPath(path))
|
.Given(Request.Create().WithPath(path))
|
||||||
@@ -165,7 +168,7 @@ namespace WireMock.Net.Tests
|
|||||||
public async Task WireMockServer_Proxy_Should_exclude_blacklisted_cookies_in_mapping()
|
public async Task WireMockServer_Proxy_Should_exclude_blacklisted_cookies_in_mapping()
|
||||||
{
|
{
|
||||||
// Assign
|
// Assign
|
||||||
string path = $"/prx_{Guid.NewGuid().ToString()}";
|
string path = $"/prx_{Guid.NewGuid()}";
|
||||||
var serverForProxyForwarding = WireMockServer.Start();
|
var serverForProxyForwarding = WireMockServer.Start();
|
||||||
serverForProxyForwarding
|
serverForProxyForwarding
|
||||||
.Given(Request.Create().WithPath(path))
|
.Given(Request.Create().WithPath(path))
|
||||||
@@ -214,7 +217,7 @@ namespace WireMock.Net.Tests
|
|||||||
public async Task WireMockServer_Proxy_Should_preserve_content_header_in_proxied_request_with_empty_content()
|
public async Task WireMockServer_Proxy_Should_preserve_content_header_in_proxied_request_with_empty_content()
|
||||||
{
|
{
|
||||||
// Assign
|
// Assign
|
||||||
string path = $"/prx_{Guid.NewGuid().ToString()}";
|
string path = $"/prx_{Guid.NewGuid()}";
|
||||||
var serverForProxyForwarding = WireMockServer.Start();
|
var serverForProxyForwarding = WireMockServer.Start();
|
||||||
serverForProxyForwarding
|
serverForProxyForwarding
|
||||||
.Given(Request.Create().WithPath(path))
|
.Given(Request.Create().WithPath(path))
|
||||||
@@ -246,7 +249,7 @@ namespace WireMock.Net.Tests
|
|||||||
public async Task WireMockServer_Proxy_Should_preserve_content_header_in_proxied_response()
|
public async Task WireMockServer_Proxy_Should_preserve_content_header_in_proxied_response()
|
||||||
{
|
{
|
||||||
// Assign
|
// Assign
|
||||||
string path = $"/prx_{Guid.NewGuid().ToString()}";
|
string path = $"/prx_{Guid.NewGuid()}";
|
||||||
var serverForProxyForwarding = WireMockServer.Start();
|
var serverForProxyForwarding = WireMockServer.Start();
|
||||||
serverForProxyForwarding
|
serverForProxyForwarding
|
||||||
.Given(Request.Create().WithPath(path))
|
.Given(Request.Create().WithPath(path))
|
||||||
@@ -277,7 +280,7 @@ namespace WireMock.Net.Tests
|
|||||||
public async Task WireMockServer_Proxy_Should_change_absolute_location_header_in_proxied_response()
|
public async Task WireMockServer_Proxy_Should_change_absolute_location_header_in_proxied_response()
|
||||||
{
|
{
|
||||||
// Assign
|
// Assign
|
||||||
string path = $"/prx_{Guid.NewGuid().ToString()}";
|
string path = $"/prx_{Guid.NewGuid()}";
|
||||||
var settings = new WireMockServerSettings { AllowPartialMapping = false };
|
var settings = new WireMockServerSettings { AllowPartialMapping = false };
|
||||||
|
|
||||||
var serverForProxyForwarding = WireMockServer.Start(settings);
|
var serverForProxyForwarding = WireMockServer.Start(settings);
|
||||||
@@ -310,7 +313,7 @@ namespace WireMock.Net.Tests
|
|||||||
public async Task WireMockServer_Proxy_Should_preserve_cookie_header_in_proxied_request()
|
public async Task WireMockServer_Proxy_Should_preserve_cookie_header_in_proxied_request()
|
||||||
{
|
{
|
||||||
// Assign
|
// Assign
|
||||||
string path = $"/prx_{Guid.NewGuid().ToString()}";
|
string path = $"/prx_{Guid.NewGuid()}";
|
||||||
var serverForProxyForwarding = WireMockServer.Start();
|
var serverForProxyForwarding = WireMockServer.Start();
|
||||||
serverForProxyForwarding
|
serverForProxyForwarding
|
||||||
.Given(Request.Create().WithPath(path))
|
.Given(Request.Create().WithPath(path))
|
||||||
@@ -379,7 +382,7 @@ namespace WireMock.Net.Tests
|
|||||||
public async Task WireMockServer_Proxy_Should_set_BodyAsJson_in_proxied_response()
|
public async Task WireMockServer_Proxy_Should_set_BodyAsJson_in_proxied_response()
|
||||||
{
|
{
|
||||||
// Assign
|
// Assign
|
||||||
string path = $"/prx_{Guid.NewGuid().ToString()}";
|
string path = $"/prx_{Guid.NewGuid()}";
|
||||||
var serverForProxyForwarding = WireMockServer.Start();
|
var serverForProxyForwarding = WireMockServer.Start();
|
||||||
serverForProxyForwarding
|
serverForProxyForwarding
|
||||||
.Given(Request.Create().WithPath(path))
|
.Given(Request.Create().WithPath(path))
|
||||||
@@ -410,7 +413,7 @@ namespace WireMock.Net.Tests
|
|||||||
public async Task WireMockServer_Proxy_Should_set_Body_in_multipart_proxied_response()
|
public async Task WireMockServer_Proxy_Should_set_Body_in_multipart_proxied_response()
|
||||||
{
|
{
|
||||||
// Assign
|
// Assign
|
||||||
string path = $"/prx_{Guid.NewGuid().ToString()}";
|
string path = $"/prx_{Guid.NewGuid()}";
|
||||||
var serverForProxyForwarding = WireMockServer.Start();
|
var serverForProxyForwarding = WireMockServer.Start();
|
||||||
serverForProxyForwarding
|
serverForProxyForwarding
|
||||||
.Given(Request.Create().WithPath(path))
|
.Given(Request.Create().WithPath(path))
|
||||||
@@ -440,7 +443,7 @@ namespace WireMock.Net.Tests
|
|||||||
public async Task WireMockServer_Proxy_Should_Not_overrule_AdminMappings()
|
public async Task WireMockServer_Proxy_Should_Not_overrule_AdminMappings()
|
||||||
{
|
{
|
||||||
// Assign
|
// Assign
|
||||||
string path = $"/prx_{Guid.NewGuid().ToString()}";
|
string path = $"/prx_{Guid.NewGuid()}";
|
||||||
var serverForProxyForwarding = WireMockServer.Start();
|
var serverForProxyForwarding = WireMockServer.Start();
|
||||||
serverForProxyForwarding
|
serverForProxyForwarding
|
||||||
.Given(Request.Create().WithPath(path))
|
.Given(Request.Create().WithPath(path))
|
||||||
@@ -482,5 +485,37 @@ namespace WireMock.Net.Tests
|
|||||||
string content2 = await response2.Content.ReadAsStringAsync();
|
string content2 = await response2.Content.ReadAsStringAsync();
|
||||||
Check.That(content2).IsEqualTo("[]");
|
Check.That(content2).IsEqualTo("[]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task WireMockServer_Proxy_WhenTargetIsNotAvailable_Should_Return_CorrectResponse()
|
||||||
|
{
|
||||||
|
// Assign
|
||||||
|
var settings = new WireMockServerSettings
|
||||||
|
{
|
||||||
|
ProxyAndRecordSettings = new ProxyAndRecordSettings
|
||||||
|
{
|
||||||
|
Url = $"http://error{Guid.NewGuid()}:12345"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var server = WireMockServer.Start(settings);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var requestMessage = new HttpRequestMessage
|
||||||
|
{
|
||||||
|
Method = HttpMethod.Get,
|
||||||
|
RequestUri = new Uri(server.Urls[0])
|
||||||
|
};
|
||||||
|
var httpClientHandler = new HttpClientHandler { AllowAutoRedirect = false };
|
||||||
|
var result = await new HttpClient(httpClientHandler).SendAsync(requestMessage);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
result.StatusCode.Should().Be(500);
|
||||||
|
|
||||||
|
var content = await result.Content.ReadAsStringAsync();
|
||||||
|
content.Should().Contain("known"); // On Linux it's "Name or service not known". On Windows it's "No such host is known.".
|
||||||
|
|
||||||
|
server.LogEntries.Should().HaveCount(1);
|
||||||
|
((StatusModel) server.LogEntries.First().ResponseMessage.BodyData.BodyAsJson).Status.Should().Contain("known");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user