netutil_test.go (etcd-3.5.5) | : | netutil_test.go (etcd-3.5.6) | ||
---|---|---|---|---|
skipping to change at line 20 | skipping to change at line 20 | |||
// distributed under the License is distributed on an "AS IS" BASIS, | // distributed under the License is distributed on an "AS IS" BASIS, | |||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
// See the License for the specific language governing permissions and | // See the License for the specific language governing permissions and | |||
// limitations under the License. | // limitations under the License. | |||
package netutil | package netutil | |||
import ( | import ( | |||
"context" | "context" | |||
"errors" | "errors" | |||
"fmt" | ||||
"net" | "net" | |||
"net/url" | "net/url" | |||
"reflect" | "reflect" | |||
"strconv" | "strconv" | |||
"testing" | "testing" | |||
"time" | "time" | |||
"go.uber.org/zap" | "go.uber.org/zap" | |||
) | ) | |||
skipping to change at line 169 | skipping to change at line 170 | |||
return nil, errors.New("cannot resolve host.") | return nil, errors.New("cannot resolve host.") | |||
} | } | |||
i, err := strconv.Atoi(port) | i, err := strconv.Atoi(port) | |||
if err != nil { | if err != nil { | |||
return nil, err | return nil, err | |||
} | } | |||
return &net.TCPAddr{IP: net.ParseIP(hostm[host]), Port: i, Zone: ""}, nil | return &net.TCPAddr{IP: net.ParseIP(hostm[host]), Port: i, Zone: ""}, nil | |||
} | } | |||
tests := []struct { | tests := []struct { | |||
n int | ||||
a []url.URL | a []url.URL | |||
b []url.URL | b []url.URL | |||
expect bool | expect bool | |||
err error | err error | |||
}{ | }{ | |||
{ | { | |||
n: 0, | ||||
a: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }}, | a: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }}, | |||
b: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }}, | b: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }}, | |||
expect: true, | expect: true, | |||
}, | }, | |||
{ | { | |||
n: 1, | ||||
a: []url.URL{{Scheme: "http", Host: "example.com:237 9"}}, | a: []url.URL{{Scheme: "http", Host: "example.com:237 9"}}, | |||
b: []url.URL{{Scheme: "http", Host: "10.0.10.1:2379" }}, | b: []url.URL{{Scheme: "http", Host: "10.0.10.1:2379" }}, | |||
expect: true, | expect: true, | |||
}, | }, | |||
{ | { | |||
n: 2, | ||||
a: []url.URL{{Scheme: "http", Host: "example.com:237 9"}}, | a: []url.URL{{Scheme: "http", Host: "example.com:237 9"}}, | |||
b: []url.URL{{Scheme: "https", Host: "10.0.10.1:2379 "}}, | b: []url.URL{{Scheme: "https", Host: "10.0.10.1:2379 "}}, | |||
expect: false, | expect: false, | |||
err: errors.New(`"http://10.0.10.1:2379"(resolved from "http://example.com:2379") != "https://10.0.10.1:2379"(resolved from "https://1 0.0.10.1:2379")`), | err: errors.New(`resolved urls: "http://10.0.10.1:2379 " != "https://10.0.10.1:2379"`), | |||
}, | }, | |||
{ | { | |||
n: 3, | ||||
a: []url.URL{{Scheme: "https", Host: "example.com:23 79"}}, | a: []url.URL{{Scheme: "https", Host: "example.com:23 79"}}, | |||
b: []url.URL{{Scheme: "http", Host: "10.0.10.1:2379" }}, | b: []url.URL{{Scheme: "http", Host: "10.0.10.1:2379" }}, | |||
expect: false, | expect: false, | |||
err: errors.New(`"https://10.0.10.1:2379"(resolved fro m "https://example.com:2379") != "http://10.0.10.1:2379"(resolved from "http://1 0.0.10.1:2379")`), | err: errors.New(`resolved urls: "https://10.0.10.1:237 9" != "http://10.0.10.1:2379"`), | |||
}, | }, | |||
{ | { | |||
n: 4, | ||||
a: []url.URL{{Scheme: "unix", Host: "abc:2379"}}, | a: []url.URL{{Scheme: "unix", Host: "abc:2379"}}, | |||
b: []url.URL{{Scheme: "unix", Host: "abc:2379"}}, | b: []url.URL{{Scheme: "unix", Host: "abc:2379"}}, | |||
expect: true, | expect: true, | |||
}, | }, | |||
{ | { | |||
n: 5, | ||||
a: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | a: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
b: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | b: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
expect: true, | expect: true, | |||
}, | }, | |||
{ | { | |||
n: 6, | ||||
a: []url.URL{{Scheme: "http", Host: "example.com:237 9"}, {Scheme: "http", Host: "127.0.0.1:2380"}}, | a: []url.URL{{Scheme: "http", Host: "example.com:237 9"}, {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
b: []url.URL{{Scheme: "http", Host: "example.com:237 9"}, {Scheme: "http", Host: "127.0.0.1:2380"}}, | b: []url.URL{{Scheme: "http", Host: "example.com:237 9"}, {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
expect: true, | expect: true, | |||
}, | }, | |||
{ | { | |||
n: 7, | ||||
a: []url.URL{{Scheme: "http", Host: "10.0.10.1:2379" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | a: []url.URL{{Scheme: "http", Host: "10.0.10.1:2379" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
b: []url.URL{{Scheme: "http", Host: "example.com:237 9"}, {Scheme: "http", Host: "127.0.0.1:2380"}}, | b: []url.URL{{Scheme: "http", Host: "example.com:237 9"}, {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
expect: true, | expect: true, | |||
}, | }, | |||
{ | { | |||
n: 8, | ||||
a: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }}, | a: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }}, | |||
b: []url.URL{{Scheme: "http", Host: "127.0.0.1:2380" }}, | b: []url.URL{{Scheme: "http", Host: "127.0.0.1:2380" }}, | |||
expect: false, | expect: false, | |||
err: errors.New(`"http://127.0.0.1:2379"(resolved from "http://127.0.0.1:2379") != "http://127.0.0.1:2380"(resolved from "http://127.0 .0.1:2380")`), | err: errors.New(`resolved urls: "http://127.0.0.1:2379 " != "http://127.0.0.1:2380"`), | |||
}, | }, | |||
{ | { | |||
n: 9, | ||||
a: []url.URL{{Scheme: "http", Host: "example.com:238 0"}}, | a: []url.URL{{Scheme: "http", Host: "example.com:238 0"}}, | |||
b: []url.URL{{Scheme: "http", Host: "10.0.10.1:2379" }}, | b: []url.URL{{Scheme: "http", Host: "10.0.10.1:2379" }}, | |||
expect: false, | expect: false, | |||
err: errors.New(`"http://10.0.10.1:2380"(resolved from "http://example.com:2380") != "http://10.0.10.1:2379"(resolved from "http://10. 0.10.1:2379")`), | err: errors.New(`resolved urls: "http://10.0.10.1:2380 " != "http://10.0.10.1:2379"`), | |||
}, | }, | |||
{ | { | |||
n: 10, | ||||
a: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }}, | a: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }}, | |||
b: []url.URL{{Scheme: "http", Host: "10.0.0.1:2379"} }, | b: []url.URL{{Scheme: "http", Host: "10.0.0.1:2379"} }, | |||
expect: false, | expect: false, | |||
err: errors.New(`"http://127.0.0.1:2379"(resolved from "http://127.0.0.1:2379") != "http://10.0.0.1:2379"(resolved from "http://10.0.0 .1:2379")`), | err: errors.New(`resolved urls: "http://127.0.0.1:2379 " != "http://10.0.0.1:2379"`), | |||
}, | }, | |||
{ | { | |||
n: 11, | ||||
a: []url.URL{{Scheme: "http", Host: "example.com:237 9"}}, | a: []url.URL{{Scheme: "http", Host: "example.com:237 9"}}, | |||
b: []url.URL{{Scheme: "http", Host: "10.0.0.1:2379"} }, | b: []url.URL{{Scheme: "http", Host: "10.0.0.1:2379"} }, | |||
expect: false, | expect: false, | |||
err: errors.New(`"http://10.0.10.1:2379"(resolved from "http://example.com:2379") != "http://10.0.0.1:2379"(resolved from "http://10.0 .0.1:2379")`), | err: errors.New(`resolved urls: "http://10.0.10.1:2379 " != "http://10.0.0.1:2379"`), | |||
}, | }, | |||
{ | { | |||
n: 12, | ||||
a: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | a: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
b: []url.URL{{Scheme: "http", Host: "127.0.0.1:2380" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | b: []url.URL{{Scheme: "http", Host: "127.0.0.1:2380" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
expect: false, | expect: false, | |||
err: errors.New(`"http://127.0.0.1:2379"(resolved from "http://127.0.0.1:2379") != "http://127.0.0.1:2380"(resolved from "http://127.0 .0.1:2380")`), | err: errors.New(`resolved urls: "http://127.0.0.1:2379 " != "http://127.0.0.1:2380"`), | |||
}, | }, | |||
{ | { | |||
n: 13, | ||||
a: []url.URL{{Scheme: "http", Host: "example.com:237 9"}, {Scheme: "http", Host: "127.0.0.1:2380"}}, | a: []url.URL{{Scheme: "http", Host: "example.com:237 9"}, {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
b: []url.URL{{Scheme: "http", Host: "127.0.0.1:2380" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | b: []url.URL{{Scheme: "http", Host: "127.0.0.1:2380" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
expect: false, | expect: false, | |||
err: errors.New(`"http://10.0.10.1:2379"(resolved from "http://example.com:2379") != "http://127.0.0.1:2380"(resolved from "http://127 .0.0.1:2380")`), | err: errors.New(`resolved urls: "http://10.0.10.1:2379 " != "http://127.0.0.1:2380"`), | |||
}, | }, | |||
{ | { | |||
n: 14, | ||||
a: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | a: []url.URL{{Scheme: "http", Host: "127.0.0.1:2379" }, {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
b: []url.URL{{Scheme: "http", Host: "10.0.0.1:2379"} , {Scheme: "http", Host: "127.0.0.1:2380"}}, | b: []url.URL{{Scheme: "http", Host: "10.0.0.1:2379"} , {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
expect: false, | expect: false, | |||
err: errors.New(`"http://127.0.0.1:2379"(resolved from "http://127.0.0.1:2379") != "http://10.0.0.1:2379"(resolved from "http://10.0.0 .1:2379")`), | err: errors.New(`resolved urls: "http://127.0.0.1:2379 " != "http://10.0.0.1:2379"`), | |||
}, | }, | |||
{ | { | |||
n: 15, | ||||
a: []url.URL{{Scheme: "http", Host: "example.com:237 9"}, {Scheme: "http", Host: "127.0.0.1:2380"}}, | a: []url.URL{{Scheme: "http", Host: "example.com:237 9"}, {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
b: []url.URL{{Scheme: "http", Host: "10.0.0.1:2379"} , {Scheme: "http", Host: "127.0.0.1:2380"}}, | b: []url.URL{{Scheme: "http", Host: "10.0.0.1:2379"} , {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
expect: false, | expect: false, | |||
err: errors.New(`"http://10.0.10.1:2379"(resolved from "http://example.com:2379") != "http://10.0.0.1:2379"(resolved from "http://10.0 .0.1:2379")`), | err: errors.New(`resolved urls: "http://10.0.10.1:2379 " != "http://10.0.0.1:2379"`), | |||
}, | }, | |||
{ | { | |||
n: 16, | ||||
a: []url.URL{{Scheme: "http", Host: "10.0.0.1:2379"} }, | a: []url.URL{{Scheme: "http", Host: "10.0.0.1:2379"} }, | |||
b: []url.URL{{Scheme: "http", Host: "10.0.0.1:2379"} , {Scheme: "http", Host: "127.0.0.1:2380"}}, | b: []url.URL{{Scheme: "http", Host: "10.0.0.1:2379"} , {Scheme: "http", Host: "127.0.0.1:2380"}}, | |||
expect: false, | expect: false, | |||
err: errors.New(`len(["http://10.0.0.1:2379"]) != len( ["http://10.0.0.1:2379" "http://127.0.0.1:2380"])`), | err: errors.New(`len(["http://10.0.0.1:2379"]) != len( ["http://10.0.0.1:2379" "http://127.0.0.1:2380"])`), | |||
}, | }, | |||
{ | { | |||
n: 17, | ||||
a: []url.URL{{Scheme: "http", Host: "first.com:2379" }, {Scheme: "http", Host: "second.com:2380"}}, | a: []url.URL{{Scheme: "http", Host: "first.com:2379" }, {Scheme: "http", Host: "second.com:2380"}}, | |||
b: []url.URL{{Scheme: "http", Host: "10.0.11.1:2379" }, {Scheme: "http", Host: "10.0.11.2:2380"}}, | b: []url.URL{{Scheme: "http", Host: "10.0.11.1:2379" }, {Scheme: "http", Host: "10.0.11.2:2380"}}, | |||
expect: true, | expect: true, | |||
}, | }, | |||
{ | { | |||
n: 18, | ||||
a: []url.URL{{Scheme: "http", Host: "second.com:2380 "}, {Scheme: "http", Host: "first.com:2379"}}, | a: []url.URL{{Scheme: "http", Host: "second.com:2380 "}, {Scheme: "http", Host: "first.com:2379"}}, | |||
b: []url.URL{{Scheme: "http", Host: "10.0.11.1:2379" }, {Scheme: "http", Host: "10.0.11.2:2380"}}, | b: []url.URL{{Scheme: "http", Host: "10.0.11.1:2379" }, {Scheme: "http", Host: "10.0.11.2:2380"}}, | |||
expect: true, | expect: true, | |||
}, | }, | |||
} | } | |||
for i, test := range tests { | for i, test := range tests { | |||
result, err := urlsEqual(context.TODO(), zap.NewExample(), test.a , test.b) | result, err := urlsEqual(context.TODO(), zap.NewExample(), test.a , test.b) | |||
if result != test.expect { | if result != test.expect { | |||
t.Errorf("#%d: a:%v b:%v, expected %v but %v", i, test.a, test.b, test.expect, result) | t.Errorf("idx=%d #%d: a:%v b:%v, expected %v but %v", i, test.n, test.a, test.b, test.expect, result) | |||
} | } | |||
if test.err != nil { | if test.err != nil { | |||
if err.Error() != test.err.Error() { | if err.Error() != test.err.Error() { | |||
t.Errorf("#%d: err expected %v but %v", i, test.e rr, err) | t.Errorf("idx=%d #%d: err expected %v but %v", i, test.n, test.err, err) | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
func TestURLStringsEqual(t *testing.T) { | func TestURLStringsEqual(t *testing.T) { | |||
result, err := URLStringsEqual(context.TODO(), zap.NewExample(), []string | defer func() { resolveTCPAddr = resolveTCPAddrDefault }() | |||
{"http://127.0.0.1:8080"}, []string{"http://127.0.0.1:8080"}) | errOnResolve := func(ctx context.Context, addr string) (*net.TCPAddr, err | |||
if !result { | or) { | |||
t.Errorf("unexpected result %v", result) | return nil, fmt.Errorf("unexpected attempt to resolve: %q", addr) | |||
} | ||||
cases := []struct { | ||||
urlsA []string | ||||
urlsB []string | ||||
resolver func(ctx context.Context, addr string) (*net.TCPAddr, er | ||||
ror) | ||||
}{ | ||||
{[]string{"http://127.0.0.1:8080"}, []string{"http://127.0.0.1:80 | ||||
80"}, resolveTCPAddrDefault}, | ||||
{[]string{ | ||||
"http://host1:8080", | ||||
"http://host2:8080", | ||||
}, []string{ | ||||
"http://host1:8080", | ||||
"http://host2:8080", | ||||
}, errOnResolve}, | ||||
} | } | |||
if err != nil { | for idx, c := range cases { | |||
t.Errorf("unexpected error %v", err) | t.Logf("TestURLStringsEqual, case #%d", idx) | |||
resolveTCPAddr = c.resolver | ||||
result, err := URLStringsEqual(context.TODO(), zap.NewExample(), | ||||
c.urlsA, c.urlsB) | ||||
if !result { | ||||
t.Errorf("unexpected result %v", result) | ||||
} | ||||
if err != nil { | ||||
t.Errorf("unexpected error %v", err) | ||||
} | ||||
} | } | |||
} | } | |||
End of changes. 35 change blocks. | ||||
18 lines changed or deleted | 64 lines changed or added |