Skip to content

Commit 3ae77e6

Browse files
authored
grpc: Canonicalize string returned by ClientConn.Target() and resolver.Address.String() (#6923)
1 parent 29997a0 commit 3ae77e6

File tree

3 files changed

+41
-13
lines changed

3 files changed

+41
-13
lines changed

clientconn.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -883,14 +883,14 @@ func (cc *ClientConn) channelzMetric() *channelz.ChannelInternalMetric {
883883
}
884884
}
885885

886-
// Target returns the target string of the ClientConn.
886+
// Target returns the canonical target string of the ClientConn.
887887
//
888888
// # Experimental
889889
//
890890
// Notice: This API is EXPERIMENTAL and may be changed or removed in a
891891
// later release.
892892
func (cc *ClientConn) Target() string {
893-
return cc.target
893+
return cc.parsedTarget.String()
894894
}
895895

896896
func (cc *ClientConn) incrCallsStarted() {
@@ -1744,7 +1744,6 @@ func (cc *ClientConn) parseTargetAndFindResolver() error {
17441744
defScheme := resolver.GetDefaultScheme()
17451745
channelz.Infof(logger, cc.channelzID, "fallback to scheme %q", defScheme)
17461746
canonicalTarget := defScheme + ":///" + cc.target
1747-
17481747
parsedTarget, err = parseTarget(canonicalTarget)
17491748
if err != nil {
17501749
channelz.Infof(logger, cc.channelzID, "dial target %q parse failed: %v", canonicalTarget, err)

clientconn_test.go

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -808,15 +808,44 @@ func (s) TestMethodConfigDefaultService(t *testing.T) {
808808
}
809809
}
810810

811-
func (s) TestGetClientConnTarget(t *testing.T) {
812-
addr := "nonexist:///non.existent"
813-
cc, err := Dial(addr, WithTransportCredentials(insecure.NewCredentials()))
814-
if err != nil {
815-
t.Fatalf("Dial(%s, _) = _, %v, want _, <nil>", addr, err)
811+
func (s) TestClientConn_Target(t *testing.T) {
812+
tests := []struct {
813+
name string
814+
addr string
815+
targetWant string
816+
}{
817+
{
818+
name: "normal-case",
819+
addr: "dns://a.server.com/google.com",
820+
targetWant: "dns://a.server.com/google.com",
821+
},
822+
{
823+
name: "canonical-target-not-specified",
824+
addr: "no.scheme",
825+
targetWant: "passthrough:///no.scheme",
826+
},
827+
{
828+
name: "canonical-target-nonexistent",
829+
addr: "nonexist:///non.existent",
830+
targetWant: "passthrough:///nonexist:///non.existent",
831+
},
832+
{
833+
name: "canonical-target-add-colon-slash",
834+
addr: "dns:hostname:port",
835+
targetWant: "dns:///hostname:port",
836+
},
816837
}
817-
defer cc.Close()
818-
if cc.Target() != addr {
819-
t.Fatalf("Target() = %s, want %s", cc.Target(), addr)
838+
for _, test := range tests {
839+
t.Run(test.name, func(t *testing.T) {
840+
cc, err := Dial(test.addr, WithTransportCredentials(insecure.NewCredentials()))
841+
if err != nil {
842+
t.Fatalf("Dial(%s, _) = _, %v, want _, <nil>", test.addr, err)
843+
}
844+
defer cc.Close()
845+
if cc.Target() != test.targetWant {
846+
t.Fatalf("Target() = %s, want %s", cc.Target(), test.targetWant)
847+
}
848+
})
820849
}
821850
}
822851

resolver/resolver.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,9 +281,9 @@ func (t Target) Endpoint() string {
281281
return strings.TrimPrefix(endpoint, "/")
282282
}
283283

284-
// String returns a string representation of Target.
284+
// String returns the canonical string representation of Target.
285285
func (t Target) String() string {
286-
return t.URL.String()
286+
return t.URL.Scheme + "://" + t.URL.Host + "/" + t.Endpoint()
287287
}
288288

289289
// Builder creates a resolver that will be used to watch name resolution updates.

0 commit comments

Comments
 (0)