github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/testing/resolver.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package testing 5 6 import ( 7 "context" 8 "net" 9 10 "github.com/juju/errors" 11 12 "github.com/juju/juju/api" 13 ) 14 15 var _ api.IPAddrResolver = IPAddrResolverMap(nil) 16 17 // IPAddrResolverMap implements IPAddrResolver by looking up the 18 // addresses in the map, which maps host names to IP addresses. The 19 // strings in the value slices should be valid IP addresses. 20 type IPAddrResolverMap map[string][]string 21 22 func (r IPAddrResolverMap) LookupIPAddr(ctx context.Context, host string) ([]net.IPAddr, error) { 23 if ip := net.ParseIP(host); ip != nil { 24 return []net.IPAddr{{IP: ip}}, nil 25 } 26 ipStrs := r[host] 27 if len(ipStrs) == 0 { 28 return nil, errors.Errorf("mock resolver cannot resolve %q", host) 29 } 30 ipAddrs := make([]net.IPAddr, len(ipStrs)) 31 for i, ipStr := range ipStrs { 32 ip := net.ParseIP(ipStr) 33 if ip == nil { 34 panic("invalid IP address: " + ipStr) 35 } 36 ipAddrs[i] = net.IPAddr{ 37 IP: ip, 38 } 39 } 40 return ipAddrs, nil 41 }