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

Method start

internal/transport/transport_test.go:392–551  ·  view source on GitHub ↗

start starts server. Other goroutines should block on s.readyChan for further operations.

(t *testing.T, port int, serverConfig *ServerConfig, ht hType)

Source from the content-addressed store, hash-verified

390
391// start starts server. Other goroutines should block on s.readyChan for further operations.
392func (s *server) start(t *testing.T, port int, serverConfig *ServerConfig, ht hType) {
393 var err error
394 if port == 0 {
395 s.lis, err = net.Listen("tcp", "localhost:0")
396 } else {
397 s.lis, err = net.Listen("tcp", "localhost:"+strconv.Itoa(port))
398 }
399 if err != nil {
400 s.startedErr <- fmt.Errorf("failed to listen: %v", err)
401 return
402 }
403 _, p, err := net.SplitHostPort(s.lis.Addr().String())
404 if err != nil {
405 s.startedErr <- fmt.Errorf("failed to parse listener address: %v", err)
406 return
407 }
408 s.port = p
409 s.conns = make(map[ServerTransport]net.Conn)
410 s.startedErr <- nil
411 wg := sync.WaitGroup{}
412 defer func() {
413 wg.Wait()
414 close(s.servingTasksDone)
415 }()
416
417 for {
418 conn, err := s.lis.Accept()
419 if err != nil {
420 return
421 }
422 rawConn := conn
423 if serverConfig.MaxStreams == 0 {
424 serverConfig.MaxStreams = math.MaxUint32
425 }
426 transport, err := NewServerTransport(conn, serverConfig)
427 if err != nil {
428 return
429 }
430 s.mu.Lock()
431 if s.conns == nil {
432 s.mu.Unlock()
433 transport.Close(errors.New("s.conns is nil"))
434 return
435 }
436 s.conns[transport] = rawConn
437 h := &testStreamHandler{t: transport.(*http2Server)}
438 s.h = h
439 s.mu.Unlock()
440 ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
441 defer cancel()
442 wg.Add(1)
443 switch ht {
444 case notifyCall:
445 go func() {
446 transport.HandleStreams(ctx, h.handleStreamAndNotify)
447 wg.Done()
448 }()
449 case suspended:

Callers 1

setUpServerOnlyFunction · 0.45

Calls 15

CloseMethod · 0.95
HandleStreamsMethod · 0.95
handleStreamMisbehaveMethod · 0.95
handleStreamDelayReadMethod · 0.95
handleStreamPingPongMethod · 0.95
handleStreamMethod · 0.95
NewServerTransportFunction · 0.85
WaitMethod · 0.80

Tested by

no test coverage detected