18
18
import EchoImplementation
19
19
import EchoModel
20
20
@testable import GRPC
21
+ import NIOHPACK
21
22
import NIOPosix
22
23
import XCTest
23
24
@@ -27,6 +28,15 @@ class GRPCAsyncClientCallTests: GRPCTestCase {
27
28
private var server : Server ?
28
29
private var channel : ClientConnection ?
29
30
31
+ private static let OKInitialMetadata = HPACKHeaders ( [
32
+ ( " :status " , " 200 " ) ,
33
+ ( " content-type " , " application/grpc " ) ,
34
+ ] )
35
+
36
+ private static let OKTrailingMetadata = HPACKHeaders ( [
37
+ ( " grpc-status " , " 0 " ) ,
38
+ ] )
39
+
30
40
private func setUpServerAndChannel( ) throws -> ClientConnection {
31
41
let group = MultiThreadedEventLoopGroup ( numberOfThreads: 1 )
32
42
self . group = group
@@ -66,12 +76,15 @@ class GRPCAsyncClientCallTests: GRPCTestCase {
66
76
let channel = try self . setUpServerAndChannel ( )
67
77
let get : GRPCAsyncUnaryCall < Echo_EchoRequest , Echo_EchoResponse > = channel. makeAsyncUnaryCall (
68
78
path: " /echo.Echo/Get " ,
69
- request: . with { $0. text = " get " } ,
79
+ request: . with { $0. text = " holt " } ,
70
80
callOptions: . init( )
71
81
)
72
82
83
+ await assertThat ( try await get. initialMetadata, . is( . equalTo( Self . OKInitialMetadata) ) )
73
84
await assertThat ( try await get. response, . doesNotThrow( ) )
85
+ await assertThat ( try await get. trailingMetadata, . is( . equalTo( Self . OKTrailingMetadata) ) )
74
86
await assertThat ( await get. status, . hasCode( . ok) )
87
+ print ( try await get. trailingMetadata)
75
88
} }
76
89
77
90
func testAsyncClientStreamingCall( ) throws { XCTAsyncTest {
@@ -87,7 +100,9 @@ class GRPCAsyncClientCallTests: GRPCTestCase {
87
100
}
88
101
try await collect. sendEnd ( )
89
102
103
+ await assertThat ( try await collect. initialMetadata, . is( . equalTo( Self . OKInitialMetadata) ) )
90
104
await assertThat ( try await collect. response, . doesNotThrow( ) )
105
+ await assertThat ( try await collect. trailingMetadata, . is( . equalTo( Self . OKTrailingMetadata) ) )
91
106
await assertThat ( await collect. status, . hasCode( . ok) )
92
107
} }
93
108
@@ -100,9 +115,12 @@ class GRPCAsyncClientCallTests: GRPCTestCase {
100
115
callOptions: . init( )
101
116
)
102
117
118
+ await assertThat ( try await expand. initialMetadata, . is( . equalTo( Self . OKInitialMetadata) ) )
119
+
103
120
let numResponses = try await expand. responses. map { _ in 1 } . reduce ( 0 , + )
104
121
105
122
await assertThat ( numResponses, . is( . equalTo( 3 ) ) )
123
+ await assertThat ( try await expand. trailingMetadata, . is( . equalTo( Self . OKTrailingMetadata) ) )
106
124
await assertThat ( await expand. status, . hasCode( . ok) )
107
125
} }
108
126
@@ -122,6 +140,7 @@ class GRPCAsyncClientCallTests: GRPCTestCase {
122
140
let numResponses = try await update. responses. map { _ in 1 } . reduce ( 0 , + )
123
141
124
142
await assertThat ( numResponses, . is( . equalTo( 3 ) ) )
143
+ await assertThat ( try await update. trailingMetadata, . is( . equalTo( Self . OKTrailingMetadata) ) )
125
144
await assertThat ( await update. status, . hasCode( . ok) )
126
145
} }
127
146
@@ -133,6 +152,8 @@ class GRPCAsyncClientCallTests: GRPCTestCase {
133
152
callOptions: . init( )
134
153
)
135
154
155
+ await assertThat ( try await update. initialMetadata, . is( . equalTo( Self . OKInitialMetadata) ) )
156
+
136
157
var responseStreamIterator = update. responses. makeAsyncIterator ( )
137
158
for word in [ " boyle " , " jeffers " , " holt " ] {
138
159
try await update. sendMessage ( . with { $0. text = word } )
@@ -143,6 +164,7 @@ class GRPCAsyncClientCallTests: GRPCTestCase {
143
164
144
165
await assertThat ( try await responseStreamIterator. next ( ) , . is( . nil ( ) ) )
145
166
167
+ await assertThat ( try await update. trailingMetadata, . is( . equalTo( Self . OKTrailingMetadata) ) )
146
168
await assertThat ( await update. status, . hasCode( . ok) )
147
169
} }
148
170
@@ -154,6 +176,8 @@ class GRPCAsyncClientCallTests: GRPCTestCase {
154
176
callOptions: . init( )
155
177
)
156
178
179
+ await assertThat ( try await update. initialMetadata, . is( . equalTo( Self . OKInitialMetadata) ) )
180
+
157
181
actor TestResults {
158
182
static var numResponses = 0
159
183
static var numRequests = 0
@@ -178,6 +202,7 @@ class GRPCAsyncClientCallTests: GRPCTestCase {
178
202
}
179
203
await assertThat ( TestResults . numRequests, . is( . equalTo( 3 ) ) )
180
204
await assertThat ( TestResults . numResponses, . is( . equalTo( 3 ) ) )
205
+ await assertThat ( try await update. trailingMetadata, . is( . equalTo( Self . OKTrailingMetadata) ) )
181
206
await assertThat ( await update. status, . hasCode( . ok) )
182
207
} }
183
208
}
0 commit comments