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  }