@@ -82,14 +82,10 @@ func (s *assertingMultiService) PingList(ping *pb.PingRequest, stream pb.MultiSe
82
82
// Send user trailers and headers.
83
83
stream .SendHeader (metadata .Pairs (serverHeaderMdKey , "I like turtles." )) //nolint: errcheck
84
84
for i := 0 ; i < countListResponses ; i ++ {
85
- stream .Send (& pb.MultiPingReply { //nolint: errcheck
86
- Response : []* pb.MultiPingResponse {
87
- {
88
- Value : ping .Value ,
89
- Counter : int32 (i ),
90
- Server : s .server ,
91
- },
92
- },
85
+ stream .Send (& pb.MultiPingResponse { //nolint: errcheck
86
+ Value : ping .Value ,
87
+ Counter : int32 (i ),
88
+ Server : s .server ,
93
89
})
94
90
}
95
91
stream .SetTrailer (metadata .Pairs (serverTrailerMdKey , "I like ending turtles." )) //nolint: errcheck
@@ -107,14 +103,10 @@ func (s *assertingMultiService) PingStream(stream pb.MultiService_PingStreamServ
107
103
require .NoError (s .t , err , "can't fail reading stream" )
108
104
return err
109
105
}
110
- pong := & pb.MultiPingReply {
111
- Response : []* pb.MultiPingResponse {
112
- {
113
- Value : ping .Value ,
114
- Counter : counter ,
115
- Server : s .server ,
116
- },
117
- },
106
+ pong := & pb.MultiPingResponse {
107
+ Value : ping .Value ,
108
+ Counter : counter ,
109
+ Server : s .server ,
118
110
}
119
111
if err := stream .Send (pong ); err != nil {
120
112
require .NoError (s .t , err , "can't fail sending back a pong" )
@@ -162,7 +154,17 @@ func (b *assertingBackend) GetConnection(ctx context.Context) (context.Context,
162
154
return outCtx , b .conn , err
163
155
}
164
156
165
- func (b * assertingBackend ) AppendInfo (resp []byte ) ([]byte , error ) {
157
+ func (b * assertingBackend ) AppendInfo (streaming bool , resp []byte ) ([]byte , error ) {
158
+ payload , err := proto .Marshal (& pb.ResponseMetadataPrepender {
159
+ Metadata : & pb.ResponseMetadata {
160
+ Hostname : fmt .Sprintf ("server%d" , b .i ),
161
+ },
162
+ })
163
+
164
+ if streaming {
165
+ return append (resp , payload ... ), err
166
+ }
167
+
166
168
// decode protobuf embedded header
167
169
typ , n1 := proto .DecodeVarint (resp )
168
170
_ , n2 := proto .DecodeVarint (resp [n1 :]) // length
@@ -171,12 +173,6 @@ func (b *assertingBackend) AppendInfo(resp []byte) ([]byte, error) {
171
173
return nil , fmt .Errorf ("unexpected message format: %d" , typ )
172
174
}
173
175
174
- payload , err := proto .Marshal (& pb.ResponseMetadataPrepender {
175
- Metadata : & pb.ResponseMetadata {
176
- Hostname : fmt .Sprintf ("server%d" , b .i ),
177
- },
178
- })
179
-
180
176
// cut off embedded message header
181
177
resp = resp [n1 + n2 :]
182
178
// build new embedded message header
@@ -186,8 +182,8 @@ func (b *assertingBackend) AppendInfo(resp []byte) ([]byte, error) {
186
182
return append (resp , payload ... ), err
187
183
}
188
184
189
- func (b * assertingBackend ) BuildError (err error ) ([]byte , error ) {
190
- return proto . Marshal ( & pb.EmptyReply {
185
+ func (b * assertingBackend ) BuildError (streaming bool , err error ) ([]byte , error ) {
186
+ resp := & pb.EmptyReply {
191
187
Response : []* pb.EmptyResponse {
192
188
{
193
189
Metadata : & pb.ResponseMetadata {
@@ -196,7 +192,13 @@ func (b *assertingBackend) BuildError(err error) ([]byte, error) {
196
192
},
197
193
},
198
194
},
199
- })
195
+ }
196
+
197
+ if streaming {
198
+ return proto .Marshal (resp .Response [0 ])
199
+ }
200
+
201
+ return proto .Marshal (resp )
200
202
}
201
203
202
204
type ProxyOne2ManySuite struct {
@@ -350,8 +352,7 @@ func (s *ProxyOne2ManySuite) TestPingStreamErrorPropagatesAppError() {
350
352
resp , err := stream .Recv ()
351
353
s .Require ().NoError (err )
352
354
353
- s .Assert ().Len (resp .Response , 1 )
354
- s .Assert ().Equal ("rpc error: code = FailedPrecondition desc = Userspace error." , resp .Response [0 ].Metadata .UpstreamError )
355
+ s .Assert ().Equal ("rpc error: code = FailedPrecondition desc = Userspace error." , resp .Metadata .UpstreamError )
355
356
}
356
357
357
358
require .NoError (s .T (), stream .CloseSend (), "no error on close send" )
@@ -373,8 +374,7 @@ func (s *ProxyOne2ManySuite) TestPingStreamConnError() {
373
374
resp , err := stream .Recv ()
374
375
s .Require ().NoError (err )
375
376
376
- s .Assert ().Len (resp .Response , 1 )
377
- s .Assert ().Equal ("rpc error: code = Unavailable desc = backend connection failed" , resp .Response [0 ].Metadata .UpstreamError )
377
+ s .Assert ().Equal ("rpc error: code = Unavailable desc = backend connection failed" , resp .Metadata .UpstreamError )
378
378
379
379
_ , err = stream .Recv ()
380
380
require .Equal (s .T (), io .EOF , err , "stream should close with io.EOF, meaning OK" )
@@ -407,11 +407,10 @@ func (s *ProxyOne2ManySuite) TestPingStream_FullDuplexWorks() {
407
407
resp , err := stream .Recv ()
408
408
s .Require ().NoError (err )
409
409
410
- s .Assert ().Len (resp .Response , 1 )
411
- s .Assert ().EqualValues (i , resp .Response [0 ].Counter , "ping roundtrip must succeed with the correct id" )
412
- s .Assert ().EqualValues (resp .Response [0 ].Metadata .Hostname , resp .Response [0 ].Server )
410
+ s .Assert ().EqualValues (i , resp .Counter , "ping roundtrip must succeed with the correct id" )
411
+ s .Assert ().EqualValues (resp .Metadata .Hostname , resp .Server )
413
412
414
- delete (expectedUpstreams , resp .Response [ 0 ]. Metadata .Hostname )
413
+ delete (expectedUpstreams , resp .Metadata .Hostname )
415
414
}
416
415
417
416
s .Require ().Empty (expectedUpstreams )
@@ -464,24 +463,24 @@ func (s *ProxyOne2ManySuite) TestPingStream_FullDuplexConcurrent() {
464
463
return err
465
464
}
466
465
467
- if len ( resp .Response ) != 1 {
468
- return fmt .Errorf ("single response expected: %d " , len ( resp . Response ) )
466
+ if resp .Metadata == nil {
467
+ return fmt .Errorf ("response metadata expected: %v " , resp )
469
468
}
470
469
471
- if resp .Response [ 0 ]. Metadata .Hostname != resp . Response [ 0 ] .Server {
472
- return fmt .Errorf ("mismatch on host metadata: %v != %v" , resp .Response [ 0 ]. Metadata .Hostname , resp . Response [ 0 ] .Server )
470
+ if resp .Metadata .Hostname != resp .Server {
471
+ return fmt .Errorf ("mismatch on host metadata: %v != %v" , resp .Metadata .Hostname , resp .Server )
473
472
}
474
473
475
- expectedCounter , ok := expectedUpstreams [resp .Response [ 0 ]. Server ]
474
+ expectedCounter , ok := expectedUpstreams [resp .Server ]
476
475
if ! ok {
477
- return fmt .Errorf ("unexpected host: %v" , resp .Response [ 0 ]. Server )
476
+ return fmt .Errorf ("unexpected host: %v" , resp .Server )
478
477
}
479
478
480
- if expectedCounter != resp .Response [ 0 ]. Counter {
481
- return fmt .Errorf ("unexpected counter value: %d != %d" , expectedCounter , resp .Response [ 0 ]. Counter )
479
+ if expectedCounter != resp .Counter {
480
+ return fmt .Errorf ("unexpected counter value: %d != %d" , expectedCounter , resp .Counter )
482
481
}
483
482
484
- expectedUpstreams [resp .Response [ 0 ]. Server ]++
483
+ expectedUpstreams [resp .Server ]++
485
484
}
486
485
487
486
return nil
0 commit comments