diff --git a/src/WireMock.Net/Admin/Settings/SettingsModel.cs b/src/WireMock.Net/Admin/Settings/SettingsModel.cs
new file mode 100644
index 00000000..7e20ef54
--- /dev/null
+++ b/src/WireMock.Net/Admin/Settings/SettingsModel.cs
@@ -0,0 +1,18 @@
+namespace WireMock.Admin.Settings
+{
+ ///
+ /// Settings
+ ///
+ public class SettingsModel
+ {
+ ///
+ /// Gets or sets the global delay in milliseconds.
+ ///
+ public int? GlobalProcessingDelay { get; set; }
+
+ ///
+ /// Gets or sets if partial mapping is allowed.
+ ///
+ public bool? AllowPartialMapping { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs
index 9e3d2f95..2610aa44 100644
--- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs
+++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs
@@ -7,6 +7,7 @@ using Newtonsoft.Json;
using SimMetrics.Net;
using WireMock.Admin.Mappings;
using WireMock.Admin.Requests;
+using WireMock.Admin.Settings;
using WireMock.Logging;
using WireMock.Matchers;
using WireMock.Matchers.Request;
@@ -25,6 +26,7 @@ namespace WireMock.Server
private const string AdminMappingsFolder = @"\__admin\mappings\";
private const string AdminMappings = "/__admin/mappings";
private const string AdminRequests = "/__admin/requests";
+ private const string AdminSettings = "/__admin/settings";
private readonly RegexMatcher _adminMappingsGuidPathMatcher = new RegexMatcher(@"^\/__admin\/mappings\/(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$");
private readonly RegexMatcher _adminRequestsGuidPathMatcher = new RegexMatcher(@"^\/__admin\/requests\/(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$");
@@ -48,6 +50,11 @@ namespace WireMock.Server
private void InitAdmin()
{
+ // __admin/settings
+ Given(Request.Create().WithPath(AdminSettings).UsingGet()).RespondWith(new DynamicResponseProvider(SettingsGet));
+ Given(Request.Create().WithPath(AdminSettings).UsingVerb("PUT", "POST")).RespondWith(new DynamicResponseProvider(SettingsUpdate));
+
+
// __admin/mappings
Given(Request.Create().WithPath(AdminMappings).UsingGet()).RespondWith(new DynamicResponseProvider(MappingsGet));
Given(Request.Create().WithPath(AdminMappings).UsingPost()).RespondWith(new DynamicResponseProvider(MappingsPost));
@@ -77,6 +84,32 @@ namespace WireMock.Server
Given(Request.Create().WithPath(_adminRequestsGuidPathMatcher).UsingDelete()).RespondWith(new DynamicResponseProvider(RequestDelete));
}
+ #region Settings
+ private ResponseMessage SettingsGet(RequestMessage requestMessage)
+ {
+ var model = new SettingsModel
+ {
+ AllowPartialMapping = _allowPartialMapping,
+ GlobalProcessingDelay = _requestProcessingDelay?.Milliseconds
+ };
+
+ return ToJson(model);
+ }
+
+ private ResponseMessage SettingsUpdate(RequestMessage requestMessage)
+ {
+ var settings = JsonConvert.DeserializeObject(requestMessage.Body);
+
+ if (settings.AllowPartialMapping != null)
+ _allowPartialMapping = settings.AllowPartialMapping.Value;
+
+ if (settings.GlobalProcessingDelay != null)
+ _requestProcessingDelay = TimeSpan.FromMilliseconds(settings.GlobalProcessingDelay.Value);
+
+ return new ResponseMessage { Body = "Settings updated" };
+ }
+ #endregion Settings
+
#region Mapping/{guid}
private ResponseMessage MappingGet(RequestMessage requestMessage)
{
diff --git a/src/WireMock.Net/Server/FluentMockServer.cs b/src/WireMock.Net/Server/FluentMockServer.cs
index 6abb300b..5133abc1 100644
--- a/src/WireMock.Net/Server/FluentMockServer.cs
+++ b/src/WireMock.Net/Server/FluentMockServer.cs
@@ -32,7 +32,7 @@ namespace WireMock.Server
private readonly object _syncRoot = new object();
- private TimeSpan _requestProcessingDelay = TimeSpan.Zero;
+ private TimeSpan? _requestProcessingDelay;
private bool _allowPartialMapping;
@@ -272,7 +272,7 @@ namespace WireMock.Server
/// The delay.
///
[PublicAPI]
- public void AddRequestProcessingDelay(TimeSpan delay)
+ public void AddGlobalProcessingDelay(TimeSpan delay)
{
lock (_syncRoot)
{
@@ -357,7 +357,7 @@ namespace WireMock.Server
{
lock (_syncRoot)
{
- Task.Delay(_requestProcessingDelay).Wait();
+ Task.Delay(_requestProcessingDelay.Value).Wait();
}
}
diff --git a/test/WireMock.Net.Tests/FluentMockServerTests.cs b/test/WireMock.Net.Tests/FluentMockServerTests.cs
index 4949c229..fe15f4b5 100644
--- a/test/WireMock.Net.Tests/FluentMockServerTests.cs
+++ b/test/WireMock.Net.Tests/FluentMockServerTests.cs
@@ -267,7 +267,7 @@ namespace WireMock.Net.Tests
{
// given
_server = FluentMockServer.Start();
- _server.AddRequestProcessingDelay(TimeSpan.FromMilliseconds(200));
+ _server.AddGlobalProcessingDelay(TimeSpan.FromMilliseconds(200));
_server
.Given(Request.Create().WithPath("/*"))
.RespondWith(Response.Create().WithBody(@"{ msg: ""Hello world!""}"));