Skip to content

Commit 11feb0a

Browse files
authored
resolver: delete Target.Scheme and Target.Authority (#6363)
* Delete resolver.Target.Scheme and resolver.Target.Authority * cleanup - wrap block comments @ 80 columns
1 parent df3e021 commit 11feb0a

File tree

7 files changed

+71
-121
lines changed

7 files changed

+71
-121
lines changed

clientconn.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1807,19 +1807,15 @@ func (cc *ClientConn) parseTargetAndFindResolver() error {
18071807
}
18081808

18091809
// parseTarget uses RFC 3986 semantics to parse the given target into a
1810-
// resolver.Target struct containing scheme, authority and url. Query
1811-
// params are stripped from the endpoint.
1810+
// resolver.Target struct containing url. Query params are stripped from the
1811+
// endpoint.
18121812
func parseTarget(target string) (resolver.Target, error) {
18131813
u, err := url.Parse(target)
18141814
if err != nil {
18151815
return resolver.Target{}, err
18161816
}
18171817

1818-
return resolver.Target{
1819-
Scheme: u.Scheme,
1820-
Authority: u.Host,
1821-
URL: *u,
1822-
}, nil
1818+
return resolver.Target{URL: *u}, nil
18231819
}
18241820

18251821
// Determine channel authority. The order of precedence is as follows:

clientconn_parsed_target_test.go

Lines changed: 20 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
"errors"
2424
"fmt"
2525
"net"
26-
"net/url"
2726
"testing"
2827
"time"
2928

@@ -38,64 +37,29 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) {
3837
defScheme := resolver.GetDefaultScheme()
3938
tests := []struct {
4039
target string
41-
badScheme bool
4240
wantParsed resolver.Target
4341
}{
4442
// No scheme is specified.
45-
{target: "://", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "://"))}},
46-
{target: ":///", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, ":///"))}},
47-
{target: "://a/", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "://a/"))}},
48-
{target: ":///a", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, ":///a"))}},
49-
{target: "://a/b", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "://a/b"))}},
50-
{target: "/", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "/"))}},
51-
{target: "a/b", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "a/b"))}},
52-
{target: "a//b", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "a//b"))}},
53-
{target: "google.com", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "google.com"))}},
54-
{target: "google.com/?a=b", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "google.com/?a=b"))}},
55-
{target: "/unix/socket/address", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "/unix/socket/address"))}},
43+
{target: "://a/b", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "://a/b"))}},
44+
{target: "a//b", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "a//b"))}},
5645

5746
// An unregistered scheme is specified.
58-
{target: "a:///", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "a:///"))}},
59-
{target: "a://b/", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "a://b/"))}},
60-
{target: "a:///b", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "a:///b"))}},
61-
{target: "a://b/c", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "a://b/c"))}},
62-
{target: "a:b", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "a:b"))}},
63-
{target: "a:/b", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "a:/b"))}},
64-
{target: "a://b", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "a://b"))}},
47+
{target: "a:///", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "a:///"))}},
48+
{target: "a:b", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "a:b"))}},
6549

6650
// A registered scheme is specified.
67-
{target: "dns:///google.com", wantParsed: resolver.Target{Scheme: "dns", Authority: "", URL: *testutils.MustParseURL("dns:///google.com")}},
68-
{target: "dns://a.server.com/google.com", wantParsed: resolver.Target{Scheme: "dns", Authority: "a.server.com", URL: *testutils.MustParseURL("dns://a.server.com/google.com")}},
69-
{target: "dns://a.server.com/google.com/?a=b", wantParsed: resolver.Target{Scheme: "dns", Authority: "a.server.com", URL: *testutils.MustParseURL("dns://a.server.com/google.com/?a=b")}},
70-
{target: "unix:///a/b/c", wantParsed: resolver.Target{Scheme: "unix", Authority: "", URL: *testutils.MustParseURL("unix:///a/b/c")}},
71-
{target: "unix-abstract:a/b/c", wantParsed: resolver.Target{Scheme: "unix-abstract", Authority: "", URL: *testutils.MustParseURL("unix-abstract:a/b/c")}},
72-
{target: "unix-abstract:a b", wantParsed: resolver.Target{Scheme: "unix-abstract", Authority: "", URL: *testutils.MustParseURL("unix-abstract:a b")}},
73-
{target: "unix-abstract:a:b", wantParsed: resolver.Target{Scheme: "unix-abstract", Authority: "", URL: *testutils.MustParseURL("unix-abstract:a:b")}},
74-
{target: "unix-abstract:a-b", wantParsed: resolver.Target{Scheme: "unix-abstract", Authority: "", URL: *testutils.MustParseURL("unix-abstract:a-b")}},
75-
{target: "unix-abstract:/ a///://::!@#$%25^&*()b", wantParsed: resolver.Target{Scheme: "unix-abstract", Authority: "", URL: *testutils.MustParseURL("unix-abstract:/ a///://::!@#$%25^&*()b")}},
76-
{target: "unix-abstract:passthrough:abc", wantParsed: resolver.Target{Scheme: "unix-abstract", Authority: "", URL: *testutils.MustParseURL("unix-abstract:passthrough:abc")}},
77-
{target: "unix-abstract:unix:///abc", wantParsed: resolver.Target{Scheme: "unix-abstract", Authority: "", URL: *testutils.MustParseURL("unix-abstract:unix:///abc")}},
78-
{target: "unix-abstract:///a/b/c", wantParsed: resolver.Target{Scheme: "unix-abstract", Authority: "", URL: *testutils.MustParseURL("unix-abstract:///a/b/c")}},
79-
{target: "unix-abstract:///", wantParsed: resolver.Target{Scheme: "unix-abstract", Authority: "", URL: *testutils.MustParseURL("unix-abstract:///")}},
80-
{target: "passthrough:///unix:///a/b/c", wantParsed: resolver.Target{Scheme: "passthrough", Authority: "", URL: *testutils.MustParseURL("passthrough:///unix:///a/b/c")}},
51+
{target: "dns://a.server.com/google.com", wantParsed: resolver.Target{URL: *testutils.MustParseURL("dns://a.server.com/google.com")}},
52+
{target: "unix-abstract:/ a///://::!@#$%25^&*()b", wantParsed: resolver.Target{URL: *testutils.MustParseURL("unix-abstract:/ a///://::!@#$%25^&*()b")}},
53+
{target: "unix-abstract:passthrough:abc", wantParsed: resolver.Target{URL: *testutils.MustParseURL("unix-abstract:passthrough:abc")}},
54+
{target: "passthrough:///unix:///a/b/c", wantParsed: resolver.Target{URL: *testutils.MustParseURL("passthrough:///unix:///a/b/c")}},
8155

8256
// Cases for `scheme:absolute-path`.
83-
{target: "dns:/a/b/c", wantParsed: resolver.Target{Scheme: "dns", Authority: "", URL: *testutils.MustParseURL("dns:/a/b/c")}},
84-
{target: "unregistered:/a/b/c", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL("unregistered:/a/b/c")}},
57+
{target: "dns:/a/b/c", wantParsed: resolver.Target{URL: *testutils.MustParseURL("dns:/a/b/c")}},
58+
{target: "unregistered:/a/b/c", wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "unregistered:/a/b/c"))}},
8559
}
8660

8761
for _, test := range tests {
8862
t.Run(test.target, func(t *testing.T) {
89-
target := test.target
90-
if test.badScheme {
91-
target = defScheme + ":///" + target
92-
}
93-
url, err := url.Parse(target)
94-
if err != nil {
95-
t.Fatalf("Unexpected error parsing URL: %v", err)
96-
}
97-
test.wantParsed.URL = *url
98-
9963
cc, err := Dial(test.target, WithTransportCredentials(insecure.NewCredentials()))
10064
if err != nil {
10165
t.Fatalf("Dial(%q) failed: %v", test.target, err)
@@ -132,80 +96,65 @@ func (s) TestParsedTarget_WithCustomDialer(t *testing.T) {
13296
defScheme := resolver.GetDefaultScheme()
13397
tests := []struct {
13498
target string
135-
badScheme bool
13699
wantParsed resolver.Target
137100
wantDialerAddress string
138101
}{
139102
// unix:[local_path], unix:[/absolute], and unix://[/absolute] have
140103
// different behaviors with a custom dialer.
141104
{
142105
target: "unix:a/b/c",
143-
wantParsed: resolver.Target{Scheme: "unix", Authority: "", URL: *testutils.MustParseURL("unix:a/b/c")},
106+
wantParsed: resolver.Target{URL: *testutils.MustParseURL("unix:a/b/c")},
144107
wantDialerAddress: "unix:a/b/c",
145108
},
146109
{
147110
target: "unix:/a/b/c",
148-
wantParsed: resolver.Target{Scheme: "unix", Authority: "", URL: *testutils.MustParseURL("unix:/a/b/c")},
111+
wantParsed: resolver.Target{URL: *testutils.MustParseURL("unix:/a/b/c")},
149112
wantDialerAddress: "unix:///a/b/c",
150113
},
151114
{
152115
target: "unix:///a/b/c",
153-
wantParsed: resolver.Target{Scheme: "unix", Authority: "", URL: *testutils.MustParseURL("unix:///a/b/c")},
116+
wantParsed: resolver.Target{URL: *testutils.MustParseURL("unix:///a/b/c")},
154117
wantDialerAddress: "unix:///a/b/c",
155118
},
156119
{
157120
target: "dns:///127.0.0.1:50051",
158-
wantParsed: resolver.Target{Scheme: "dns", Authority: "", URL: *testutils.MustParseURL("dns:///127.0.0.1:50051")},
121+
wantParsed: resolver.Target{URL: *testutils.MustParseURL("dns:///127.0.0.1:50051")},
159122
wantDialerAddress: "127.0.0.1:50051",
160123
},
161124
{
162125
target: ":///127.0.0.1:50051",
163-
badScheme: true,
164-
wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, ":///127.0.0.1:50051"))},
126+
wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, ":///127.0.0.1:50051"))},
165127
wantDialerAddress: ":///127.0.0.1:50051",
166128
},
167129
{
168130
target: "dns://authority/127.0.0.1:50051",
169-
wantParsed: resolver.Target{Scheme: "dns", Authority: "authority", URL: *testutils.MustParseURL("dns://authority/127.0.0.1:50051")},
131+
wantParsed: resolver.Target{URL: *testutils.MustParseURL("dns://authority/127.0.0.1:50051")},
170132
wantDialerAddress: "127.0.0.1:50051",
171133
},
172134
{
173135
target: "://authority/127.0.0.1:50051",
174-
badScheme: true,
175-
wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "://authority/127.0.0.1:50051"))},
136+
wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "://authority/127.0.0.1:50051"))},
176137
wantDialerAddress: "://authority/127.0.0.1:50051",
177138
},
178139
{
179140
target: "/unix/socket/address",
180-
badScheme: true,
181-
wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "/unix/socket/address"))},
141+
wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, "/unix/socket/address"))},
182142
wantDialerAddress: "/unix/socket/address",
183143
},
184144
{
185145
target: "",
186-
badScheme: true,
187-
wantParsed: resolver.Target{Scheme: defScheme, Authority: "", URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, ""))},
146+
wantParsed: resolver.Target{URL: *testutils.MustParseURL(fmt.Sprintf("%s:///%s", defScheme, ""))},
188147
wantDialerAddress: "",
189148
},
190149
{
191150
target: "passthrough://a.server.com/google.com",
192-
wantParsed: resolver.Target{Scheme: "passthrough", Authority: "a.server.com", URL: *testutils.MustParseURL("passthrough://a.server.com/google.com")},
151+
wantParsed: resolver.Target{URL: *testutils.MustParseURL("passthrough://a.server.com/google.com")},
193152
wantDialerAddress: "google.com",
194153
},
195154
}
196155

197156
for _, test := range tests {
198157
t.Run(test.target, func(t *testing.T) {
199-
target := test.target
200-
if test.badScheme {
201-
target = defScheme + ":///" + target
202-
}
203-
url, err := url.Parse(target)
204-
if err != nil {
205-
t.Fatalf("Unexpected error parsing URL: %v", err)
206-
}
207-
test.wantParsed.URL = *url
208-
209158
addrCh := make(chan string, 1)
210159
dialer := func(ctx context.Context, address string) (net.Conn, error) {
211160
addrCh <- address

0 commit comments

Comments
 (0)