@@ -21,13 +21,15 @@ package grpc
21
21
import (
22
22
"context"
23
23
"errors"
24
+ "fmt"
24
25
"net"
25
26
"net/url"
26
27
"testing"
27
28
"time"
28
29
29
30
"github.com/google/go-cmp/cmp"
30
31
"google.golang.org/grpc/credentials/insecure"
32
+ "google.golang.org/grpc/internal/testutils"
31
33
32
34
"google.golang.org/grpc/resolver"
33
35
)
@@ -40,46 +42,46 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) {
40
42
wantParsed resolver.Target
41
43
}{
42
44
// No scheme is specified.
43
- {target : "://" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " ://" }},
44
- {target : ":///" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " :///" }},
45
- {target : "://a/" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " ://a/" }},
46
- {target : ":///a" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " :///a" }},
47
- {target : "://a/b" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " ://a/b" }},
48
- {target : "/" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : "/" }},
49
- {target : "a/b" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " a/b" }},
50
- {target : "a//b" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " a//b" }},
51
- {target : "google.com" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " google.com" }},
52
- {target : "google.com/?a=b" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " google.com/" }},
53
- {target : "/unix/socket/address" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : "/ unix/socket/address" }},
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")) }},
54
56
55
57
// An unregistered scheme is specified.
56
- {target : "a:///" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " a:///" }},
57
- {target : "a://b/" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " a://b/" }},
58
- {target : "a:///b" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " a:///b" }},
59
- {target : "a://b/c" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " a://b/c" }},
60
- {target : "a:b" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " a:b" }},
61
- {target : "a:/b" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " a:/b" }},
62
- {target : "a://b" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " a://b" }},
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")) }},
63
65
64
66
// A registered scheme is specified.
65
- {target : "dns:///google.com" , wantParsed : resolver.Target {Scheme : "dns" , Authority : "" , Endpoint : " google.com" }},
66
- {target : "dns://a.server.com/google.com" , wantParsed : resolver.Target {Scheme : "dns" , Authority : "a.server.com" , Endpoint : " google.com" }},
67
- {target : "dns://a.server.com/google.com/?a=b" , wantParsed : resolver.Target {Scheme : "dns" , Authority : "a.server.com" , Endpoint : " google.com/" }},
68
- {target : "unix:///a/b/c" , wantParsed : resolver.Target {Scheme : "unix" , Authority : "" , Endpoint : " a/b/c" }},
69
- {target : "unix-abstract:a/b/c" , wantParsed : resolver.Target {Scheme : "unix-abstract" , Authority : "" , Endpoint : " a/b/c" }},
70
- {target : "unix-abstract:a b" , wantParsed : resolver.Target {Scheme : "unix-abstract" , Authority : "" , Endpoint : " a b" }},
71
- {target : "unix-abstract:a:b" , wantParsed : resolver.Target {Scheme : "unix-abstract" , Authority : "" , Endpoint : " a:b" }},
72
- {target : "unix-abstract:a-b" , wantParsed : resolver.Target {Scheme : "unix-abstract" , Authority : "" , Endpoint : " a-b" }},
73
- {target : "unix-abstract:/ a///://::!@#$%25^&*()b" , wantParsed : resolver.Target {Scheme : "unix-abstract" , Authority : "" , Endpoint : " a///://::!@" }},
74
- {target : "unix-abstract:passthrough:abc" , wantParsed : resolver.Target {Scheme : "unix-abstract" , Authority : "" , Endpoint : " passthrough:abc" }},
75
- {target : "unix-abstract:unix:///abc" , wantParsed : resolver.Target {Scheme : "unix-abstract" , Authority : "" , Endpoint : "unix: ///abc" }},
76
- {target : "unix-abstract:///a/b/c" , wantParsed : resolver.Target {Scheme : "unix-abstract" , Authority : "" , Endpoint : " a/b/c" }},
77
- {target : "unix-abstract:///" , wantParsed : resolver.Target {Scheme : "unix-abstract" , Authority : "" , Endpoint : "" }},
78
- {target : "passthrough:///unix:///a/b/c" , wantParsed : resolver.Target {Scheme : "passthrough" , Authority : "" , Endpoint : " unix:///a/b/c" }},
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") }},
79
81
80
82
// Cases for `scheme:absolute-path`.
81
- {target : "dns:/a/b/c" , wantParsed : resolver.Target {Scheme : "dns" , Authority : "" , Endpoint : " a/b/c" }},
82
- {target : "unregistered:/a/b/c" , badScheme : true , wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : "unregistered:/a/b/c" }},
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" ) }},
83
85
}
84
86
85
87
for _ , test := range tests {
@@ -138,56 +140,56 @@ func (s) TestParsedTarget_WithCustomDialer(t *testing.T) {
138
140
// different behaviors with a custom dialer.
139
141
{
140
142
target : "unix:a/b/c" ,
141
- wantParsed : resolver.Target {Scheme : "unix" , Authority : "" , Endpoint : " a/b/c" },
143
+ wantParsed : resolver.Target {Scheme : "unix" , Authority : "" , URL : * testutils . MustParseURL ( "unix: a/b/c") },
142
144
wantDialerAddress : "unix:a/b/c" ,
143
145
},
144
146
{
145
147
target : "unix:/a/b/c" ,
146
- wantParsed : resolver.Target {Scheme : "unix" , Authority : "" , Endpoint : " a/b/c" },
148
+ wantParsed : resolver.Target {Scheme : "unix" , Authority : "" , URL : * testutils . MustParseURL ( "unix:/ a/b/c") },
147
149
wantDialerAddress : "unix:///a/b/c" ,
148
150
},
149
151
{
150
152
target : "unix:///a/b/c" ,
151
- wantParsed : resolver.Target {Scheme : "unix" , Authority : "" , Endpoint : " a/b/c" },
153
+ wantParsed : resolver.Target {Scheme : "unix" , Authority : "" , URL : * testutils . MustParseURL ( "unix:/// a/b/c") },
152
154
wantDialerAddress : "unix:///a/b/c" ,
153
155
},
154
156
{
155
157
target : "dns:///127.0.0.1:50051" ,
156
- wantParsed : resolver.Target {Scheme : "dns" , Authority : "" , Endpoint : " 127.0.0.1:50051" },
158
+ wantParsed : resolver.Target {Scheme : "dns" , Authority : "" , URL : * testutils . MustParseURL ( "dns:/// 127.0.0.1:50051") },
157
159
wantDialerAddress : "127.0.0.1:50051" ,
158
160
},
159
161
{
160
162
target : ":///127.0.0.1:50051" ,
161
163
badScheme : true ,
162
- wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " :///127.0.0.1:50051" },
164
+ wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , URL : * testutils . MustParseURL ( fmt . Sprintf ( "%s :///%s" , defScheme , ":/// 127.0.0.1:50051")) },
163
165
wantDialerAddress : ":///127.0.0.1:50051" ,
164
166
},
165
167
{
166
168
target : "dns://authority/127.0.0.1:50051" ,
167
- wantParsed : resolver.Target {Scheme : "dns" , Authority : "authority" , Endpoint : " 127.0.0.1:50051" },
169
+ wantParsed : resolver.Target {Scheme : "dns" , Authority : "authority" , URL : * testutils . MustParseURL ( "dns://authority/ 127.0.0.1:50051") },
168
170
wantDialerAddress : "127.0.0.1:50051" ,
169
171
},
170
172
{
171
173
target : "://authority/127.0.0.1:50051" ,
172
174
badScheme : true ,
173
- wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : " ://authority/127.0.0.1:50051" },
175
+ wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , URL : * testutils . MustParseURL ( fmt . Sprintf ( "%s :///%s" , defScheme , ":// authority/127.0.0.1:50051")) },
174
176
wantDialerAddress : "://authority/127.0.0.1:50051" ,
175
177
},
176
178
{
177
179
target : "/unix/socket/address" ,
178
180
badScheme : true ,
179
- wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : "/ unix/socket/address" },
181
+ wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , URL : * testutils . MustParseURL ( fmt . Sprintf ( "%s:///%s" , defScheme , "/ unix/socket/address")) },
180
182
wantDialerAddress : "/unix/socket/address" ,
181
183
},
182
184
{
183
185
target : "" ,
184
186
badScheme : true ,
185
- wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , Endpoint : "" },
187
+ wantParsed : resolver.Target {Scheme : defScheme , Authority : "" , URL : * testutils . MustParseURL ( fmt . Sprintf ( "%s:///%s" , defScheme , "" )) },
186
188
wantDialerAddress : "" ,
187
189
},
188
190
{
189
191
target : "passthrough://a.server.com/google.com" ,
190
- wantParsed : resolver.Target {Scheme : "passthrough" , Authority : "a.server.com" , Endpoint : " google.com" },
192
+ wantParsed : resolver.Target {Scheme : "passthrough" , Authority : "a.server.com" , URL : * testutils . MustParseURL ( "passthrough://a.server.com/ google.com") },
191
193
wantDialerAddress : "google.com" ,
192
194
},
193
195
}
0 commit comments