Skip to content

Commit

Permalink
.
Browse files Browse the repository at this point in the history
  • Loading branch information
StefH committed Jan 31, 2025
1 parent f9d2e7e commit 8c88939
Show file tree
Hide file tree
Showing 11 changed files with 110 additions and 24 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
</PropertyGroup>

<PropertyGroup>
<VersionPrefix>1.7.1</VersionPrefix>
<VersionPrefix>1.7.2-preview-01</VersionPrefix>
<PackageIcon>WireMock.Net-Logo.png</PackageIcon>
<PackageProjectUrl>https://github.com/WireMock-Net/WireMock.Net</PackageProjectUrl>
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
Expand Down
11 changes: 9 additions & 2 deletions src/WireMock.Net.Testcontainers/WireMockContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@
using JetBrains.Annotations;
using Microsoft.Extensions.Logging;
using RestEase;
using Stef.Validation;
using WireMock.Client;
using WireMock.Client.Extensions;
using WireMock.Http;
using WireMock.Net.Testcontainers.Utils;
using WireMock.Util;
using Stef.Validation;

namespace WireMock.Net.Testcontainers;

Expand Down Expand Up @@ -222,7 +222,14 @@ private async Task CallAdditionalActionsAfterStartedAsync()
Logger.LogInformation("Adding ProtoDefinition {Id}", kvp.Key);
foreach (var protoDefinition in kvp.Value)
{
await _adminApi!.AddProtoDefinitionAsync(kvp.Key, protoDefinition);
try
{
await _adminApi!.AddProtoDefinitionAsync(kvp.Key, protoDefinition);
}
catch (Exception ex)
{
Logger.LogWarning(ex, "Error adding ProtoDefinition '{Id}'.", kvp.Key);
}
}
}
}
Expand Down
17 changes: 17 additions & 0 deletions src/WireMock.Net.Testcontainers/WireMockContainerBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,23 @@ public WireMockContainerBuilder AddUrl(string url)
return WithPortBinding(port, true);
}

/// <summary>
/// Add a Grpc ProtoDefinition at server-level.
/// </summary>
/// <param name="id">Unique identifier for the ProtoDefinition.</param>
/// <param name="protoDefinition">The ProtoDefinition as text.</param>
/// <returns><see cref="WireMockContainerBuilder"/></returns>
[PublicAPI]
public WireMockContainerBuilder AddProtoDefinition(string id, params string[] protoDefinition)
{
Guard.NotNullOrWhiteSpace(id);
Guard.NotNullOrEmpty(protoDefinition);

DockerResourceConfiguration.AddProtoDefinition(id, protoDefinition);

return this;
}

private WireMockContainerBuilder WithCommand(string param, bool value)
{
return !value ? this : WithCommand($"{param} true");
Expand Down
10 changes: 8 additions & 2 deletions src/WireMock.Net/Server/WireMockServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -602,8 +602,14 @@ public WireMockServer AddProtoDefinition(string id, params string[] protoDefinit

_settings.ProtoDefinitions ??= new Dictionary<string, string[]>();

// _settings.ProtoDefinitions[id] = protoDefinition;
_settings.ProtoDefinitions[id] = _settings.ProtoDefinitions[id].Union(protoDefinition).ToArray();
if (_settings.ProtoDefinitions.TryGetValue(id, out var existingProtoDefinitions))
{
_settings.ProtoDefinitions[id] = existingProtoDefinitions.Union(protoDefinition).ToArray();
}
else
{
_settings.ProtoDefinitions[id] = protoDefinition;
}

return this;
}
Expand Down
10 changes: 10 additions & 0 deletions test/WireMock.Net.Tests/Constants.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Copyright © WireMock.Net

namespace WireMock.Net.Tests;

internal static class Constants
{
internal const int NumStaticMappings = 10;

internal const int NumAdminMappings = 36;
}
40 changes: 34 additions & 6 deletions test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.Grpc.cs
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,9 @@ public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls2()
[Fact]
public async Task WireMockContainer_Build_Grpc_ProtoDefinitionFromJson_UsingGrpcGeneratedClient()
{
var wireMockContainer = await Given_WireMockContainerIsStartedForHttpAndGrpc();
var wireMockContainer = await Given_WireMockContainerIsStartedForHttpAndGrpcAsync();

await Given_ProtoBufMappingIsAddedViaAdminInterfaceAsync(wireMockContainer);
await Given_ProtoBufMappingIsAddedViaAdminInterfaceAsync(wireMockContainer, "protobuf-mapping-1.json");

var reply = await When_GrpcClient_Calls_SayHelloAsync(wireMockContainer);

Expand All @@ -140,22 +140,50 @@ public async Task WireMockContainer_Build_Grpc_ProtoDefinitionFromJson_UsingGrpc
await wireMockContainer.StopAsync();
}

private static async Task<WireMockContainer> Given_WireMockContainerIsStartedForHttpAndGrpc()
[Fact]
public async Task WireMockContainer_Build_Grpc_ProtoDefinitionAtServerLevel_UsingGrpcGeneratedClient()
{
var wireMockContainer = await Given_WireMockContainerWithProtodefinitionAtServerLevelIsStartedForHttpAndGrpcAsync();

await Given_ProtoBufMappingIsAddedViaAdminInterfaceAsync(wireMockContainer, "protobuf-mapping-4.json");

var reply = await When_GrpcClient_Calls_SayHelloAsync(wireMockContainer);

Then_ReplyMessage_Should_BeCorrect(reply);

await wireMockContainer.StopAsync();
}

private static async Task<WireMockContainer> Given_WireMockContainerIsStartedForHttpAndGrpcAsync()
{
var wireMockContainer = new WireMockContainerBuilder()
.WithAutoRemove(true)
.WithCleanUp(true)
.AddUrl("grpc://*:9090")
.Build();

await wireMockContainer.StartAsync();

return wireMockContainer;
}

private static async Task<WireMockContainer> Given_WireMockContainerWithProtodefinitionAtServerLevelIsStartedForHttpAndGrpcAsync()
{
var wireMockContainer = new WireMockContainerBuilder()
.WithAutoRemove(true)
.WithCleanUp(true)
.AddUrl("grpc://*:9090")
.AddProtoDefinition("my-greeter", ReadFile("greet.proto"))
.Build();

await wireMockContainer.StartAsync();

return wireMockContainer;
}

private static async Task Given_ProtoBufMappingIsAddedViaAdminInterfaceAsync(WireMockContainer wireMockContainer)
private static async Task Given_ProtoBufMappingIsAddedViaAdminInterfaceAsync(WireMockContainer wireMockContainer, string filename)
{
var mappingsJson = ReadMappingFile("protobuf-mapping-1.json");
var mappingsJson = ReadFile(filename);

using var httpClient = wireMockContainer.CreateClient();

Expand All @@ -178,7 +206,7 @@ private static void Then_ReplyMessage_Should_BeCorrect(HelloReply reply)
reply.Message.Should().Be("hello stef POST");
}

private static string ReadMappingFile(string filename)
private static string ReadFile(string filename)
{
return File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "__admin", "mappings", filename));
}
Expand Down
3 changes: 3 additions & 0 deletions test/WireMock.Net.Tests/WireMock.Net.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,9 @@
<None Update="__admin\mappings\*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="__admin\mappings\*.proto">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="__admin\mappings\subdirectory\*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
Expand Down
8 changes: 3 additions & 5 deletions test/WireMock.Net.Tests/WireMockServer.Admin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ namespace WireMock.Net.Tests;

public class WireMockServerAdminTests
{
private const int NumStaticMappings = 10;

private static string GetCurrentFolder()
{
return Directory.GetCurrentDirectory();
Expand All @@ -40,8 +38,8 @@ public void WireMockServer_Admin_ResetMappings()
string folder = Path.Combine(GetCurrentFolder(), "__admin", "mappings");
server.ReadStaticMappings(folder);

Check.That(server.Mappings).HasSize(NumStaticMappings);
Check.That(server.MappingModels).HasSize(NumStaticMappings);
Check.That(server.Mappings).HasSize(Constants.NumStaticMappings);
Check.That(server.MappingModels).HasSize(Constants.NumStaticMappings);

// Act
server.ResetMappings();
Expand Down Expand Up @@ -220,7 +218,7 @@ public void WireMockServer_Admin_ReadStaticMappings()
server.ReadStaticMappings(folder);

var mappings = server.Mappings.ToArray();
Check.That(mappings).HasSize(NumStaticMappings);
Check.That(mappings).HasSize(Constants.NumStaticMappings);

server.Stop();
}
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 @@ -119,7 +119,7 @@ public async Task WireMockServer_Proxy_AdminTrue_With_SaveMapping_Is_True_And_Sa
}

// Assert
server.Mappings.Should().HaveCount(37);
server.Mappings.Should().HaveCount(Constants.NumAdminMappings + 2);
}

[Fact]
Expand Down
10 changes: 3 additions & 7 deletions test/WireMock.Net.Tests/WireMockServer.Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,6 @@ public void WireMockServer_WireMockServerSettings_StartAdminInterfaceFalse_Basic
[Fact]
public void WireMockServer_WireMockServerSettings_PriorityFromAllAdminMappingsIsLow_When_StartAdminInterface_IsTrue()
{
const int count = 35;

// Assign and Act
var server = WireMockServer.Start(new WireMockServerSettings
{
Expand All @@ -85,15 +83,13 @@ public void WireMockServer_WireMockServerSettings_PriorityFromAllAdminMappingsIs

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

[Fact]
public void WireMockServer_WireMockServerSettings_ProxyAndRecordSettings_ProxyPriority_IsMinus2000000_When_StartAdminInterface_IsTrue()
{
const int count = 36;

// Assign and Act
var server = WireMockServer.Start(new WireMockServerSettings
{
Expand All @@ -106,9 +102,9 @@ public void WireMockServer_WireMockServerSettings_ProxyAndRecordSettings_ProxyPr

// Assert
server.Mappings.Should().NotBeNull();
server.Mappings.Should().HaveCount(count);
server.Mappings.Should().HaveCount(Constants.NumAdminMappings + 1);

server.Mappings.Count(m => m.Priority == WireMockConstants.AdminPriority).Should().Be(count - 1);
server.Mappings.Count(m => m.Priority == WireMockConstants.AdminPriority).Should().Be(Constants.NumAdminMappings);
server.Mappings.Count(m => m.Priority == WireMockConstants.ProxyPriority).Should().Be(1);
}

Expand Down
21 changes: 21 additions & 0 deletions test/WireMock.Net.Tests/__admin/mappings/greet.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
syntax = "proto3";

package greet;

service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
string name = 1;
}

message HelloReply {
string message = 1;
enum PhoneType {
none = 0;
mobile = 1;
home = 2;
}
PhoneType phoneType = 2;
}

0 comments on commit 8c88939

Please sign in to comment.