// 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 (
	"testing"
)

type hostTest struct {
	host string
	ips  []IP
}


var hosttests = []hostTest{
	hostTest{"odin", []IP{
		IPv4(127, 0, 0, 2),
		IPv4(127, 0, 0, 3),
		ParseIP("::2"),
	}},
	hostTest{"thor", []IP{
		IPv4(127, 1, 1, 1),
	}},
	hostTest{"loki", []IP{}},
	hostTest{"ullr", []IP{
		IPv4(127, 1, 1, 2),
	}},
	hostTest{"ullrhost", []IP{
		IPv4(127, 1, 1, 2),
	}},
}

func TestLookupStaticHost(t *testing.T) {
	p := hostsPath
	hostsPath = "hosts_testdata"
	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))
			return
		}
		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
}
