github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/provider/common/state_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package common_test
     5  
     6  import (
     7  	"errors"
     8  
     9  	gc "launchpad.net/gocheck"
    10  
    11  	"github.com/juju/juju/environs/config"
    12  	"github.com/juju/juju/instance"
    13  	"github.com/juju/juju/network"
    14  	"github.com/juju/juju/provider/common"
    15  	"github.com/juju/juju/testing"
    16  )
    17  
    18  type StateSuite struct {
    19  	testing.BaseSuite
    20  }
    21  
    22  var _ = gc.Suite(&StateSuite{})
    23  
    24  func (suite *StateSuite) TestGetAddressesAcceptsNil(c *gc.C) {
    25  	result := common.GetAddresses(nil)
    26  	c.Check(result, gc.DeepEquals, []string{})
    27  }
    28  
    29  func (suite *StateSuite) TestGetAddressesReturnsNames(c *gc.C) {
    30  	instances := []instance.Instance{
    31  		&mockInstance{addresses: network.NewAddresses("foo")},
    32  		&mockInstance{addresses: network.NewAddresses("bar")},
    33  	}
    34  	c.Check(common.GetAddresses(instances), gc.DeepEquals, []string{"foo", "bar"})
    35  }
    36  
    37  func (suite *StateSuite) TestGetAddressesIgnoresNils(c *gc.C) {
    38  	instances := []instance.Instance{
    39  		nil,
    40  		&mockInstance{addresses: network.NewAddresses("foo")},
    41  		nil,
    42  		&mockInstance{addresses: network.NewAddresses("bar")},
    43  		nil,
    44  	}
    45  	c.Check(common.GetAddresses(instances), gc.DeepEquals, []string{"foo", "bar"})
    46  	c.Check(common.GetAddresses(nil), gc.DeepEquals, []string{})
    47  }
    48  
    49  func (suite *StateSuite) TestGetAddressesIgnoresInstancesWithoutAddrs(c *gc.C) {
    50  	instances := []instance.Instance{&mockInstance{}}
    51  	c.Check(common.GetAddresses(instances), gc.DeepEquals, []string{})
    52  }
    53  
    54  func (suite *StateSuite) TestGetAddressesIgnoresAddressesErrors(c *gc.C) {
    55  	instances := []instance.Instance{
    56  		&mockInstance{
    57  			addresses:    network.NewAddresses("one"),
    58  			addressesErr: errors.New("ignored"),
    59  		},
    60  		&mockInstance{addresses: network.NewAddresses("two", "three")},
    61  	}
    62  	c.Check(common.GetAddresses(instances), gc.DeepEquals, []string{"two", "three"})
    63  }
    64  
    65  func (suite *StateSuite) TestComposeAddressesAcceptsNil(c *gc.C) {
    66  	c.Check(common.ComposeAddresses(nil, 1433), gc.DeepEquals, []string{})
    67  }
    68  
    69  func (suite *StateSuite) TestComposeAddressesSuffixesAddresses(c *gc.C) {
    70  	c.Check(
    71  		common.ComposeAddresses([]string{"onehost", "otherhost"}, 1957),
    72  		gc.DeepEquals,
    73  		[]string{"onehost:1957", "otherhost:1957"})
    74  }
    75  
    76  func (suite *StateSuite) TestGetStateInfo(c *gc.C) {
    77  	cert := testing.CACert
    78  	attrs := testing.FakeConfig().Merge(testing.Attrs{
    79  		"ca-cert":    cert,
    80  		"state-port": 123,
    81  		"api-port":   456,
    82  	})
    83  	cfg, err := config.New(config.NoDefaults, attrs)
    84  	c.Assert(err, gc.IsNil)
    85  	hostnames := []string{"onehost", "otherhost"}
    86  
    87  	stateInfo, apiInfo := common.GetStateInfo(cfg, hostnames)
    88  
    89  	c.Check(stateInfo.Addrs, gc.DeepEquals, []string{"onehost:123", "otherhost:123"})
    90  	c.Check(string(stateInfo.CACert), gc.Equals, cert)
    91  	c.Check(apiInfo.Addrs, gc.DeepEquals, []string{"onehost:456", "otherhost:456"})
    92  	c.Check(string(apiInfo.CACert), gc.Equals, cert)
    93  }