aboutsummaryrefslogtreecommitdiff
path: root/middleware/hosts/hostsfile_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/hosts/hostsfile_test.go')
-rw-r--r--middleware/hosts/hostsfile_test.go239
1 files changed, 0 insertions, 239 deletions
diff --git a/middleware/hosts/hostsfile_test.go b/middleware/hosts/hostsfile_test.go
deleted file mode 100644
index 65841fa42..000000000
--- a/middleware/hosts/hostsfile_test.go
+++ /dev/null
@@ -1,239 +0,0 @@
-// 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 hosts
-
-import (
- "net"
- "reflect"
- "strings"
- "testing"
- "time"
-)
-
-func testHostsfile(file string) *Hostsfile {
- h := &Hostsfile{expire: time.Now().Add(1 * time.Hour), Origins: []string{"."}}
- h.Parse(strings.NewReader(file))
- return h
-}
-
-type staticHostEntry struct {
- in string
- v4 []string
- v6 []string
-}
-
-var (
- hosts = `255.255.255.255 broadcasthost
- 127.0.0.2 odin
- 127.0.0.3 odin # inline comment
- ::2 odin
- 127.1.1.1 thor
- # aliases
- 127.1.1.2 ullr ullrhost
- fe80::1%lo0 localhost
- # Bogus entries that must be ignored.
- 123.123.123 loki
- 321.321.321.321`
- singlelinehosts = `127.0.0.2 odin`
- ipv4hosts = `# See https://tools.ietf.org/html/rfc1123.
- #
- # The literal IPv4 address parser in the net package is a relaxed
- # one. It may accept a literal IPv4 address in dotted-decimal notation
- # with leading zeros such as "001.2.003.4".
-
- # internet address and host name
- 127.0.0.1 localhost # inline comment separated by tab
- 127.000.000.002 localhost # inline comment separated by space
-
- # internet address, host name and aliases
- 127.000.000.003 localhost localhost.localdomain`
- ipv6hosts = `# See https://tools.ietf.org/html/rfc5952, https://tools.ietf.org/html/rfc4007.
-
- # internet address and host name
- ::1 localhost # inline comment separated by tab
- fe80:0000:0000:0000:0000:0000:0000:0001 localhost # inline comment separated by space
-
- # internet address with zone identifier and host name
- fe80:0000:0000:0000:0000:0000:0000:0002%lo0 localhost
-
- # internet address, host name and aliases
- fe80::3%lo0 localhost localhost.localdomain`
- casehosts = `127.0.0.1 PreserveMe PreserveMe.local
- ::1 PreserveMe PreserveMe.local`
-)
-
-var lookupStaticHostTests = []struct {
- file string
- ents []staticHostEntry
-}{
- {
- hosts,
- []staticHostEntry{
- {"odin", []string{"127.0.0.2", "127.0.0.3"}, []string{"::2"}},
- {"thor", []string{"127.1.1.1"}, []string{}},
- {"ullr", []string{"127.1.1.2"}, []string{}},
- {"ullrhost", []string{"127.1.1.2"}, []string{}},
- {"localhost", []string{}, []string{"fe80::1"}},
- },
- },
- {
- singlelinehosts, // see golang.org/issue/6646
- []staticHostEntry{
- {"odin", []string{"127.0.0.2"}, []string{}},
- },
- },
- {
- ipv4hosts,
- []staticHostEntry{
- {"localhost", []string{"127.0.0.1", "127.0.0.2", "127.0.0.3"}, []string{}},
- {"localhost.localdomain", []string{"127.0.0.3"}, []string{}},
- },
- },
- {
- ipv6hosts,
- []staticHostEntry{
- {"localhost", []string{}, []string{"::1", "fe80::1", "fe80::2", "fe80::3"}},
- {"localhost.localdomain", []string{}, []string{"fe80::3"}},
- },
- },
- {
- casehosts,
- []staticHostEntry{
- {"PreserveMe", []string{"127.0.0.1"}, []string{"::1"}},
- {"PreserveMe.local", []string{"127.0.0.1"}, []string{"::1"}},
- },
- },
-}
-
-func TestLookupStaticHost(t *testing.T) {
-
- for _, tt := range lookupStaticHostTests {
- h := testHostsfile(tt.file)
- for _, ent := range tt.ents {
- testStaticHost(t, ent, h)
- }
- }
-}
-
-func testStaticHost(t *testing.T, ent staticHostEntry, h *Hostsfile) {
- ins := []string{ent.in, absDomainName(ent.in), strings.ToLower(ent.in), strings.ToUpper(ent.in)}
- for k, in := range ins {
- addrsV4 := h.LookupStaticHostV4(in)
- if len(addrsV4) != len(ent.v4) {
- t.Fatalf("%d, lookupStaticHostV4(%s) = %v; want %v", k, in, addrsV4, ent.v4)
- }
- for i, v4 := range addrsV4 {
- if v4.String() != ent.v4[i] {
- t.Fatalf("%d, lookupStaticHostV4(%s) = %v; want %v", k, in, addrsV4, ent.v4)
- }
- }
- addrsV6 := h.LookupStaticHostV6(in)
- if len(addrsV6) != len(ent.v6) {
- t.Fatalf("%d, lookupStaticHostV6(%s) = %v; want %v", k, in, addrsV6, ent.v6)
- }
- for i, v6 := range addrsV6 {
- if v6.String() != ent.v6[i] {
- t.Fatalf("%d, lookupStaticHostV6(%s) = %v; want %v", k, in, addrsV6, ent.v6)
- }
- }
- }
-}
-
-type staticIPEntry struct {
- in string
- out []string
-}
-
-var lookupStaticAddrTests = []struct {
- file string
- ents []staticIPEntry
-}{
- {
- hosts,
- []staticIPEntry{
- {"255.255.255.255", []string{"broadcasthost"}},
- {"127.0.0.2", []string{"odin"}},
- {"127.0.0.3", []string{"odin"}},
- {"::2", []string{"odin"}},
- {"127.1.1.1", []string{"thor"}},
- {"127.1.1.2", []string{"ullr", "ullrhost"}},
- {"fe80::1", []string{"localhost"}},
- },
- },
- {
- singlelinehosts, // see golang.org/issue/6646
- []staticIPEntry{
- {"127.0.0.2", []string{"odin"}},
- },
- },
- {
- ipv4hosts, // see golang.org/issue/8996
- []staticIPEntry{
- {"127.0.0.1", []string{"localhost"}},
- {"127.0.0.2", []string{"localhost"}},
- {"127.0.0.3", []string{"localhost", "localhost.localdomain"}},
- },
- },
- {
- ipv6hosts, // see golang.org/issue/8996
- []staticIPEntry{
- {"::1", []string{"localhost"}},
- {"fe80::1", []string{"localhost"}},
- {"fe80::2", []string{"localhost"}},
- {"fe80::3", []string{"localhost", "localhost.localdomain"}},
- },
- },
- {
- casehosts, // see golang.org/issue/12806
- []staticIPEntry{
- {"127.0.0.1", []string{"PreserveMe", "PreserveMe.local"}},
- {"::1", []string{"PreserveMe", "PreserveMe.local"}},
- },
- },
-}
-
-func TestLookupStaticAddr(t *testing.T) {
- for _, tt := range lookupStaticAddrTests {
- h := testHostsfile(tt.file)
- for _, ent := range tt.ents {
- testStaticAddr(t, ent, h)
- }
- }
-}
-
-func testStaticAddr(t *testing.T, ent staticIPEntry, h *Hostsfile) {
- hosts := h.LookupStaticAddr(ent.in)
- for i := range ent.out {
- ent.out[i] = absDomainName(ent.out[i])
- }
- if !reflect.DeepEqual(hosts, ent.out) {
- t.Errorf("%s, lookupStaticAddr(%s) = %v; want %v", h.path, ent.in, hosts, h)
- }
-}
-
-func TestHostCacheModification(t *testing.T) {
- // Ensure that programs can't modify the internals of the host cache.
- // See https://github.com/golang/go/issues/14212.
-
- h := testHostsfile(ipv4hosts)
- ent := staticHostEntry{"localhost", []string{"127.0.0.1", "127.0.0.2", "127.0.0.3"}, []string{}}
- testStaticHost(t, ent, h)
- // Modify the addresses return by lookupStaticHost.
- addrs := h.LookupStaticHostV6(ent.in)
- for i := range addrs {
- addrs[i] = net.IPv4zero
- }
- testStaticHost(t, ent, h)
-
- h = testHostsfile(ipv6hosts)
- entip := staticIPEntry{"::1", []string{"localhost"}}
- testStaticAddr(t, entip, h)
- // Modify the hosts return by lookupStaticAddr.
- hosts := h.LookupStaticAddr(entip.in)
- for i := range hosts {
- hosts[i] += "junk"
- }
- testStaticAddr(t, entip, h)
-}