mirror of
https://github.com/golang/go
synced 2024-10-05 18:21:21 -06:00
654f35865f
Having a trailing dot in the string doesn't really simplify the checking loop in isDomainName. Avoid this unnecessary allocation. Also make the valid domain names more explicit by adding some more test cases. benchmark old ns/op new ns/op delta BenchmarkDNSNames 2420.0 983.0 -59.38% benchmark old allocs new allocs delta BenchmarkDNSNames 12 0 -100.00% benchmark old bytes new bytes delta BenchmarkDNSNames 336 0 -100.00% R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/12662043
84 lines
1.7 KiB
Go
84 lines
1.7 KiB
Go
// Copyright 2009 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package net
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
type testCase struct {
|
|
name string
|
|
result bool
|
|
}
|
|
|
|
var tests = []testCase{
|
|
// RFC2181, section 11.
|
|
{"_xmpp-server._tcp.google.com", true},
|
|
{"foo.com", true},
|
|
{"1foo.com", true},
|
|
{"26.0.0.73.com", true},
|
|
{"fo-o.com", true},
|
|
{"fo1o.com", true},
|
|
{"foo1.com", true},
|
|
{"a.b..com", false},
|
|
{"a.b-.com", false},
|
|
{"a.b.com-", false},
|
|
{"a.b..", false},
|
|
{"b.com.", true},
|
|
}
|
|
|
|
func getTestCases(ch chan<- testCase) {
|
|
defer close(ch)
|
|
var char59 = ""
|
|
var char63 = ""
|
|
var char64 = ""
|
|
for i := 0; i < 59; i++ {
|
|
char59 += "a"
|
|
}
|
|
char63 = char59 + "aaaa"
|
|
char64 = char63 + "a"
|
|
|
|
for _, tc := range tests {
|
|
ch <- tc
|
|
}
|
|
|
|
ch <- testCase{char63 + ".com", true}
|
|
ch <- testCase{char64 + ".com", false}
|
|
// 255 char name is fine:
|
|
ch <- testCase{char59 + "." + char63 + "." + char63 + "." +
|
|
char63 + ".com",
|
|
true}
|
|
// 256 char name is bad:
|
|
ch <- testCase{char59 + "a." + char63 + "." + char63 + "." +
|
|
char63 + ".com",
|
|
false}
|
|
}
|
|
|
|
func TestDNSNames(t *testing.T) {
|
|
ch := make(chan testCase)
|
|
go getTestCases(ch)
|
|
for tc := range ch {
|
|
if isDomainName(tc.name) != tc.result {
|
|
t.Errorf("isDomainName(%v) failed: Should be %v",
|
|
tc.name, tc.result)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkDNSNames(b *testing.B) {
|
|
benchmarks := append(tests, []testCase{
|
|
{strings.Repeat("a", 63), true},
|
|
{strings.Repeat("a", 64), false},
|
|
}...)
|
|
for n := 0; n < b.N; n++ {
|
|
for _, tc := range benchmarks {
|
|
if isDomainName(tc.name) != tc.result {
|
|
b.Errorf("isDomainName(%q) = %v; want %v", tc.name, !tc.result, tc.result)
|
|
}
|
|
}
|
|
}
|
|
}
|