@@ -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