From 65f9bbe3064f75b144ea724ee160fdce4681acf8 Mon Sep 17 00:00:00 2001 From: Vinothkumar Date: Tue, 23 Sep 2025 02:14:48 +0000 Subject: [PATCH 1/9] Updated NewClient instead of Dial --- clientconn_authority_test.go | 4 +- clientconn_parsed_target_test.go | 53 +++++------------------ clientconn_test.go | 5 ++- default_dial_option_server_option_test.go | 26 +++++------ resolver_test.go | 18 +++++--- 5 files changed, 40 insertions(+), 66 deletions(-) diff --git a/clientconn_authority_test.go b/clientconn_authority_test.go index 6eec582bdd03..eb7d1345f9a0 100644 --- a/clientconn_authority_test.go +++ b/clientconn_authority_test.go @@ -109,9 +109,9 @@ func (s) TestClientConnAuthority(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - cc, err := Dial(test.target, test.opts...) + cc, err := NewClient(test.target, test.opts...) if err != nil { - t.Fatalf("Dial(%q) failed: %v", test.target, err) + t.Fatalf("grpc.NewClient(%q) failed: %v", test.target, err) } defer cc.Close() if cc.authority != test.wantAuthority { diff --git a/clientconn_parsed_target_test.go b/clientconn_parsed_target_test.go index 499125a7c16a..d58674d0381b 100644 --- a/clientconn_parsed_target_test.go +++ b/clientconn_parsed_target_test.go @@ -62,20 +62,17 @@ func init() { resolver.Register(testResolverForParser{}) } func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { tests := []struct { target string - wantDialParse resolver.Target wantNewClientParse resolver.Target wantCustomParse resolver.Target }{ // No scheme is specified. { target: "://a/b", - wantDialParse: generateTarget("passthrough:///://a/b"), wantNewClientParse: generateTarget("dns:///://a/b"), wantCustomParse: generateTarget("testresolverforparser:///://a/b"), }, { target: "a//b", - wantDialParse: generateTarget("passthrough:///a//b"), wantNewClientParse: generateTarget("dns:///a//b"), wantCustomParse: generateTarget("testresolverforparser:///a//b"), }, @@ -83,13 +80,11 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { // An unregistered scheme is specified. { target: "a:///", - wantDialParse: generateTarget("passthrough:///a:///"), wantNewClientParse: generateTarget("dns:///a:///"), wantCustomParse: generateTarget("testresolverforparser:///a:///"), }, { target: "a:b", - wantDialParse: generateTarget("passthrough:///a:b"), wantNewClientParse: generateTarget("dns:///a:b"), wantCustomParse: generateTarget("testresolverforparser:///a:b"), }, @@ -97,25 +92,21 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { // A registered scheme is specified. { target: "dns://a.server.com/google.com", - wantDialParse: generateTarget("dns://a.server.com/google.com"), wantNewClientParse: generateTarget("dns://a.server.com/google.com"), wantCustomParse: generateTarget("dns://a.server.com/google.com"), }, { target: "unix-abstract:/ a///://::!@#$%25^&*()b", - wantDialParse: generateTarget("unix-abstract:/ a///://::!@#$%25^&*()b"), wantNewClientParse: generateTarget("unix-abstract:/ a///://::!@#$%25^&*()b"), wantCustomParse: generateTarget("unix-abstract:/ a///://::!@#$%25^&*()b"), }, { target: "unix-abstract:passthrough:abc", - wantDialParse: generateTarget("unix-abstract:passthrough:abc"), wantNewClientParse: generateTarget("unix-abstract:passthrough:abc"), wantCustomParse: generateTarget("unix-abstract:passthrough:abc"), }, { target: "passthrough:///unix:///a/b/c", - wantDialParse: generateTarget("passthrough:///unix:///a/b/c"), wantNewClientParse: generateTarget("passthrough:///unix:///a/b/c"), wantCustomParse: generateTarget("passthrough:///unix:///a/b/c"), }, @@ -123,13 +114,11 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { // Cases for `scheme:absolute-path`. { target: "dns:/a/b/c", - wantDialParse: generateTarget("dns:/a/b/c"), wantNewClientParse: generateTarget("dns:/a/b/c"), wantCustomParse: generateTarget("dns:/a/b/c"), }, { target: "unregistered:/a/b/c", - wantDialParse: generateTarget("passthrough:///unregistered:/a/b/c"), wantNewClientParse: generateTarget("dns:///unregistered:/a/b/c"), wantCustomParse: generateTarget("testresolverforparser:///unregistered:/a/b/c"), }, @@ -138,19 +127,9 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { for _, test := range tests { t.Run(test.target, func(t *testing.T) { resetInitialResolverState() - cc, err := Dial(test.target, WithTransportCredentials(insecure.NewCredentials())) + cc, err := NewClient(test.target, WithTransportCredentials(insecure.NewCredentials())) if err != nil { - t.Fatalf("Dial(%q) failed: %v", test.target, err) - } - cc.Close() - - if !cmp.Equal(cc.parsedTarget, test.wantDialParse) { - t.Errorf("cc.parsedTarget for dial target %q = %+v, want %+v", test.target, cc.parsedTarget, test.wantDialParse) - } - - cc, err = NewClient(test.target, WithTransportCredentials(insecure.NewCredentials())) - if err != nil { - t.Fatalf("NewClient(%q) failed: %v", test.target, err) + t.Fatalf("grpc.NewClient(%q) failed: %v", test.target, err) } cc.Close() @@ -159,19 +138,9 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { } resolver.SetDefaultScheme("testresolverforparser") - cc, err = Dial(test.target, WithTransportCredentials(insecure.NewCredentials())) - if err != nil { - t.Fatalf("Dial(%q) failed: %v", test.target, err) - } - cc.Close() - - if !cmp.Equal(cc.parsedTarget, test.wantCustomParse) { - t.Errorf("cc.parsedTarget for dial target %q = %+v, want %+v", test.target, cc.parsedTarget, test.wantDialParse) - } - cc, err = NewClient(test.target, WithTransportCredentials(insecure.NewCredentials())) if err != nil { - t.Fatalf("NewClient(%q) failed: %v", test.target, err) + t.Fatalf("grpc.NewClient(%q) failed: %v", test.target, err) } cc.Close() @@ -186,18 +155,14 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { func (s) TestParsedTarget_Failure_WithoutCustomDialer(t *testing.T) { targets := []string{ - "", - "unix://a/b/c", - "unix://authority", - "unix-abstract://authority/a/b/c", - "unix-abstract://authority", + "unix:/%a/b/c", } for _, target := range targets { t.Run(target, func(t *testing.T) { - if cc, err := Dial(target, WithTransportCredentials(insecure.NewCredentials())); err == nil { + if cc, err := NewClient(target, WithTransportCredentials(insecure.NewCredentials())); err == nil { defer cc.Close() - t.Fatalf("Dial(%q) succeeded cc.parsedTarget = %+v, expected to fail", target, cc.parsedTarget) + t.Fatalf("grpc.NewClient(%q) succeeded cc.parsedTarget = %+v, expected to fail", target, cc.parsedTarget) } }) } @@ -205,6 +170,7 @@ func (s) TestParsedTarget_Failure_WithoutCustomDialer(t *testing.T) { func (s) TestParsedTarget_WithCustomDialer(t *testing.T) { resetInitialResolverState() + resolver.SetDefaultScheme("passthrough") defScheme := resolver.GetDefaultScheme() tests := []struct { target string @@ -273,11 +239,12 @@ func (s) TestParsedTarget_WithCustomDialer(t *testing.T) { return nil, errors.New("dialer error") } - cc, err := Dial(test.target, WithTransportCredentials(insecure.NewCredentials()), WithContextDialer(dialer)) + cc, err := NewClient(test.target, WithTransportCredentials(insecure.NewCredentials()), WithContextDialer(dialer)) if err != nil { - t.Fatalf("Dial(%q) failed: %v", test.target, err) + t.Fatalf("grpc.NewClient(%q) failed: %v", test.target, err) } defer cc.Close() + cc.Connect() select { case addr := <-addrCh: diff --git a/clientconn_test.go b/clientconn_test.go index 68c224140148..baf5dbfec6fc 100644 --- a/clientconn_test.go +++ b/clientconn_test.go @@ -97,11 +97,12 @@ func (s) TestDialWithTimeout(t *testing.T) { r := manual.NewBuilderWithScheme("whatever") r.InitialState(resolver.State{Addresses: []resolver.Address{lisAddr}}) - client, err := Dial(r.Scheme()+":///test.server", WithTransportCredentials(insecure.NewCredentials()), WithResolvers(r), WithTimeout(5*time.Second)) + client, err := NewClient(r.Scheme()+":///test.server", WithTransportCredentials(insecure.NewCredentials()), WithResolvers(r), WithTimeout(5*time.Second)) close(dialDone) if err != nil { - t.Fatalf("Dial failed. Err: %v", err) + t.Fatalf("grpc.NewClient failed. Err: %v", err) } + client.Connect() defer client.Close() timeout := time.After(1 * time.Second) select { diff --git a/default_dial_option_server_option_test.go b/default_dial_option_server_option_test.go index a9544d6156c8..2c47c3eb3804 100644 --- a/default_dial_option_server_option_test.go +++ b/default_dial_option_server_option_test.go @@ -29,12 +29,12 @@ import ( ) func (s) TestAddGlobalDialOptions(t *testing.T) { - // Ensure the Dial fails without credentials - if _, err := Dial("fake"); err == nil { - t.Fatalf("Dialing without a credential did not fail") + // Ensure the NewClient fails without credentials + if _, err := NewClient("dns:///fake"); err == nil { + t.Fatalf("grpc.NewClient without a credential did not fail") } else { if !strings.Contains(err.Error(), "no transport security set") { - t.Fatalf("Dialing failed with unexpected error: %v", err) + t.Fatalf("grpc.NewClient failed with unexpected error: %v", err) } } @@ -48,9 +48,9 @@ func (s) TestAddGlobalDialOptions(t *testing.T) { } } - // Ensure the Dial passes with the extra dial options - if cc, err := Dial("fake"); err != nil { - t.Fatalf("Dialing with insecure credential failed: %v", err) + // Ensure the NewClient passes with the extra dial options + if cc, err := NewClient("dns:///fake"); err != nil { + t.Fatalf("grpc.NewClient with insecure credential failed: %v", err) } else { cc.Close() } @@ -71,8 +71,8 @@ func (s) TestDisableGlobalOptions(t *testing.T) { // due to the global dial options with credentials not being picked up due // to global options being disabled. noTSecStr := "no transport security set" - if _, err := Dial("fake", internal.DisableGlobalDialOptions.(func() DialOption)()); !strings.Contains(fmt.Sprint(err), noTSecStr) { - t.Fatalf("Dialing received unexpected error: %v, want error containing \"%v\"", err, noTSecStr) + if _, err := NewClient("dns:///fake", internal.DisableGlobalDialOptions.(func() DialOption)()); !strings.Contains(fmt.Sprint(err), noTSecStr) { + t.Fatalf("grpc.NewClient received unexpected error: %v, want error containing \"%v\"", err, noTSecStr) } } @@ -95,11 +95,11 @@ func (s) TestGlobalPerTargetDialOption(t *testing.T) { defer internal.ClearGlobalPerTargetDialOptions() noTSecStr := "no transport security set" if _, err := NewClient("dns:///fake"); !strings.Contains(fmt.Sprint(err), noTSecStr) { - t.Fatalf("Dialing received unexpected error: %v, want error containing \"%v\"", err, noTSecStr) + t.Fatalf("grpc.NewClient received unexpected error: %v, want error containing \"%v\"", err, noTSecStr) } cc, err := NewClient("passthrough:///nice") if err != nil { - t.Fatalf("Dialing with insecure credentials failed: %v", err) + t.Fatalf("grpc.NewClient with insecure credentials failed: %v", err) } cc.Close() } @@ -135,9 +135,9 @@ func (s) TestJoinDialOption(t *testing.T) { const maxRecvSize = 998765 const initialWindowSize = 100 jdo := newJoinDialOption(WithTransportCredentials(insecure.NewCredentials()), WithReadBufferSize(maxRecvSize), WithInitialWindowSize(initialWindowSize)) - cc, err := Dial("fake", jdo) + cc, err := NewClient("dns:///fake", jdo) if err != nil { - t.Fatalf("Dialing with insecure credentials failed: %v", err) + t.Fatalf("grpc.NewClient with insecure credentials failed: %v", err) } defer cc.Close() if cc.dopts.copts.ReadBufferSize != maxRecvSize { diff --git a/resolver_test.go b/resolver_test.go index 9262f6ce7f9a..5f31fbc3e60e 100644 --- a/resolver_test.go +++ b/resolver_test.go @@ -27,8 +27,10 @@ import ( "github.com/google/go-cmp/cmp" "google.golang.org/grpc/attributes" "google.golang.org/grpc/balancer" + "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/internal/balancer/stub" + "google.golang.org/grpc/internal/testutils" "google.golang.org/grpc/resolver" "google.golang.org/grpc/resolver/manual" ) @@ -63,9 +65,9 @@ func (s) TestResolverCaseSensitivity(t *testing.T) { return nil, fmt.Errorf("not dialing with custom dialer") } - cc, err := Dial(target, WithContextDialer(customDialer), WithTransportCredentials(insecure.NewCredentials())) + cc, err := NewClient(target, WithContextDialer(customDialer), WithTransportCredentials(insecure.NewCredentials())) if err != nil { - t.Fatalf("Unexpected Dial(%q) error: %v", target, err) + t.Fatalf("Unexpected grpc.NewClient(%q) error: %v", target, err) } cc.Connect() if got, want := <-addrCh, "localhost:1234"; got != want { @@ -84,13 +86,17 @@ func (s) TestResolverCaseSensitivity(t *testing.T) { // This should not find the injected resolver due to the case not matching. // This results in "passthrough" being used with the address as the whole // target. - target = "caseTest2:///localhost:1234" - cc, err = Dial(target, WithContextDialer(customDialer), WithResolvers(res), WithTransportCredentials(insecure.NewCredentials())) + target = "passthrough:///caseTest2:///localhost:1234" + cc, err = NewClient(target, WithContextDialer(customDialer), WithResolvers(res), WithTransportCredentials(insecure.NewCredentials())) if err != nil { - t.Fatalf("Unexpected Dial(%q) error: %v", target, err) + t.Fatalf("Unexpected grpc.NewClient(%q) error: %v", target, err) } cc.Connect() - if got, want := <-addrCh, target; got != want { + ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) + defer cancel() + go testutils.StayConnected(ctx, cc) + testutils.AwaitNotState(ctx, t, cc, connectivity.Idle) + if got, want := <-addrCh, "caseTest2:///localhost:1234"; got != want { cc.Close() t.Fatalf("Dialer got address %q; wanted %q", got, want) } From c83de4b6e7a2c62ecc9ad603f293309d0dde37ec Mon Sep 17 00:00:00 2001 From: Vinothkumar Date: Tue, 23 Sep 2025 11:07:19 +0000 Subject: [PATCH 2/9] Fixed the test issues --- clientconn_parsed_target_test.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/clientconn_parsed_target_test.go b/clientconn_parsed_target_test.go index d58674d0381b..3e2f7573bfb0 100644 --- a/clientconn_parsed_target_test.go +++ b/clientconn_parsed_target_test.go @@ -170,7 +170,6 @@ func (s) TestParsedTarget_Failure_WithoutCustomDialer(t *testing.T) { func (s) TestParsedTarget_WithCustomDialer(t *testing.T) { resetInitialResolverState() - resolver.SetDefaultScheme("passthrough") defScheme := resolver.GetDefaultScheme() tests := []struct { target string @@ -200,7 +199,7 @@ func (s) TestParsedTarget_WithCustomDialer(t *testing.T) { wantDialerAddress: "127.0.0.1:50051", }, { - target: ":///127.0.0.1:50051", + target: "passthrough:///:///127.0.0.1:50051", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, ":///127.0.0.1:50051"))}, wantDialerAddress: ":///127.0.0.1:50051", }, @@ -210,17 +209,17 @@ func (s) TestParsedTarget_WithCustomDialer(t *testing.T) { wantDialerAddress: "127.0.0.1:50051", }, { - target: "://authority/127.0.0.1:50051", + target: "passthrough:///://authority/127.0.0.1:50051", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "://authority/127.0.0.1:50051"))}, wantDialerAddress: "://authority/127.0.0.1:50051", }, { - target: "/unix/socket/address", + target: "passthrough:////unix/socket/address", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "/unix/socket/address"))}, wantDialerAddress: "/unix/socket/address", }, { - target: "", + target: "passthrough:///", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, ""))}, wantDialerAddress: "", }, From 714bd88a4e55a2f48a4fe3f9ed7a2ef942653b25 Mon Sep 17 00:00:00 2001 From: Vinothkumar Date: Tue, 23 Sep 2025 11:12:00 +0000 Subject: [PATCH 3/9] small tweaks --- resolver_test.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/resolver_test.go b/resolver_test.go index 5f31fbc3e60e..02dde16e7ee6 100644 --- a/resolver_test.go +++ b/resolver_test.go @@ -27,10 +27,8 @@ import ( "github.com/google/go-cmp/cmp" "google.golang.org/grpc/attributes" "google.golang.org/grpc/balancer" - "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/internal/balancer/stub" - "google.golang.org/grpc/internal/testutils" "google.golang.org/grpc/resolver" "google.golang.org/grpc/resolver/manual" ) @@ -92,10 +90,7 @@ func (s) TestResolverCaseSensitivity(t *testing.T) { t.Fatalf("Unexpected grpc.NewClient(%q) error: %v", target, err) } cc.Connect() - ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) - defer cancel() - go testutils.StayConnected(ctx, cc) - testutils.AwaitNotState(ctx, t, cc, connectivity.Idle) + if got, want := <-addrCh, "caseTest2:///localhost:1234"; got != want { cc.Close() t.Fatalf("Dialer got address %q; wanted %q", got, want) From b060b0c0c582426bd7c79bd3646ea27cf277a6a0 Mon Sep 17 00:00:00 2001 From: Vinothkumar Date: Tue, 23 Sep 2025 11:13:54 +0000 Subject: [PATCH 4/9] small tweaks --- resolver_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/resolver_test.go b/resolver_test.go index 02dde16e7ee6..add73c11e354 100644 --- a/resolver_test.go +++ b/resolver_test.go @@ -90,7 +90,6 @@ func (s) TestResolverCaseSensitivity(t *testing.T) { t.Fatalf("Unexpected grpc.NewClient(%q) error: %v", target, err) } cc.Connect() - if got, want := <-addrCh, "caseTest2:///localhost:1234"; got != want { cc.Close() t.Fatalf("Dialer got address %q; wanted %q", got, want) From 98695b50d80452d05d147d9cfc4e41ebf53696e2 Mon Sep 17 00:00:00 2001 From: Vinothkumar Date: Tue, 30 Sep 2025 09:33:29 +0000 Subject: [PATCH 5/9] Fixed the review changes --- clientconn_parsed_target_test.go | 65 +++++++++++++++++++---- clientconn_test.go | 4 +- default_dial_option_server_option_test.go | 4 +- resolver_test.go | 4 +- 4 files changed, 60 insertions(+), 17 deletions(-) diff --git a/clientconn_parsed_target_test.go b/clientconn_parsed_target_test.go index 3e2f7573bfb0..bb191f37b296 100644 --- a/clientconn_parsed_target_test.go +++ b/clientconn_parsed_target_test.go @@ -27,6 +27,7 @@ import ( "time" "github.com/google/go-cmp/cmp" + "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/internal" "google.golang.org/grpc/internal/testutils" @@ -62,17 +63,20 @@ func init() { resolver.Register(testResolverForParser{}) } func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { tests := []struct { target string + wantDialParse resolver.Target wantNewClientParse resolver.Target wantCustomParse resolver.Target }{ // No scheme is specified. { target: "://a/b", + wantDialParse: generateTarget("passthrough:///://a/b"), wantNewClientParse: generateTarget("dns:///://a/b"), wantCustomParse: generateTarget("testresolverforparser:///://a/b"), }, { target: "a//b", + wantDialParse: generateTarget("passthrough:///a//b"), wantNewClientParse: generateTarget("dns:///a//b"), wantCustomParse: generateTarget("testresolverforparser:///a//b"), }, @@ -80,11 +84,13 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { // An unregistered scheme is specified. { target: "a:///", + wantDialParse: generateTarget("passthrough:///a:///"), wantNewClientParse: generateTarget("dns:///a:///"), wantCustomParse: generateTarget("testresolverforparser:///a:///"), }, { target: "a:b", + wantDialParse: generateTarget("passthrough:///a:b"), wantNewClientParse: generateTarget("dns:///a:b"), wantCustomParse: generateTarget("testresolverforparser:///a:b"), }, @@ -92,21 +98,25 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { // A registered scheme is specified. { target: "dns://a.server.com/google.com", + wantDialParse: generateTarget("dns://a.server.com/google.com"), wantNewClientParse: generateTarget("dns://a.server.com/google.com"), wantCustomParse: generateTarget("dns://a.server.com/google.com"), }, { target: "unix-abstract:/ a///://::!@#$%25^&*()b", + wantDialParse: generateTarget("unix-abstract:/ a///://::!@#$%25^&*()b"), wantNewClientParse: generateTarget("unix-abstract:/ a///://::!@#$%25^&*()b"), wantCustomParse: generateTarget("unix-abstract:/ a///://::!@#$%25^&*()b"), }, { target: "unix-abstract:passthrough:abc", + wantDialParse: generateTarget("unix-abstract:passthrough:abc"), wantNewClientParse: generateTarget("unix-abstract:passthrough:abc"), wantCustomParse: generateTarget("unix-abstract:passthrough:abc"), }, { target: "passthrough:///unix:///a/b/c", + wantDialParse: generateTarget("passthrough:///unix:///a/b/c"), wantNewClientParse: generateTarget("passthrough:///unix:///a/b/c"), wantCustomParse: generateTarget("passthrough:///unix:///a/b/c"), }, @@ -114,11 +124,13 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { // Cases for `scheme:absolute-path`. { target: "dns:/a/b/c", + wantDialParse: generateTarget("dns:/a/b/c"), wantNewClientParse: generateTarget("dns:/a/b/c"), wantCustomParse: generateTarget("dns:/a/b/c"), }, { target: "unregistered:/a/b/c", + wantDialParse: generateTarget("passthrough:///unregistered:/a/b/c"), wantNewClientParse: generateTarget("dns:///unregistered:/a/b/c"), wantCustomParse: generateTarget("testresolverforparser:///unregistered:/a/b/c"), }, @@ -127,9 +139,19 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { for _, test := range tests { t.Run(test.target, func(t *testing.T) { resetInitialResolverState() - cc, err := NewClient(test.target, WithTransportCredentials(insecure.NewCredentials())) + cc, err := Dial(test.target, WithTransportCredentials(insecure.NewCredentials())) if err != nil { - t.Fatalf("grpc.NewClient(%q) failed: %v", test.target, err) + t.Fatalf("Dial(%q) failed: %v", test.target, err) + } + cc.Close() + + if !cmp.Equal(cc.parsedTarget, test.wantDialParse) { + t.Errorf("cc.parsedTarget for dial target %q = %+v, want %+v", test.target, cc.parsedTarget, test.wantDialParse) + } + + cc, err = NewClient(test.target, WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + t.Fatalf("NewClient(%q) failed: %v", test.target, err) } cc.Close() @@ -138,9 +160,19 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { } resolver.SetDefaultScheme("testresolverforparser") + cc, err = Dial(test.target, WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + t.Fatalf("Dial(%q) failed: %v", test.target, err) + } + cc.Close() + + if !cmp.Equal(cc.parsedTarget, test.wantCustomParse) { + t.Errorf("cc.parsedTarget for dial target %q = %+v, want %+v", test.target, cc.parsedTarget, test.wantDialParse) + } + cc, err = NewClient(test.target, WithTransportCredentials(insecure.NewCredentials())) if err != nil { - t.Fatalf("grpc.NewClient(%q) failed: %v", test.target, err) + t.Fatalf("NewClient(%q) failed: %v", test.target, err) } cc.Close() @@ -155,15 +187,26 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) { func (s) TestParsedTarget_Failure_WithoutCustomDialer(t *testing.T) { targets := []string{ - "unix:/%a/b/c", + "", + "unix://a/b/c", + "unix://authority", + "unix-abstract://authority/a/b/c", + "unix-abstract://authority", } for _, target := range targets { t.Run(target, func(t *testing.T) { - if cc, err := NewClient(target, WithTransportCredentials(insecure.NewCredentials())); err == nil { - defer cc.Close() + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + defer cancel() + cc, err := NewClient(target, WithTransportCredentials(insecure.NewCredentials())) + if err != nil { t.Fatalf("grpc.NewClient(%q) succeeded cc.parsedTarget = %+v, expected to fail", target, cc.parsedTarget) + } + defer cc.Close() + cc.Connect() + testutils.AwaitState(ctx, t, cc, connectivity.Idle) + }) } } @@ -199,7 +242,7 @@ func (s) TestParsedTarget_WithCustomDialer(t *testing.T) { wantDialerAddress: "127.0.0.1:50051", }, { - target: "passthrough:///:///127.0.0.1:50051", + target: ":///127.0.0.1:50051", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, ":///127.0.0.1:50051"))}, wantDialerAddress: ":///127.0.0.1:50051", }, @@ -209,17 +252,17 @@ func (s) TestParsedTarget_WithCustomDialer(t *testing.T) { wantDialerAddress: "127.0.0.1:50051", }, { - target: "passthrough:///://authority/127.0.0.1:50051", + target: "://authority/127.0.0.1:50051", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "://authority/127.0.0.1:50051"))}, wantDialerAddress: "://authority/127.0.0.1:50051", }, { - target: "passthrough:////unix/socket/address", + target: "/unix/socket/address", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "/unix/socket/address"))}, wantDialerAddress: "/unix/socket/address", }, { - target: "passthrough:///", + target: "", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, ""))}, wantDialerAddress: "", }, @@ -238,7 +281,7 @@ func (s) TestParsedTarget_WithCustomDialer(t *testing.T) { return nil, errors.New("dialer error") } - cc, err := NewClient(test.target, WithTransportCredentials(insecure.NewCredentials()), WithContextDialer(dialer)) + cc, err := NewClient(test.target, WithTransportCredentials(insecure.NewCredentials()), withDefaultScheme(defScheme), WithContextDialer(dialer)) if err != nil { t.Fatalf("grpc.NewClient(%q) failed: %v", test.target, err) } diff --git a/clientconn_test.go b/clientconn_test.go index baf5dbfec6fc..40a2d83e3244 100644 --- a/clientconn_test.go +++ b/clientconn_test.go @@ -97,10 +97,10 @@ func (s) TestDialWithTimeout(t *testing.T) { r := manual.NewBuilderWithScheme("whatever") r.InitialState(resolver.State{Addresses: []resolver.Address{lisAddr}}) - client, err := NewClient(r.Scheme()+":///test.server", WithTransportCredentials(insecure.NewCredentials()), WithResolvers(r), WithTimeout(5*time.Second)) + client, err := Dial(r.Scheme()+":///test.server", WithTransportCredentials(insecure.NewCredentials()), WithResolvers(r), WithTimeout(5*time.Second)) close(dialDone) if err != nil { - t.Fatalf("grpc.NewClient failed. Err: %v", err) + t.Fatalf("Dial failed. Err: %v", err) } client.Connect() defer client.Close() diff --git a/default_dial_option_server_option_test.go b/default_dial_option_server_option_test.go index 2c47c3eb3804..ea5b907883c7 100644 --- a/default_dial_option_server_option_test.go +++ b/default_dial_option_server_option_test.go @@ -49,7 +49,7 @@ func (s) TestAddGlobalDialOptions(t *testing.T) { } // Ensure the NewClient passes with the extra dial options - if cc, err := NewClient("dns:///fake"); err != nil { + if cc, err := NewClient("fake"); err != nil { t.Fatalf("grpc.NewClient with insecure credential failed: %v", err) } else { cc.Close() @@ -71,7 +71,7 @@ func (s) TestDisableGlobalOptions(t *testing.T) { // due to the global dial options with credentials not being picked up due // to global options being disabled. noTSecStr := "no transport security set" - if _, err := NewClient("dns:///fake", internal.DisableGlobalDialOptions.(func() DialOption)()); !strings.Contains(fmt.Sprint(err), noTSecStr) { + if _, err := NewClient("fake", internal.DisableGlobalDialOptions.(func() DialOption)()); !strings.Contains(fmt.Sprint(err), noTSecStr) { t.Fatalf("grpc.NewClient received unexpected error: %v, want error containing \"%v\"", err, noTSecStr) } } diff --git a/resolver_test.go b/resolver_test.go index add73c11e354..d705cfa3b15f 100644 --- a/resolver_test.go +++ b/resolver_test.go @@ -84,8 +84,8 @@ func (s) TestResolverCaseSensitivity(t *testing.T) { // This should not find the injected resolver due to the case not matching. // This results in "passthrough" being used with the address as the whole // target. - target = "passthrough:///caseTest2:///localhost:1234" - cc, err = NewClient(target, WithContextDialer(customDialer), WithResolvers(res), WithTransportCredentials(insecure.NewCredentials())) + target = "caseTest2:///localhost:1234" + cc, err = NewClient(target, WithContextDialer(customDialer), withDefaultScheme("passthrough"), WithResolvers(res), WithTransportCredentials(insecure.NewCredentials())) if err != nil { t.Fatalf("Unexpected grpc.NewClient(%q) error: %v", target, err) } From 1a53f2bf7bb99baa7840b1b42ad7b6489359a446 Mon Sep 17 00:00:00 2001 From: Vinothkumar Date: Tue, 30 Sep 2025 12:56:53 +0000 Subject: [PATCH 6/9] small tweaks --- default_dial_option_server_option_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/default_dial_option_server_option_test.go b/default_dial_option_server_option_test.go index ea5b907883c7..f9fa6a4e77c2 100644 --- a/default_dial_option_server_option_test.go +++ b/default_dial_option_server_option_test.go @@ -30,7 +30,7 @@ import ( func (s) TestAddGlobalDialOptions(t *testing.T) { // Ensure the NewClient fails without credentials - if _, err := NewClient("dns:///fake"); err == nil { + if _, err := NewClient("fake"); err == nil { t.Fatalf("grpc.NewClient without a credential did not fail") } else { if !strings.Contains(err.Error(), "no transport security set") { @@ -135,7 +135,7 @@ func (s) TestJoinDialOption(t *testing.T) { const maxRecvSize = 998765 const initialWindowSize = 100 jdo := newJoinDialOption(WithTransportCredentials(insecure.NewCredentials()), WithReadBufferSize(maxRecvSize), WithInitialWindowSize(initialWindowSize)) - cc, err := NewClient("dns:///fake", jdo) + cc, err := NewClient("fake", jdo) if err != nil { t.Fatalf("grpc.NewClient with insecure credentials failed: %v", err) } From 889cf0c7a7135c5b6fef76a5577ca27c5d6eaac8 Mon Sep 17 00:00:00 2001 From: Vinothkumar Date: Tue, 30 Sep 2025 13:02:58 +0000 Subject: [PATCH 7/9] small tweaks --- clientconn_parsed_target_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/clientconn_parsed_target_test.go b/clientconn_parsed_target_test.go index bb191f37b296..4cb160b2f2de 100644 --- a/clientconn_parsed_target_test.go +++ b/clientconn_parsed_target_test.go @@ -206,7 +206,6 @@ func (s) TestParsedTarget_Failure_WithoutCustomDialer(t *testing.T) { defer cc.Close() cc.Connect() testutils.AwaitState(ctx, t, cc, connectivity.Idle) - }) } } From 66a1b3c173412d9b17b22ca038593648dff5c6c3 Mon Sep 17 00:00:00 2001 From: Vinothkumar Date: Fri, 3 Oct 2025 06:43:13 +0000 Subject: [PATCH 8/9] Fixed the review changes --- clientconn_parsed_target_test.go | 3 +-- clientconn_test.go | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/clientconn_parsed_target_test.go b/clientconn_parsed_target_test.go index 4cb160b2f2de..db5b7f5d3f75 100644 --- a/clientconn_parsed_target_test.go +++ b/clientconn_parsed_target_test.go @@ -200,8 +200,7 @@ func (s) TestParsedTarget_Failure_WithoutCustomDialer(t *testing.T) { defer cancel() cc, err := NewClient(target, WithTransportCredentials(insecure.NewCredentials())) if err != nil { - t.Fatalf("grpc.NewClient(%q) succeeded cc.parsedTarget = %+v, expected to fail", target, cc.parsedTarget) - + t.Fatalf("grpc.NewClient(%q) failed: %v, expected to succeed", target, err) } defer cc.Close() cc.Connect() diff --git a/clientconn_test.go b/clientconn_test.go index 40a2d83e3244..68c224140148 100644 --- a/clientconn_test.go +++ b/clientconn_test.go @@ -102,7 +102,6 @@ func (s) TestDialWithTimeout(t *testing.T) { if err != nil { t.Fatalf("Dial failed. Err: %v", err) } - client.Connect() defer client.Close() timeout := time.After(1 * time.Second) select { From f1c77ee11e0f0311c830befaec3871daebd74ee5 Mon Sep 17 00:00:00 2001 From: Vinothkumar Date: Tue, 7 Oct 2025 06:59:15 +0000 Subject: [PATCH 9/9] small tweaks --- resolver_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resolver_test.go b/resolver_test.go index d705cfa3b15f..8552b8eb95c5 100644 --- a/resolver_test.go +++ b/resolver_test.go @@ -90,7 +90,7 @@ func (s) TestResolverCaseSensitivity(t *testing.T) { t.Fatalf("Unexpected grpc.NewClient(%q) error: %v", target, err) } cc.Connect() - if got, want := <-addrCh, "caseTest2:///localhost:1234"; got != want { + if got, want := <-addrCh, target; got != want { cc.Close() t.Fatalf("Dialer got address %q; wanted %q", got, want) }