Skip to content

Commit b83c044

Browse files
authored
client: move tests that rely on Dial to a separate file (#8707)
This PR only moves some tests around, does not make any changes to the tests. Moving tests that rely on the behavior of `Dial` to a separate file makes them easier to find and work with. I will be cleaning up these tests a little in a follow up PR, and will be adding a new test for #7686 RELEASE NOTES: none
1 parent c0de489 commit b83c044

File tree

3 files changed

+314
-278
lines changed

3 files changed

+314
-278
lines changed

clientconn_test.go

Lines changed: 0 additions & 258 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,6 @@ import (
3737
"google.golang.org/grpc/credentials"
3838
"google.golang.org/grpc/credentials/insecure"
3939
internalbackoff "google.golang.org/grpc/internal/backoff"
40-
"google.golang.org/grpc/internal/grpcsync"
41-
"google.golang.org/grpc/internal/grpctest"
42-
"google.golang.org/grpc/internal/transport"
43-
"google.golang.org/grpc/keepalive"
4440
"google.golang.org/grpc/resolver"
4541
"google.golang.org/grpc/resolver/manual"
4642
"google.golang.org/grpc/serviceconfig"
@@ -69,47 +65,6 @@ func parseCfg(r *manual.Resolver, s string) *serviceconfig.ParseResult {
6965
return scpr
7066
}
7167

72-
func (s) TestDialWithTimeout(t *testing.T) {
73-
lis, err := net.Listen("tcp", "localhost:0")
74-
if err != nil {
75-
t.Fatalf("Error while listening. Err: %v", err)
76-
}
77-
defer lis.Close()
78-
lisAddr := resolver.Address{Addr: lis.Addr().String()}
79-
lisDone := make(chan struct{})
80-
dialDone := make(chan struct{})
81-
// 1st listener accepts the connection and then does nothing
82-
go func() {
83-
defer close(lisDone)
84-
conn, err := lis.Accept()
85-
if err != nil {
86-
t.Errorf("Error while accepting. Err: %v", err)
87-
return
88-
}
89-
framer := http2.NewFramer(conn, conn)
90-
if err := framer.WriteSettings(http2.Setting{}); err != nil {
91-
t.Errorf("Error while writing settings. Err: %v", err)
92-
return
93-
}
94-
<-dialDone // Close conn only after dial returns.
95-
}()
96-
97-
r := manual.NewBuilderWithScheme("whatever")
98-
r.InitialState(resolver.State{Addresses: []resolver.Address{lisAddr}})
99-
client, err := Dial(r.Scheme()+":///test.server", WithTransportCredentials(insecure.NewCredentials()), WithResolvers(r), WithTimeout(5*time.Second))
100-
close(dialDone)
101-
if err != nil {
102-
t.Fatalf("Dial failed. Err: %v", err)
103-
}
104-
defer client.Close()
105-
timeout := time.After(1 * time.Second)
106-
select {
107-
case <-timeout:
108-
t.Fatal("timed out waiting for server to finish")
109-
case <-lisDone:
110-
}
111-
}
112-
11368
func (s) TestNewClientWithMultipleBackendsNotSendingServerPreface(t *testing.T) {
11469
lis1, err := net.Listen("tcp", "localhost:0")
11570
if err != nil {
@@ -167,97 +122,6 @@ func (s) TestNewClientWithMultipleBackendsNotSendingServerPreface(t *testing.T)
167122
}
168123
}
169124

170-
func (s) TestDialWaitsForServerSettings(t *testing.T) {
171-
lis, err := net.Listen("tcp", "localhost:0")
172-
if err != nil {
173-
t.Fatalf("Error while listening. Err: %v", err)
174-
}
175-
defer lis.Close()
176-
done := make(chan struct{})
177-
sent := make(chan struct{})
178-
dialDone := make(chan struct{})
179-
go func() { // Launch the server.
180-
defer func() {
181-
close(done)
182-
}()
183-
conn, err := lis.Accept()
184-
if err != nil {
185-
t.Errorf("Error while accepting. Err: %v", err)
186-
return
187-
}
188-
defer conn.Close()
189-
// Sleep for a little bit to make sure that Dial on client
190-
// side blocks until settings are received.
191-
time.Sleep(100 * time.Millisecond)
192-
framer := http2.NewFramer(conn, conn)
193-
close(sent)
194-
if err := framer.WriteSettings(http2.Setting{}); err != nil {
195-
t.Errorf("Error while writing settings. Err: %v", err)
196-
return
197-
}
198-
<-dialDone // Close conn only after dial returns.
199-
}()
200-
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
201-
defer cancel()
202-
client, err := DialContext(ctx, lis.Addr().String(), WithTransportCredentials(insecure.NewCredentials()), WithBlock())
203-
close(dialDone)
204-
if err != nil {
205-
t.Fatalf("Error while dialing. Err: %v", err)
206-
}
207-
defer client.Close()
208-
select {
209-
case <-sent:
210-
default:
211-
t.Fatalf("Dial returned before server settings were sent")
212-
}
213-
<-done
214-
}
215-
216-
func (s) TestDialWaitsForServerSettingsAndFails(t *testing.T) {
217-
lis, err := net.Listen("tcp", "localhost:0")
218-
if err != nil {
219-
t.Fatalf("Error while listening. Err: %v", err)
220-
}
221-
done := make(chan struct{})
222-
numConns := 0
223-
go func() { // Launch the server.
224-
defer func() {
225-
close(done)
226-
}()
227-
for {
228-
conn, err := lis.Accept()
229-
if err != nil {
230-
break
231-
}
232-
numConns++
233-
defer conn.Close()
234-
}
235-
}()
236-
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
237-
defer cancel()
238-
client, err := DialContext(ctx,
239-
lis.Addr().String(),
240-
WithTransportCredentials(insecure.NewCredentials()),
241-
WithReturnConnectionError(),
242-
WithConnectParams(ConnectParams{
243-
Backoff: backoff.Config{},
244-
MinConnectTimeout: 250 * time.Millisecond,
245-
}))
246-
lis.Close()
247-
if err == nil {
248-
client.Close()
249-
t.Fatalf("Unexpected success (err=nil) while dialing")
250-
}
251-
expectedMsg := "server preface"
252-
if !strings.Contains(err.Error(), context.DeadlineExceeded.Error()) || !strings.Contains(err.Error(), expectedMsg) {
253-
t.Fatalf("DialContext(_) = %v; want a message that includes both %q and %q", err, context.DeadlineExceeded.Error(), expectedMsg)
254-
}
255-
<-done
256-
if numConns < 2 {
257-
t.Fatalf("dial attempts: %v; want > 1", numConns)
258-
}
259-
}
260-
261125
// 1. Client connects to a server that doesn't send preface.
262126
// 2. After minConnectTimeout(500 ms here), client disconnects and retries.
263127
// 3. The new server sends its preface.
@@ -391,35 +255,6 @@ func (s) TestBackoffWhenNoServerPrefaceReceived(t *testing.T) {
391255
<-done
392256
}
393257

394-
func (s) TestWithTimeout(t *testing.T) {
395-
conn, err := Dial("passthrough:///Non-Existent.Server:80",
396-
WithTimeout(time.Millisecond),
397-
WithBlock(),
398-
WithTransportCredentials(insecure.NewCredentials()))
399-
if err == nil {
400-
conn.Close()
401-
}
402-
if err != context.DeadlineExceeded {
403-
t.Fatalf("Dial(_, _) = %v, %v, want %v", conn, err, context.DeadlineExceeded)
404-
}
405-
}
406-
407-
func (s) TestWithTransportCredentialsTLS(t *testing.T) {
408-
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond)
409-
defer cancel()
410-
creds, err := credentials.NewClientTLSFromFile(testdata.Path("x509/server_ca_cert.pem"), "x.test.example.com")
411-
if err != nil {
412-
t.Fatalf("Failed to create credentials %v", err)
413-
}
414-
conn, err := DialContext(ctx, "passthrough:///Non-Existent.Server:80", WithTransportCredentials(creds), WithBlock())
415-
if err == nil {
416-
conn.Close()
417-
}
418-
if err != context.DeadlineExceeded {
419-
t.Fatalf("Dial(_, _) = %v, %v, want %v", conn, err, context.DeadlineExceeded)
420-
}
421-
}
422-
423258
// When creating a transport configured with n addresses, only calculate the
424259
// backoff once per "round" of attempts instead of once per address (n times
425260
// per "round" of attempts) for old pickfirst and once per address for new pickfirst.
@@ -507,33 +342,6 @@ func (s) TestNewClient_BackoffCountPerRetryGroup(t *testing.T) {
507342
}
508343
}
509344

510-
func (s) TestDialContextCancel(t *testing.T) {
511-
ctx, cancel := context.WithCancel(context.Background())
512-
cancel()
513-
if _, err := DialContext(ctx, "Non-Existent.Server:80", WithBlock(), WithTransportCredentials(insecure.NewCredentials())); err != context.Canceled {
514-
t.Fatalf("DialContext(%v, _) = _, %v, want _, %v", ctx, err, context.Canceled)
515-
}
516-
}
517-
518-
type failFastError struct{}
519-
520-
func (failFastError) Error() string { return "failfast" }
521-
func (failFastError) Temporary() bool { return false }
522-
523-
func (s) TestDialContextFailFast(t *testing.T) {
524-
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
525-
defer cancel()
526-
failErr := failFastError{}
527-
dialer := func(string, time.Duration) (net.Conn, error) {
528-
return nil, failErr
529-
}
530-
531-
_, err := DialContext(ctx, "Non-Existent.Server:80", WithBlock(), WithTransportCredentials(insecure.NewCredentials()), WithDialer(dialer), FailOnNonTempDialError(true))
532-
if terr, ok := err.(transport.ConnectionError); !ok || terr.Origin() != failErr {
533-
t.Fatalf("DialContext() = _, %v, want _, %v", err, failErr)
534-
}
535-
}
536-
537345
// securePerRPCCredentials always requires transport security.
538346
type securePerRPCCredentials struct {
539347
credentials.PerRPCCredentials
@@ -697,72 +505,6 @@ func (s) TestResolverEmptyUpdateNotPanic(t *testing.T) {
697505
time.Sleep(time.Second) // Sleep to make sure the service config is handled by ClientConn.
698506
}
699507

700-
func (s) TestClientUpdatesParamsAfterGoAway(t *testing.T) {
701-
grpctest.ExpectError("Client received GoAway with error code ENHANCE_YOUR_CALM and debug data equal to ASCII \"too_many_pings\"")
702-
703-
lis, err := net.Listen("tcp", "localhost:0")
704-
if err != nil {
705-
t.Fatalf("Failed to listen. Err: %v", err)
706-
}
707-
defer lis.Close()
708-
connected := grpcsync.NewEvent()
709-
defer connected.Fire()
710-
go func() {
711-
conn, err := lis.Accept()
712-
if err != nil {
713-
t.Errorf("error accepting connection: %v", err)
714-
return
715-
}
716-
defer conn.Close()
717-
f := http2.NewFramer(conn, conn)
718-
// Start a goroutine to read from the conn to prevent the client from
719-
// blocking after it writes its preface.
720-
go func() {
721-
for {
722-
if _, err := f.ReadFrame(); err != nil {
723-
return
724-
}
725-
}
726-
}()
727-
if err := f.WriteSettings(http2.Setting{}); err != nil {
728-
t.Errorf("error writing settings: %v", err)
729-
return
730-
}
731-
<-connected.Done()
732-
if err := f.WriteGoAway(0, http2.ErrCodeEnhanceYourCalm, []byte("too_many_pings")); err != nil {
733-
t.Errorf("error writing GOAWAY: %v", err)
734-
return
735-
}
736-
}()
737-
addr := lis.Addr().String()
738-
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
739-
defer cancel()
740-
cc, err := DialContext(ctx, addr, WithBlock(), WithTransportCredentials(insecure.NewCredentials()), WithKeepaliveParams(keepalive.ClientParameters{
741-
Time: 10 * time.Second,
742-
Timeout: 100 * time.Millisecond,
743-
PermitWithoutStream: true,
744-
}))
745-
if err != nil {
746-
t.Fatalf("DialContext(%s) failed: %v, want: nil", addr, err)
747-
}
748-
defer cc.Close()
749-
connected.Fire()
750-
for {
751-
time.Sleep(10 * time.Millisecond)
752-
cc.mu.RLock()
753-
v := cc.keepaliveParams.Time
754-
cc.mu.RUnlock()
755-
if v == 20*time.Second {
756-
// Success
757-
return
758-
}
759-
if ctx.Err() != nil {
760-
// Timeout
761-
t.Fatalf("cc.dopts.copts.Keepalive.Time = %v , want 20s", v)
762-
}
763-
}
764-
}
765-
766508
func (s) TestDisableServiceConfigOption(t *testing.T) {
767509
r := manual.NewBuilderWithScheme("whatever")
768510
addr := r.Scheme() + ":///non.existent"

0 commit comments

Comments
 (0)