(t *testing.T)
| 66 | } |
| 67 | |
| 68 | func (s) TestNewClientWithMultipleBackendsNotSendingServerPreface(t *testing.T) { |
| 69 | lis1, err := net.Listen("tcp", "localhost:0") |
| 70 | if err != nil { |
| 71 | t.Fatalf("Error while listening. Err: %v", err) |
| 72 | } |
| 73 | defer lis1.Close() |
| 74 | lis1Addr := resolver.Address{Addr: lis1.Addr().String()} |
| 75 | lis1Done := make(chan struct{}) |
| 76 | // 1st listener accepts the connection and immediately closes it. |
| 77 | go func() { |
| 78 | defer close(lis1Done) |
| 79 | conn, err := lis1.Accept() |
| 80 | if err != nil { |
| 81 | t.Errorf("Error while accepting. Err: %v", err) |
| 82 | return |
| 83 | } |
| 84 | conn.Close() |
| 85 | }() |
| 86 | |
| 87 | lis2, err := net.Listen("tcp", "localhost:0") |
| 88 | if err != nil { |
| 89 | t.Fatalf("Error while listening. Err: %v", err) |
| 90 | } |
| 91 | defer lis2.Close() |
| 92 | lis2Done := make(chan struct{}) |
| 93 | lis2Addr := resolver.Address{Addr: lis2.Addr().String()} |
| 94 | // 2nd listener should get a connection attempt since the first one failed. |
| 95 | go func() { |
| 96 | defer close(lis2Done) |
| 97 | _, err := lis2.Accept() // Closing the client will clean up this conn. |
| 98 | if err != nil { |
| 99 | t.Errorf("Error while accepting. Err: %v", err) |
| 100 | return |
| 101 | } |
| 102 | }() |
| 103 | |
| 104 | r := manual.NewBuilderWithScheme("whatever") |
| 105 | r.InitialState(resolver.State{Addresses: []resolver.Address{lis1Addr, lis2Addr}}) |
| 106 | client, err := NewClient(r.Scheme()+":///test.server", WithTransportCredentials(insecure.NewCredentials()), WithResolvers(r)) |
| 107 | if err != nil { |
| 108 | t.Fatalf("grpc.NewClient() failed: %v", err) |
| 109 | } |
| 110 | client.Connect() |
| 111 | defer client.Close() |
| 112 | timeout := time.After(5 * time.Second) |
| 113 | select { |
| 114 | case <-timeout: |
| 115 | t.Fatal("timed out waiting for server 1 to finish") |
| 116 | case <-lis1Done: |
| 117 | } |
| 118 | select { |
| 119 | case <-timeout: |
| 120 | t.Fatal("timed out waiting for server 2 to finish") |
| 121 | case <-lis2Done: |
| 122 | } |
| 123 | } |
| 124 | |
| 125 | // 1. Client connects to a server that doesn't send preface. |
nothing calls this directly
no test coverage detected