Skip to content

Commit bb0c8c5

Browse files
committed
resolver: separate target validation error tests
1 parent 46395c3 commit bb0c8c5

1 file changed

Lines changed: 41 additions & 34 deletions

File tree

internal/resolver/target_test.go

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -32,74 +32,81 @@ import (
3232

3333
func TestValidateTargetURI(t *testing.T) {
3434
tests := []struct {
35-
desc string
36-
target string
37-
wantErr bool
35+
desc string
36+
target string
3837
}{
3938
{
40-
desc: "registered scheme with authority and endpoint",
41-
target: "dns:///endpoint",
42-
wantErr: false,
39+
desc: "registered scheme with authority and endpoint",
40+
target: "dns:///endpoint",
4341
},
4442
{
45-
desc: "uppercase registered scheme is canonicalized to lowercase",
46-
target: "DNS:///endpoint",
47-
wantErr: false,
43+
desc: "uppercase registered scheme is canonicalized to lowercase",
44+
target: "DNS:///endpoint",
4845
},
4946
{
50-
desc: "host:port without scheme falls back to default scheme",
51-
target: "my-service:50051",
52-
wantErr: false,
47+
desc: "host:port without scheme falls back to default scheme",
48+
target: "my-service:50051",
5349
},
5450
{
55-
desc: "dotted host:port without scheme falls back to default scheme",
56-
target: "trafficdirector.googleapis.com:443",
57-
wantErr: false,
51+
desc: "dotted host:port without scheme falls back to default scheme",
52+
target: "trafficdirector.googleapis.com:443",
5853
},
5954
{
60-
desc: "IP:port without scheme falls back to default scheme",
61-
target: "127.0.0.1:443",
62-
wantErr: false,
55+
desc: "IP:port without scheme falls back to default scheme",
56+
target: "127.0.0.1:443",
6357
},
6458
{
65-
desc: "registered-scheme opaque form falls back to default scheme",
66-
target: "dns:endpoint",
67-
wantErr: false,
59+
desc: "registered-scheme opaque form falls back to default scheme",
60+
target: "dns:endpoint",
6861
},
6962
{
70-
desc: "unparseable URI is accepted after default-scheme fallback",
71-
target: "://bad",
72-
wantErr: false,
63+
desc: "unparseable URI is accepted after default-scheme fallback",
64+
target: "://bad",
7365
},
7466
{
75-
desc: "absolute path with empty scheme uses default scheme",
76-
target: "/var/run/foo.sock",
77-
wantErr: false,
67+
desc: "absolute path with empty scheme uses default scheme",
68+
target: "/var/run/foo.sock",
7869
},
70+
}
71+
for _, tc := range tests {
72+
t.Run(tc.desc, func(t *testing.T) {
73+
if err := ValidateTargetURI(tc.target); err != nil {
74+
t.Fatalf("ValidateTargetURI(%q) = %v, want nil", tc.target, err)
75+
}
76+
})
77+
}
78+
}
79+
80+
func TestValidateTargetURI_Error(t *testing.T) {
81+
tests := []struct {
82+
desc string
83+
target string
84+
wantErr string
85+
}{
7986
{
8087
desc: "invalid percent-escape fails initial and fallback parsing",
8188
target: "%zz",
82-
wantErr: true,
89+
wantErr: "invalid URL escape",
8390
},
8491
{
8592
desc: "empty target is rejected",
8693
target: "",
87-
wantErr: true,
94+
wantErr: "target URI cannot be empty",
8895
},
8996
{
9097
desc: "authority-form URI with unregistered scheme is rejected to surface typos",
9198
target: "no-such-scheme:///endpoint",
92-
wantErr: true,
99+
wantErr: `uses scheme "no-such-scheme" which has no registered resolver`,
93100
},
94101
}
95102
for _, tc := range tests {
96103
t.Run(tc.desc, func(t *testing.T) {
97104
err := ValidateTargetURI(tc.target)
98-
if (err != nil) != tc.wantErr {
99-
t.Fatalf("ValidateTargetURI(%q) = %v, wantErr %v", tc.target, err, tc.wantErr)
105+
if err == nil {
106+
t.Fatalf("ValidateTargetURI(%q) succeeded, want error containing %q", tc.target, tc.wantErr)
100107
}
101-
if err != nil && !strings.Contains(err.Error(), tc.target) && tc.target != "" {
102-
t.Errorf("ValidateTargetURI(%q) error %q does not mention target", tc.target, err)
108+
if !strings.Contains(err.Error(), tc.wantErr) {
109+
t.Fatalf("ValidateTargetURI(%q) = %v, want error containing %q", tc.target, err, tc.wantErr)
103110
}
104111
})
105112
}

0 commit comments

Comments
 (0)