Added GET /__admin/mappings/{guid}

This commit is contained in:
Stef Heyenrath
2017-01-29 13:34:52 +01:00
parent 1f33e6a671
commit 4fd05b0fd4
4 changed files with 83 additions and 33 deletions

View File

@@ -17,6 +17,9 @@ namespace WireMock.Server
/// </summary>
public partial class FluentMockServer
{
private const string AdminMappings = "/__admin/mappings";
private const string AdminRequests = "/__admin/requests";
private readonly JsonSerializerSettings _settings = new JsonSerializerSettings
{
Formatting = Formatting.None,
@@ -25,10 +28,27 @@ namespace WireMock.Server
private void InitAdmin()
{
Given(Request.Create().WithUrl("/__admin/mappings").UsingGet()).RespondWith(new DynamicResponseProvider(MappingsGet));
Given(Request.Create().WithUrl("/__admin/mappings").UsingPost()).RespondWith(new DynamicResponseProvider(MappingsPost));
// __admin/mappings
Given(Request.Create().WithUrl(AdminMappings).UsingGet()).RespondWith(new DynamicResponseProvider(MappingsGet));
Given(Request.Create().WithUrl(AdminMappings).UsingPost()).RespondWith(new DynamicResponseProvider(MappingsPost));
Given(Request.Create().WithUrl("/__admin/requests").UsingGet()).RespondWith(new DynamicResponseProvider(RequestsGet));
// __admin/mappings/{guid}
var guidPathMatcher = 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})$");
Given(Request.Create().WithPath(guidPathMatcher).UsingGet()).RespondWith(new DynamicResponseProvider(MappingGet));
// __admin/requests
Given(Request.Create().WithUrl(AdminRequests).UsingGet()).RespondWith(new DynamicResponseProvider(RequestsGet));
}
private ResponseMessage MappingGet(RequestMessage requestMessage)
{
Guid guid = Guid.Parse(requestMessage.Path.TrimStart(AdminMappings.ToCharArray()));
var mapping = Mappings.FirstOrDefault(m => !(m.Provider is DynamicResponseProvider) && m.Guid == guid);
var model = ToMappingModel(mapping);
return ToJson(model);
}
private ResponseMessage MappingsGet(RequestMessage requestMessage)
@@ -248,7 +268,7 @@ namespace WireMock.Server
switch (matcher.Name)
{
case "RegExMatcher":
case "RegexMatcher":
return new RegexMatcher(matcher.Pattern);
case "JsonPathMatcher":

View File

@@ -183,6 +183,13 @@ namespace WireMock.Server
{
lock (((ICollection)_mappings).SyncRoot)
{
// Check a mapping exists with the same GUI, if so, remove it first.
var existingMapping = _mappings.FirstOrDefault(m => m.Guid == mapping.Guid);
if (existingMapping != null)
{
_mappings.Remove(existingMapping);
}
_mappings.Add(mapping);
}
}
@@ -216,8 +223,8 @@ namespace WireMock.Server
try
{
var targetRoute = _mappings.FirstOrDefault(route => route.IsRequestHandled(request));
if (targetRoute == null)
var targetMapping = _mappings.FirstOrDefault(route => route.IsRequestHandled(request));
if (targetMapping == null)
{
response = new ResponseMessage
{
@@ -227,7 +234,7 @@ namespace WireMock.Server
}
else
{
response = await targetRoute.ResponseTo(request);
response = await targetMapping.ResponseTo(request);
}
}
catch (Exception ex)