From c267d5bbebb70a12ed36c67aeca02083287a5a4b Mon Sep 17 00:00:00 2001 From: Arvind Bright Date: Wed, 28 Feb 2024 11:07:49 -0800 Subject: [PATCH] grpc: add clientconn.CanonicalTarget() to return the canonical target string (#7006) --- clientconn.go | 13 +++++++------ clientconn_test.go | 39 +++++++++++++++++++++------------------ 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/clientconn.go b/clientconn.go index 00934c38a145..1f595628171a 100644 --- a/clientconn.go +++ b/clientconn.go @@ -883,13 +883,13 @@ func (cc *ClientConn) channelzMetric() *channelz.ChannelInternalMetric { } } -// Target returns the canonical target string of the ClientConn. -// -// # Experimental -// -// Notice: This API is EXPERIMENTAL and may be changed or removed in a -// later release. +// Target returns the target string of the ClientConn. func (cc *ClientConn) Target() string { + return cc.target +} + +// CanonicalTarget returns the canonical target string of the ClientConn. +func (cc *ClientConn) CanonicalTarget() string { return cc.parsedTarget.String() } @@ -1744,6 +1744,7 @@ func (cc *ClientConn) parseTargetAndFindResolver() error { defScheme := resolver.GetDefaultScheme() channelz.Infof(logger, cc.channelzID, "fallback to scheme %q", defScheme) canonicalTarget := defScheme + ":///" + cc.target + parsedTarget, err = parseTarget(canonicalTarget) if err != nil { channelz.Infof(logger, cc.channelzID, "dial target %q parse failed: %v", canonicalTarget, err) diff --git a/clientconn_test.go b/clientconn_test.go index 96e2d8d028d6..34d22c684eee 100644 --- a/clientconn_test.go +++ b/clientconn_test.go @@ -808,31 +808,31 @@ func (s) TestMethodConfigDefaultService(t *testing.T) { } } -func (s) TestClientConn_Target(t *testing.T) { +func (s) TestClientConnCanonicalTarget(t *testing.T) { tests := []struct { - name string - addr string - targetWant string + name string + addr string + canonicalTargetWant string }{ { - name: "normal-case", - addr: "dns://a.server.com/google.com", - targetWant: "dns://a.server.com/google.com", + name: "normal-case", + addr: "dns://a.server.com/google.com", + canonicalTargetWant: "dns://a.server.com/google.com", }, { - name: "canonical-target-not-specified", - addr: "no.scheme", - targetWant: "passthrough:///no.scheme", + name: "canonical-target-not-specified", + addr: "no.scheme", + canonicalTargetWant: "passthrough:///no.scheme", }, { - name: "canonical-target-nonexistent", - addr: "nonexist:///non.existent", - targetWant: "passthrough:///nonexist:///non.existent", + name: "canonical-target-nonexistent", + addr: "nonexist:///non.existent", + canonicalTargetWant: "passthrough:///nonexist:///non.existent", }, { - name: "canonical-target-add-colon-slash", - addr: "dns:hostname:port", - targetWant: "dns:///hostname:port", + name: "canonical-target-add-colon-slash", + addr: "dns:hostname:port", + canonicalTargetWant: "dns:///hostname:port", }, } for _, test := range tests { @@ -842,8 +842,11 @@ func (s) TestClientConn_Target(t *testing.T) { t.Fatalf("Dial(%s, _) = _, %v, want _, ", test.addr, err) } defer cc.Close() - if cc.Target() != test.targetWant { - t.Fatalf("Target() = %s, want %s", cc.Target(), test.targetWant) + if cc.Target() != test.addr { + t.Fatalf("Target() = %s, want %s", cc.Target(), test.addr) + } + if cc.CanonicalTarget() != test.canonicalTargetWant { + t.Fatalf("CanonicalTarget() = %s, want %s", cc.CanonicalTarget(), test.canonicalTargetWant) } }) }