| // 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 ( |
| "sort" |
| "testing" |
| ) |
| |
| type hostTest struct { |
| host string |
| ips []IP |
| } |
| |
| var hosttests = []hostTest{ |
| {"odin", []IP{ |
| IPv4(127, 0, 0, 2), |
| IPv4(127, 0, 0, 3), |
| ParseIP("::2"), |
| }}, |
| {"thor", []IP{ |
| IPv4(127, 1, 1, 1), |
| }}, |
| {"loki", []IP{}}, |
| {"ullr", []IP{ |
| IPv4(127, 1, 1, 2), |
| }}, |
| {"ullrhost", []IP{ |
| IPv4(127, 1, 1, 2), |
| }}, |
| } |
| |
| func TestLookupStaticHost(t *testing.T) { |
| p := hostsPath |
| hostsPath = "testdata/hosts" |
| for i := 0; i < len(hosttests); i++ { |
| tt := hosttests[i] |
| ips := lookupStaticHost(tt.host) |
| if len(ips) != len(tt.ips) { |
| t.Errorf("# of hosts = %v; want %v", |
| len(ips), len(tt.ips)) |
| continue |
| } |
| for k, v := range ips { |
| if tt.ips[k].String() != v { |
| t.Errorf("lookupStaticHost(%q) = %v; want %v", |
| tt.host, v, tt.ips[k]) |
| } |
| } |
| } |
| hostsPath = p |
| } |
| |
| // https://golang.org/issue/6646 |
| func TestSingleLineHostsFile(t *testing.T) { |
| p := hostsPath |
| hostsPath = "testdata/hosts_singleline" |
| |
| ips := lookupStaticHost("odin") |
| if len(ips) != 1 || ips[0] != "127.0.0.2" { |
| t.Errorf("lookupStaticHost = %v, want %v", ips, []string{"127.0.0.2"}) |
| } |
| |
| hostsPath = p |
| } |
| |
| func TestLookupHost(t *testing.T) { |
| // Can't depend on this to return anything in particular, |
| // but if it does return something, make sure it doesn't |
| // duplicate addresses (a common bug due to the way |
| // getaddrinfo works). |
| addrs, _ := LookupHost("localhost") |
| sort.Strings(addrs) |
| for i := 0; i+1 < len(addrs); i++ { |
| if addrs[i] == addrs[i+1] { |
| t.Fatalf("LookupHost(\"localhost\") = %v, has duplicate addresses", addrs) |
| } |
| } |
| } |