mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-01-11 21:10:32 +01:00
Fix Grpc tests (#1401)
* Fix some Grpc tests * await Task.Delay(1000); * ports
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
#if NET6_0_OR_GREATER
|
#if NET6_0_OR_GREATER
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@@ -12,6 +13,7 @@ using Greet;
|
|||||||
using Grpc.Net.Client;
|
using Grpc.Net.Client;
|
||||||
using WireMock.Constants;
|
using WireMock.Constants;
|
||||||
using WireMock.Net.Testcontainers;
|
using WireMock.Net.Testcontainers;
|
||||||
|
using WireMock.Util;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace WireMock.Net.Tests.Testcontainers;
|
namespace WireMock.Net.Tests.Testcontainers;
|
||||||
@@ -21,19 +23,22 @@ public partial class TestcontainersTests
|
|||||||
[Fact]
|
[Fact]
|
||||||
public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls1()
|
public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls1()
|
||||||
{
|
{
|
||||||
// Act
|
// Arrange
|
||||||
var adminUsername = $"username_{Guid.NewGuid()}";
|
var adminUsername = $"username_{Guid.NewGuid()}";
|
||||||
var adminPassword = $"password_{Guid.NewGuid()}";
|
var adminPassword = $"password_{Guid.NewGuid()}";
|
||||||
|
var port = PortUtils.FindFreeTcpPort();
|
||||||
|
|
||||||
|
// Act
|
||||||
var wireMockContainer = new WireMockContainerBuilder()
|
var wireMockContainer = new WireMockContainerBuilder()
|
||||||
.WithAdminUserNameAndPassword(adminUsername, adminPassword)
|
.WithAdminUserNameAndPassword(adminUsername, adminPassword)
|
||||||
.WithCommand("--UseHttp2")
|
.WithCommand("--UseHttp2")
|
||||||
.WithCommand("--Urls", "http://*:80 grpc://*:9090")
|
.WithCommand("--Urls", $"http://*:80 grpc://*:{port}")
|
||||||
.WithPortBinding(9090, true)
|
.WithPortBinding(port, true)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await wireMockContainer.StartAsync().ConfigureAwait(false);
|
await wireMockContainer.StartAsync();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
using (new AssertionScope())
|
using (new AssertionScope())
|
||||||
@@ -53,10 +58,10 @@ public partial class TestcontainersTests
|
|||||||
var httpUrl = wireMockContainer.GetMappedPublicUrl(80);
|
var httpUrl = wireMockContainer.GetMappedPublicUrl(80);
|
||||||
httpUrl.Should().StartWith("http://");
|
httpUrl.Should().StartWith("http://");
|
||||||
|
|
||||||
var grpcPort = wireMockContainer.GetMappedPublicPort(9090);
|
var grpcPort = wireMockContainer.GetMappedPublicPort(port);
|
||||||
grpcPort.Should().BeGreaterThan(0);
|
grpcPort.Should().BeGreaterThan(0);
|
||||||
|
|
||||||
var grpcUrl = wireMockContainer.GetMappedPublicUrl(9090);
|
var grpcUrl = wireMockContainer.GetMappedPublicUrl(port);
|
||||||
grpcUrl.Should().StartWith("http://");
|
grpcUrl.Should().StartWith("http://");
|
||||||
|
|
||||||
var adminClient = wireMockContainer.CreateWireMockAdminClient();
|
var adminClient = wireMockContainer.CreateWireMockAdminClient();
|
||||||
@@ -74,19 +79,22 @@ public partial class TestcontainersTests
|
|||||||
[Fact]
|
[Fact]
|
||||||
public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls2()
|
public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls2()
|
||||||
{
|
{
|
||||||
// Act
|
// Arrange
|
||||||
var adminUsername = $"username_{Guid.NewGuid()}";
|
var adminUsername = $"username_{Guid.NewGuid()}";
|
||||||
var adminPassword = $"password_{Guid.NewGuid()}";
|
var adminPassword = $"password_{Guid.NewGuid()}";
|
||||||
|
var ports = PortUtils.FindFreeTcpPorts(3);
|
||||||
|
|
||||||
|
// Act
|
||||||
var wireMockContainer = new WireMockContainerBuilder()
|
var wireMockContainer = new WireMockContainerBuilder()
|
||||||
.WithAdminUserNameAndPassword(adminUsername, adminPassword)
|
.WithAdminUserNameAndPassword(adminUsername, adminPassword)
|
||||||
.AddUrl("http://*:8080")
|
.AddUrl($"http://*:{ports[0]}")
|
||||||
.AddUrl("grpc://*:9090")
|
.AddUrl($"grpc://*:{ports[1]}")
|
||||||
.AddUrl("grpc://*:9091")
|
.AddUrl($"grpc://*:{ports[2]}")
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await wireMockContainer.StartAsync().ConfigureAwait(false);
|
await wireMockContainer.StartAsync();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
using (new AssertionScope())
|
using (new AssertionScope())
|
||||||
@@ -100,7 +108,7 @@ public partial class TestcontainersTests
|
|||||||
var urls = wireMockContainer.GetPublicUrls();
|
var urls = wireMockContainer.GetPublicUrls();
|
||||||
urls.Should().HaveCount(4);
|
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);
|
var publicPort = wireMockContainer.GetMappedPublicPort(internalPort);
|
||||||
publicPort.Should().BeGreaterThan(0);
|
publicPort.Should().BeGreaterThan(0);
|
||||||
@@ -163,8 +171,9 @@ public partial class TestcontainersTests
|
|||||||
|
|
||||||
private static async Task<WireMockContainer> Given_WireMockContainerIsStartedForHttpAndGrpcAsync()
|
private static async Task<WireMockContainer> Given_WireMockContainerIsStartedForHttpAndGrpcAsync()
|
||||||
{
|
{
|
||||||
|
var port = PortUtils.FindFreeTcpPort();
|
||||||
var wireMockContainer = new WireMockContainerBuilder()
|
var wireMockContainer = new WireMockContainerBuilder()
|
||||||
.AddUrl("grpc://*:9090")
|
.AddUrl($"grpc://*:{port}")
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
await wireMockContainer.StartAsync();
|
await wireMockContainer.StartAsync();
|
||||||
@@ -174,8 +183,9 @@ public partial class TestcontainersTests
|
|||||||
|
|
||||||
private static async Task<WireMockContainer> Given_WireMockContainerWithProtoDefinitionAtServerLevelIsStartedForHttpAndGrpcAsync()
|
private static async Task<WireMockContainer> Given_WireMockContainerWithProtoDefinitionAtServerLevelIsStartedForHttpAndGrpcAsync()
|
||||||
{
|
{
|
||||||
|
var port = PortUtils.FindFreeTcpPort();
|
||||||
var wireMockContainer = new WireMockContainerBuilder()
|
var wireMockContainer = new WireMockContainerBuilder()
|
||||||
.AddUrl("grpc://*:9090")
|
.AddUrl($"grpc://*:{port}")
|
||||||
.AddProtoDefinition("my-greeter", ReadFile("greet.proto"))
|
.AddProtoDefinition("my-greeter", ReadFile("greet.proto"))
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
@@ -186,8 +196,9 @@ public partial class TestcontainersTests
|
|||||||
|
|
||||||
private static async Task<WireMockContainer> Given_WireMockContainerWithProtoDefinitionAtServerLevelWithWatchStaticMappingsIsStartedForHttpAndGrpcAsync()
|
private static async Task<WireMockContainer> Given_WireMockContainerWithProtoDefinitionAtServerLevelWithWatchStaticMappingsIsStartedForHttpAndGrpcAsync()
|
||||||
{
|
{
|
||||||
|
var port = PortUtils.FindFreeTcpPort();
|
||||||
var wireMockContainer = new WireMockContainerBuilder()
|
var wireMockContainer = new WireMockContainerBuilder()
|
||||||
.AddUrl("grpc://*:9090")
|
.AddUrl($"grpc://*:{port}")
|
||||||
.AddProtoDefinition("my-greeter", ReadFile("greet.proto"))
|
.AddProtoDefinition("my-greeter", ReadFile("greet.proto"))
|
||||||
.WithMappings(Path.Combine(Directory.GetCurrentDirectory(), "__admin", "mappings"))
|
.WithMappings(Path.Combine(Directory.GetCurrentDirectory(), "__admin", "mappings"))
|
||||||
.Build();
|
.Build();
|
||||||
@@ -206,12 +217,12 @@ public partial class TestcontainersTests
|
|||||||
var result = await httpClient.PostAsync("/__admin/mappings", new StringContent(mappingsJson, Encoding.UTF8, WireMockConstants.ContentTypeJson));
|
var result = await httpClient.PostAsync("/__admin/mappings", new StringContent(mappingsJson, Encoding.UTF8, WireMockConstants.ContentTypeJson));
|
||||||
result.EnsureSuccessStatusCode();
|
result.EnsureSuccessStatusCode();
|
||||||
|
|
||||||
await Task.Delay(1000);
|
await Task.Delay(5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task<HelloReply> When_GrpcClient_Calls_SayHelloAsync(WireMockContainer wireMockContainer)
|
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 channel = GrpcChannel.ForAddress(address);
|
||||||
|
|
||||||
var client = new Greeter.GreeterClient(channel);
|
var client = new Greeter.GreeterClient(channel);
|
||||||
|
|||||||
Reference in New Issue
Block a user