Skip to content

Commit

Permalink
Add "/__admin/health" endpoint (#1112)
Browse files Browse the repository at this point in the history
  • Loading branch information
StefH committed Jun 3, 2024
1 parent f76ea1d commit 17f5ab5
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 6 deletions.
14 changes: 13 additions & 1 deletion src/WireMock.Net.RestClient/IWireMockAdminApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,24 @@ public interface IWireMockAdminApi
[Header("Authorization")]
AuthenticationHeaderValue Authorization { get; set; }

/// <summary>
/// Get health status.
/// </summary>
/// <param name="cancellationToken">The optional cancellationToken.</param>
/// <returns>
/// Returns HttpStatusCode <c>200</c> with a value <c>Healthy</c> to indicate that WireMock.Net is healthy.
/// Else it returns HttpStatusCode <c>404</c>.
/// </returns>
[Get("health")]
[AllowAnyStatusCode]
Task<string> GetHealthAsync(CancellationToken cancellationToken = default);

/// <summary>
/// Get the settings.
/// </summary>
/// <returns>SettingsModel</returns>
[Get("settings")]
Task<SettingsModel> GetSettingsAsync();
Task<SettingsModel> GetSettingsAsync(CancellationToken cancellationToken = default);

/// <summary>
/// Update the settings.
Expand Down
22 changes: 21 additions & 1 deletion src/WireMock.Net/Server/WireMockServer.Admin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public partial class WireMockServer
{
private const int EnhancedFileSystemWatcherTimeoutMs = 1000;
private const string AdminFiles = "/__admin/files";
private const string AdminHealth = "/__admin/health";
private const string AdminMappings = "/__admin/mappings";
private const string AdminMappingsCode = "/__admin/mappings/code";
private const string AdminMappingsWireMockOrg = "/__admin/mappings/wiremock.org";
Expand All @@ -54,6 +55,9 @@ public partial class WireMockServer
#region InitAdmin
private void InitAdmin()
{
// __admin/health
Given(Request.Create().WithPath(AdminHealth).UsingGet()).AtPriority(WireMockConstants.AdminPriority).RespondWith(new DynamicResponseProvider(HealthGet));

// __admin/settings
Given(Request.Create().WithPath(AdminSettings).UsingGet()).AtPriority(WireMockConstants.AdminPriority).RespondWith(new DynamicResponseProvider(SettingsGet));
Given(Request.Create().WithPath(AdminSettings).UsingMethod("PUT", "POST").WithHeader(HttpKnownHeaderNames.ContentType, AdminRequestContentTypeJson)).AtPriority(WireMockConstants.AdminPriority).RespondWith(new DynamicResponseProvider(SettingsUpdate));
Expand Down Expand Up @@ -218,6 +222,22 @@ public bool ReadStaticMappingAndAddOrUpdate(string path)
}
#endregion

#region Health
private static IResponseMessage HealthGet(IRequestMessage requestMessage)
{
return new ResponseMessage
{
BodyData = new BodyData
{
DetectedBodyType = BodyType.String,
BodyAsString = "Healthy"
},
StatusCode = (int)HttpStatusCode.OK,
Headers = new Dictionary<string, WireMockList<string>> { { HttpKnownHeaderNames.ContentType, new WireMockList<string>(WireMockConstants.ContentTypeTextPlain) } }
};
}
#endregion

#region Settings
private IResponseMessage SettingsGet(IRequestMessage requestMessage)
{
Expand Down Expand Up @@ -830,4 +850,4 @@ private static T[] DeserializeObjectToArray<T>(object value)
var singleResult = ((JObject)value).ToObject<T>();
return new[] { singleResult! };
}
}
}
12 changes: 12 additions & 0 deletions test/WireMock.Net.Tests/AdminApi/WireMockAdminApiTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,18 @@ static WireMockAdminApiTests()
VerifyNewtonsoftJson.Enable(VerifySettings);
}

[Fact]
public async Task IWireMockAdminApi_GetHealthAsync()
{
// Arrange
var server = WireMockServer.StartWithAdminInterface();
var api = RestClient.For<IWireMockAdminApi>(server.Urls[0]);

// Act
var status = await api.GetHealthAsync().ConfigureAwait(false);
status.Should().Be("Healthy");
}

[Fact]
public async Task IWireMockAdminApi_GetSettingsAsync()
{
Expand Down
2 changes: 1 addition & 1 deletion test/WireMock.Net.Tests/WireMockServer.Proxy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ public async Task WireMockServer_Proxy_AdminTrue_With_SaveMapping_Is_True_And_Sa
}

// Assert
server.Mappings.Should().HaveCount(35);
server.Mappings.Should().HaveCount(36);
}

[Fact]
Expand Down
6 changes: 3 additions & 3 deletions test/WireMock.Net.Tests/WireMockServer.Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public void WireMockServer_WireMockServerSettings_PriorityFromAllAdminMappingsIs

// Assert
server.Mappings.Should().NotBeNull();
server.Mappings.Should().HaveCount(33);
server.Mappings.Should().HaveCount(34);
server.Mappings.All(m => m.Priority == WireMockConstants.AdminPriority).Should().BeTrue();
}

Expand All @@ -100,9 +100,9 @@ public void WireMockServer_WireMockServerSettings_ProxyAndRecordSettings_ProxyPr

// Assert
server.Mappings.Should().NotBeNull();
server.Mappings.Should().HaveCount(34);
server.Mappings.Should().HaveCount(35);

server.Mappings.Count(m => m.Priority == WireMockConstants.AdminPriority).Should().Be(33);
server.Mappings.Count(m => m.Priority == WireMockConstants.AdminPriority).Should().Be(34);
server.Mappings.Count(m => m.Priority == WireMockConstants.ProxyPriority).Should().Be(1);
}

Expand Down

0 comments on commit 17f5ab5

Please sign in to comment.