mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-03-27 03:41:50 +01:00
Check aggregate exception during startup (#235)
This commit is contained in:
35
src/WireMock.Net/Exceptions/WireMockException.cs
Normal file
35
src/WireMock.Net/Exceptions/WireMockException.cs
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace WireMock.Exceptions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// WireMockException
|
||||||
|
/// </summary>
|
||||||
|
/// <seealso cref="Exception" />
|
||||||
|
public class WireMockException : Exception
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="WireMockException"/> class.
|
||||||
|
/// </summary>
|
||||||
|
public WireMockException()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="WireMockException"/> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="message">The message that describes the error.</param>
|
||||||
|
public WireMockException(string message) : base(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="WireMockException"/> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="message">The message.</param>
|
||||||
|
/// <param name="inner">The inner.</param>
|
||||||
|
public WireMockException(string message, Exception inner) : base(message, inner)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using WireMock.Exceptions;
|
||||||
using WireMock.Handlers;
|
using WireMock.Handlers;
|
||||||
using WireMock.Logging;
|
using WireMock.Logging;
|
||||||
using WireMock.Matchers;
|
using WireMock.Matchers;
|
||||||
@@ -213,21 +214,27 @@ namespace WireMock.Server
|
|||||||
#endif
|
#endif
|
||||||
Ports = _httpServer.Ports;
|
Ports = _httpServer.Ports;
|
||||||
|
|
||||||
_httpServer.StartAsync();
|
var startTask = _httpServer.StartAsync();
|
||||||
|
|
||||||
using (var ctsStartTimeout = new CancellationTokenSource(settings.StartTimeout))
|
using (var ctsStartTimeout = new CancellationTokenSource(settings.StartTimeout))
|
||||||
{
|
{
|
||||||
while (!_httpServer.IsStarted)
|
while (!_httpServer.IsStarted)
|
||||||
{
|
{
|
||||||
// Throw out exception if service start fails
|
// Throw exception if service start fails
|
||||||
if (_httpServer.RunningException != null)
|
if (_httpServer.RunningException != null)
|
||||||
{
|
{
|
||||||
throw new Exception($"Service start failed with error: {_httpServer.RunningException.Message}", _httpServer.RunningException);
|
throw new WireMockException($"Service start failed with error: {_httpServer.RunningException.Message}", _httpServer.RunningException);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Respect start timeout setting by throwing TimeoutException
|
|
||||||
if (ctsStartTimeout.IsCancellationRequested)
|
if (ctsStartTimeout.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
|
// In case of an aggregate exception, throw the exception.
|
||||||
|
if (startTask.Exception != null)
|
||||||
|
{
|
||||||
|
throw new WireMockException($"Service start failed with error: {startTask.Exception.Message}", startTask.Exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Else throw TimeoutException
|
||||||
throw new TimeoutException($"Service start timed out after {TimeSpan.FromMilliseconds(settings.StartTimeout)}");
|
throw new TimeoutException($"Service start timed out after {TimeSpan.FromMilliseconds(settings.StartTimeout)}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user