1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // 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.
- //go:build !js
- package net
- import (
- "strings"
- "testing"
- )
- type dnsNameTest struct {
- name string
- result bool
- }
- var dnsNameTests = []dnsNameTest{
- // RFC 2181, section 11.
- {"_xmpp-server._tcp.google.com", true},
- {"foo.com", true},
- {"1foo.com", true},
- {"26.0.0.73.com", true},
- {"10-0-0-1", 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 emitDNSNameTest(ch chan<- dnsNameTest) {
- defer close(ch)
- var char63 = ""
- for i := 0; i < 63; i++ {
- char63 += "a"
- }
- char64 := char63 + "a"
- longDomain := strings.Repeat(char63+".", 5) + "example"
- for _, tc := range dnsNameTests {
- ch <- tc
- }
- ch <- dnsNameTest{char63 + ".com", true}
- ch <- dnsNameTest{char64 + ".com", false}
- // Remember: wire format is two octets longer than presentation
- // (length octets for the first and [root] last labels).
- // 253 is fine:
- ch <- dnsNameTest{longDomain[len(longDomain)-253:], true}
- // A terminal dot doesn't contribute to length:
- ch <- dnsNameTest{longDomain[len(longDomain)-253:] + ".", true}
- // 254 is bad:
- ch <- dnsNameTest{longDomain[len(longDomain)-254:], false}
- }
- func TestDNSName(t *testing.T) {
- ch := make(chan dnsNameTest)
- go emitDNSNameTest(ch)
- for tc := range ch {
- if isDomainName(tc.name) != tc.result {
- t.Errorf("isDomainName(%q) = %v; want %v", tc.name, !tc.result, tc.result)
- }
- }
- }
- func BenchmarkDNSName(b *testing.B) {
- testHookUninstaller.Do(uninstallTestHooks)
- benchmarks := append(dnsNameTests, []dnsNameTest{
- {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)
- }
- }
- }
- }
|