Skip to content

Commit 08d4170

Browse files
committed
add new API to return canonical target String
1 parent 586a39d commit 08d4170

File tree

3 files changed

+52
-10
lines changed

3 files changed

+52
-10
lines changed

clientconn.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,16 @@ func (cc *ClientConn) Target() string {
893893
return cc.target
894894
}
895895

896+
// CanonicalTarget returns the canonical target string of the ClientConn.
897+
//
898+
// # Experimental
899+
//
900+
// Notice: This API is EXPERIMENTAL and may be changed or removed in a later
901+
// release.
902+
func (cc *ClientConn) CanonicalTarget() string {
903+
return cc.parsedTarget.String()
904+
}
905+
896906
func (cc *ClientConn) incrCallsStarted() {
897907
atomic.AddInt64(&cc.czData.callsStarted, 1)
898908
atomic.StoreInt64(&cc.czData.lastCallStartedTime, time.Now().UnixNano())

clientconn_test.go

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -808,15 +808,47 @@ 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) TestClientConnCanonicalTarget(t *testing.T) {
812+
tests := []struct {
813+
name string
814+
addr string
815+
canonicalTargetWant string
816+
}{
817+
{
818+
name: "normal-case",
819+
addr: "dns://a.server.com/google.com",
820+
canonicalTargetWant: "dns://a.server.com/google.com",
821+
},
822+
{
823+
name: "canonical-target-not-specified",
824+
addr: "no.scheme",
825+
canonicalTargetWant: "passthrough:///no.scheme",
826+
},
827+
{
828+
name: "canonical-target-nonexistent",
829+
addr: "nonexist:///non.existent",
830+
canonicalTargetWant: "passthrough:///nonexist:///non.existent",
831+
},
832+
{
833+
name: "canonical-target-add-colon-slash",
834+
addr: "dns:hostname:port",
835+
canonicalTargetWant: "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.addr {
846+
t.Fatalf("Target() = %s, want %s", cc.Target(), test.addr)
847+
}
848+
if cc.CanonicalTarget() != test.canonicalTargetWant {
849+
t.Fatalf("CanonicalTarget() = %s, want %s", cc.CanonicalTarget(), test.canonicalTargetWant)
850+
}
851+
})
820852
}
821853
}
822854

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)