Fix unhandled exception when target is unavailable (#469)

* wip

* fix

* 31

* known
This commit is contained in:
Stef Heyenrath
2020-05-18 15:07:30 +02:00
committed by GitHub
parent 7033d85e3a
commit d67a160144
6 changed files with 53 additions and 19 deletions

View File

@@ -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

View File

@@ -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: |

View File

@@ -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
{ {

View File

@@ -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
{ {

View File

@@ -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>

View File

@@ -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");
}
} }
} }