1
+ // Copyright © WireMock.Net
2
+
3
+ #if NET6_0_OR_GREATER
4
+ using System ;
5
+ using System . IO ;
6
+ using System . Net . Http ;
7
+ using System . Text ;
8
+ using System . Threading . Tasks ;
9
+ using FluentAssertions ;
10
+ using Greet ;
11
+ using Grpc . Net . Client ;
12
+ using WireMock . Constants ;
13
+ using WireMock . Net . Testcontainers ;
14
+ using Xunit ;
15
+
16
+ namespace WireMock . Net . Tests . Testcontainers ;
17
+
18
+ public partial class TestcontainersTests
19
+ {
20
+ [ Fact ]
21
+ public async Task WireMockContainer_Build_TestGrpc_ProtoDefinitionFromJson_UsingGrpcGeneratedClient ( )
22
+ {
23
+ var wireMockContainer = await Given_WireMockContainerIsStartedForHttpAndGrpc ( ) ;
24
+
25
+ await Given_ProtoBufMappingIsAddedViaAdminInterfaceAsync ( wireMockContainer ) ;
26
+
27
+ var adminClient = wireMockContainer . CreateWireMockAdminClient ( ) ;
28
+
29
+ var mappingModels = await adminClient . GetMappingsAsync ( ) ;
30
+ mappingModels . Should ( ) . NotBeNull ( ) . And . HaveCount ( 1 ) ;
31
+
32
+ try
33
+ {
34
+ var x = await When_GrpcClient_Calls_SayHelloAsync ( wireMockContainer ) ;
35
+ }
36
+ catch ( Exception e )
37
+ {
38
+ var logs = await wireMockContainer . GetLogsAsync ( DateTime . MinValue ) ;
39
+
40
+ int tttt = 9 ;
41
+ throw ;
42
+ }
43
+
44
+ var reply = await When_GrpcClient_Calls_SayHelloAsync ( wireMockContainer ) ;
45
+
46
+ Then_ReplyMessage_Should_BeCorrect ( reply ) ;
47
+
48
+ await wireMockContainer . StopAsync ( ) ;
49
+ }
50
+
51
+ private static async Task < WireMockContainer > Given_WireMockContainerIsStartedForHttpAndGrpc ( )
52
+ {
53
+ var wireMockContainer = new WireMockContainerBuilder ( )
54
+ . WithAutoRemove ( true )
55
+ . WithCleanUp ( true )
56
+ . AddUrl ( "grpc://*:9090" )
57
+ . Build ( ) ;
58
+
59
+ await wireMockContainer . StartAsync ( ) ;
60
+
61
+ return wireMockContainer ;
62
+ }
63
+
64
+ private static async Task Given_ProtoBufMappingIsAddedViaAdminInterfaceAsync ( WireMockContainer wireMockContainer )
65
+ {
66
+ var mappingsJson = ReadMappingFile ( "protobuf-mapping-1.json" ) ;
67
+
68
+ using var httpClient = wireMockContainer . CreateClient ( ) ;
69
+
70
+ var result = await httpClient . PostAsync ( "/__admin/mappings" , new StringContent ( mappingsJson , Encoding . UTF8 , WireMockConstants . ContentTypeJson ) ) ;
71
+ result . EnsureSuccessStatusCode ( ) ;
72
+ }
73
+
74
+ private static async Task < HelloReply > When_GrpcClient_Calls_SayHelloAsync ( WireMockContainer wireMockContainer )
75
+ {
76
+ var address = wireMockContainer . GetPublicUrls ( ) [ 9090 ] ;
77
+ var channel = GrpcChannel . ForAddress ( address ) ;
78
+
79
+ var client = new Greeter . GreeterClient ( channel ) ;
80
+
81
+ return await client . SayHelloAsync ( new HelloRequest { Name = "stef" } ) ;
82
+ }
83
+
84
+ private static void Then_ReplyMessage_Should_BeCorrect ( HelloReply reply )
85
+ {
86
+ reply . Message . Should ( ) . Be ( "hello stef POST" ) ;
87
+ }
88
+
89
+ private static string ReadMappingFile ( string filename )
90
+ {
91
+ return File . ReadAllText ( Path . Combine ( Directory . GetCurrentDirectory ( ) , "__admin" , "mappings" , filename ) ) ;
92
+ }
93
+ }
94
+ #endif
0 commit comments