The Go Programming Language

Source file src/pkg/net/hosts_test.go

     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.
     4	
     5	package net
     6	
     7	import (
     8		"sort"
     9		"testing"
    10	)
    11	
    12	type hostTest struct {
    13		host string
    14		ips  []IP
    15	}
    16	
    17	var hosttests = []hostTest{
    18		{"odin", []IP{
    19			IPv4(127, 0, 0, 2),
    20			IPv4(127, 0, 0, 3),
    21			ParseIP("::2"),
    22		}},
    23		{"thor", []IP{
    24			IPv4(127, 1, 1, 1),
    25		}},
    26		{"loki", []IP{}},
    27		{"ullr", []IP{
    28			IPv4(127, 1, 1, 2),
    29		}},
    30		{"ullrhost", []IP{
    31			IPv4(127, 1, 1, 2),
    32		}},
    33	}
    34	
    35	func TestLookupStaticHost(t *testing.T) {
    36		p := hostsPath
    37		hostsPath = "hosts_testdata"
    38		for i := 0; i < len(hosttests); i++ {
    39			tt := hosttests[i]
    40			ips := lookupStaticHost(tt.host)
    41			if len(ips) != len(tt.ips) {
    42				t.Errorf("# of hosts = %v; want %v",
    43					len(ips), len(tt.ips))
    44				return
    45			}
    46			for k, v := range ips {
    47				if tt.ips[k].String() != v {
    48					t.Errorf("lookupStaticHost(%q) = %v; want %v",
    49						tt.host, v, tt.ips[k])
    50				}
    51			}
    52		}
    53		hostsPath = p
    54	}
    55	
    56	func TestLookupHost(t *testing.T) {
    57		// Can't depend on this to return anything in particular,
    58		// but if it does return something, make sure it doesn't
    59		// duplicate addresses (a common bug due to the way
    60		// getaddrinfo works).
    61		addrs, _ := LookupHost("localhost")
    62		sort.Strings(addrs)
    63		for i := 0; i+1 < len(addrs); i++ {
    64			if addrs[i] == addrs[i+1] {
    65				t.Fatalf("LookupHost(\"localhost\") = %v, has duplicate addresses", addrs)
    66			}
    67		}
    68	}

release.r60.3. Except as noted, this content is licensed under a Creative Commons Attribution 3.0 License.