Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 29 additions & 18 deletions test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.Grpc.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#if NET6_0_OR_GREATER
using System;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
Expand All @@ -12,6 +13,7 @@
using Grpc.Net.Client;
using WireMock.Constants;
using WireMock.Net.Testcontainers;
using WireMock.Util;
using Xunit;

namespace WireMock.Net.Tests.Testcontainers;
Expand All @@ -21,19 +23,22 @@ public partial class TestcontainersTests
[Fact]
public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls1()
{
// Act
// Arrange
var adminUsername = $"username_{Guid.NewGuid()}";
var adminPassword = $"password_{Guid.NewGuid()}";
var port = PortUtils.FindFreeTcpPort();

// Act
var wireMockContainer = new WireMockContainerBuilder()
.WithAdminUserNameAndPassword(adminUsername, adminPassword)
.WithCommand("--UseHttp2")
.WithCommand("--Urls", "http://*:80 grpc://*:9090")
.WithPortBinding(9090, true)
.WithCommand("--Urls", $"http://*:80 grpc://*:{port}")
.WithPortBinding(port, true)
.Build();

try
{
await wireMockContainer.StartAsync().ConfigureAwait(false);
await wireMockContainer.StartAsync();

// Assert
using (new AssertionScope())
Expand All @@ -53,10 +58,10 @@ public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls1()
var httpUrl = wireMockContainer.GetMappedPublicUrl(80);
httpUrl.Should().StartWith("http://");

var grpcPort = wireMockContainer.GetMappedPublicPort(9090);
var grpcPort = wireMockContainer.GetMappedPublicPort(port);
grpcPort.Should().BeGreaterThan(0);

var grpcUrl = wireMockContainer.GetMappedPublicUrl(9090);
var grpcUrl = wireMockContainer.GetMappedPublicUrl(port);
grpcUrl.Should().StartWith("http://");

var adminClient = wireMockContainer.CreateWireMockAdminClient();
Expand All @@ -74,19 +79,22 @@ public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls1()
[Fact]
public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls2()
{
// Act
// Arrange
var adminUsername = $"username_{Guid.NewGuid()}";
var adminPassword = $"password_{Guid.NewGuid()}";
var ports = PortUtils.FindFreeTcpPorts(3);

// Act
var wireMockContainer = new WireMockContainerBuilder()
.WithAdminUserNameAndPassword(adminUsername, adminPassword)
.AddUrl("http://*:8080")
.AddUrl("grpc://*:9090")
.AddUrl("grpc://*:9091")
.AddUrl($"http://*:{ports[0]}")
.AddUrl($"grpc://*:{ports[1]}")
.AddUrl($"grpc://*:{ports[2]}")
.Build();

try
{
await wireMockContainer.StartAsync().ConfigureAwait(false);
await wireMockContainer.StartAsync();

// Assert
using (new AssertionScope())
Expand All @@ -100,7 +108,7 @@ public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls2()
var urls = wireMockContainer.GetPublicUrls();
urls.Should().HaveCount(4);

foreach (var internalPort in new[] { 80, 8080, 9090, 9091 })
foreach (var internalPort in new[] { ports[0], ports[1], ports[2], 80 })
{
var publicPort = wireMockContainer.GetMappedPublicPort(internalPort);
publicPort.Should().BeGreaterThan(0);
Expand Down Expand Up @@ -163,8 +171,9 @@ public async Task WireMockContainer_Build_Grpc_ProtoDefinitionAtServerLevel_Usin

private static async Task<WireMockContainer> Given_WireMockContainerIsStartedForHttpAndGrpcAsync()
{
var port = PortUtils.FindFreeTcpPort();
var wireMockContainer = new WireMockContainerBuilder()
.AddUrl("grpc://*:9090")
.AddUrl($"grpc://*:{port}")
.Build();

await wireMockContainer.StartAsync();
Expand All @@ -174,8 +183,9 @@ private static async Task<WireMockContainer> Given_WireMockContainerIsStartedFor

private static async Task<WireMockContainer> Given_WireMockContainerWithProtoDefinitionAtServerLevelIsStartedForHttpAndGrpcAsync()
{
var port = PortUtils.FindFreeTcpPort();
var wireMockContainer = new WireMockContainerBuilder()
.AddUrl("grpc://*:9090")
.AddUrl($"grpc://*:{port}")
.AddProtoDefinition("my-greeter", ReadFile("greet.proto"))
.Build();

Expand All @@ -186,8 +196,9 @@ private static async Task<WireMockContainer> Given_WireMockContainerWithProtoDef

private static async Task<WireMockContainer> Given_WireMockContainerWithProtoDefinitionAtServerLevelWithWatchStaticMappingsIsStartedForHttpAndGrpcAsync()
{
var port = PortUtils.FindFreeTcpPort();
var wireMockContainer = new WireMockContainerBuilder()
.AddUrl("grpc://*:9090")
.AddUrl($"grpc://*:{port}")
.AddProtoDefinition("my-greeter", ReadFile("greet.proto"))
.WithMappings(Path.Combine(Directory.GetCurrentDirectory(), "__admin", "mappings"))
.Build();
Expand All @@ -206,12 +217,12 @@ private static async Task Given_ProtoBufMappingIsAddedViaAdminInterfaceAsync(Wir
var result = await httpClient.PostAsync("/__admin/mappings", new StringContent(mappingsJson, Encoding.UTF8, WireMockConstants.ContentTypeJson));
result.EnsureSuccessStatusCode();

await Task.Delay(1000);
await Task.Delay(5000);
}

private static async Task<HelloReply> When_GrpcClient_Calls_SayHelloAsync(WireMockContainer wireMockContainer)
{
var address = wireMockContainer.GetPublicUrls()[9090];
var address = wireMockContainer.GetPublicUrls().First(x => x.Key != 80).Value;
var channel = GrpcChannel.ForAddress(address);

var client = new Greeter.GreeterClient(channel);
Expand Down
Loading