1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
14 type dnsNameTest
struct {
19 var dnsNameTests
= []dnsNameTest
{
20 // RFC 2181, section 11.
21 {"_xmpp-server._tcp.google.com", true},
24 {"26.0.0.73.com", true},
35 func emitDNSNameTest(ch
chan<- dnsNameTest
) {
38 for i
:= 0; i
< 63; i
++ {
41 char64
:= char63
+ "a"
42 longDomain
:= strings
.Repeat(char63
+".", 5) + "example"
44 for _
, tc
:= range dnsNameTests
{
48 ch
<- dnsNameTest
{char63
+ ".com", true}
49 ch
<- dnsNameTest
{char64
+ ".com", false}
51 // Remember: wire format is two octets longer than presentation
52 // (length octets for the first and [root] last labels).
54 ch
<- dnsNameTest
{longDomain
[len(longDomain
)-253:], true}
55 // A terminal dot doesn't contribute to length:
56 ch
<- dnsNameTest
{longDomain
[len(longDomain
)-253:] + ".", true}
58 ch
<- dnsNameTest
{longDomain
[len(longDomain
)-254:], false}
61 func TestDNSName(t
*testing
.T
) {
62 ch
:= make(chan dnsNameTest
)
63 go emitDNSNameTest(ch
)
65 if isDomainName(tc
.name
) != tc
.result
{
66 t
.Errorf("isDomainName(%q) = %v; want %v", tc
.name
, !tc
.result
, tc
.result
)
71 func BenchmarkDNSName(b
*testing
.B
) {
72 testHookUninstaller
.Do(uninstallTestHooks
)
74 benchmarks
:= append(dnsNameTests
, []dnsNameTest
{
75 {strings
.Repeat("a", 63), true},
76 {strings
.Repeat("a", 64), false},
78 for n
:= 0; n
< b
.N
; n
++ {
79 for _
, tc
:= range benchmarks
{
80 if isDomainName(tc
.name
) != tc
.result
{
81 b
.Errorf("isDomainName(%q) = %v; want %v", tc
.name
, !tc
.result
, tc
.result
)