MCPcopy
hub / github.com/grpc/grpc-go / FullDuplexCall

Method FullDuplexCall

test/end2end_test.go:308–370  ·  view source on GitHub ↗
(stream testgrpc.TestService_FullDuplexCallServer)

Source from the content-addressed store, hash-verified

306}
307
308func (s *testServer) FullDuplexCall(stream testgrpc.TestService_FullDuplexCallServer) error {
309 md, ok := metadata.FromIncomingContext(stream.Context())
310 if ok {
311 if s.setAndSendHeader {
312 if err := stream.SetHeader(md); err != nil {
313 return status.Errorf(status.Code(err), "%v.SetHeader(_, %v) = %v, want <nil>", stream, md, err)
314 }
315 if err := stream.SendHeader(testMetadata2); err != nil {
316 return status.Errorf(status.Code(err), "%v.SendHeader(_, %v) = %v, want <nil>", stream, testMetadata2, err)
317 }
318 } else if s.setHeaderOnly {
319 if err := stream.SetHeader(md); err != nil {
320 return status.Errorf(status.Code(err), "%v.SetHeader(_, %v) = %v, want <nil>", stream, md, err)
321 }
322 if err := stream.SetHeader(testMetadata2); err != nil {
323 return status.Errorf(status.Code(err), "%v.SetHeader(_, %v) = %v, want <nil>", stream, testMetadata2, err)
324 }
325 } else {
326 if err := stream.SendHeader(md); err != nil {
327 return status.Errorf(status.Code(err), "%v.SendHeader(%v) = %v, want %v", stream, md, err, nil)
328 }
329 }
330 stream.SetTrailer(testTrailerMetadata)
331 if s.multipleSetTrailer {
332 stream.SetTrailer(testTrailerMetadata2)
333 }
334 }
335 for {
336 in, err := stream.Recv()
337 if err == io.EOF {
338 // read done.
339 return nil
340 }
341 if err != nil {
342 // to facilitate testSvrWriteStatusEarlyWrite
343 if status.Code(err) == codes.ResourceExhausted {
344 return status.Errorf(codes.Internal, "fake error for test testSvrWriteStatusEarlyWrite. true error: %s", err.Error())
345 }
346 return err
347 }
348 cs := in.GetResponseParameters()
349 for _, c := range cs {
350 if us := c.GetIntervalUs(); us > 0 {
351 time.Sleep(time.Duration(us) * time.Microsecond)
352 }
353
354 payload, err := newPayload(in.GetResponseType(), c.GetSize())
355 if err != nil {
356 return err
357 }
358
359 if err := stream.Send(&testpb.StreamingOutputCallResponse{
360 Payload: payload,
361 }); err != nil {
362 // to facilitate testSvrWriteStatusEarlyWrite
363 if status.Code(err) == codes.ResourceExhausted {
364 return status.Errorf(codes.Internal, "fake error for test testSvrWriteStatusEarlyWrite. true error: %s", err.Error())
365 }

Callers

nothing calls this directly

Calls 15

FromIncomingContextFunction · 0.92
newPayloadFunction · 0.85
CodeMethod · 0.80
GetResponseParametersMethod · 0.80
GetIntervalUsMethod · 0.80
GetSizeMethod · 0.80
ContextMethod · 0.65
SetHeaderMethod · 0.65
ErrorfMethod · 0.65
SendHeaderMethod · 0.65
SetTrailerMethod · 0.65
RecvMethod · 0.65

Tested by

no test coverage detected