github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/common/addresses_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  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/apiserver/common"
    11  	"github.com/juju/juju/controller"
    12  	"github.com/juju/juju/core/network"
    13  	"github.com/juju/juju/state"
    14  	coretesting "github.com/juju/juju/testing"
    15  )
    16  
    17  type apiAddresserSuite struct {
    18  	addresser *common.APIAddresser
    19  	fake      *fakeAddresses
    20  }
    21  
    22  var _ = gc.Suite(&apiAddresserSuite{})
    23  
    24  // Verify that APIAddressAccessor is satisfied by *state.State.
    25  var _ common.APIAddressAccessor = (*state.State)(nil)
    26  
    27  func (s *apiAddresserSuite) SetUpTest(c *gc.C) {
    28  	s.fake = &fakeAddresses{
    29  		hostPorts: []network.SpaceHostPorts{
    30  			network.NewSpaceHostPorts(1, "apiaddresses"),
    31  			network.NewSpaceHostPorts(2, "apiaddresses"),
    32  		},
    33  	}
    34  	s.addresser = common.NewAPIAddresser(s.fake, common.NewResources())
    35  }
    36  
    37  func (s *apiAddresserSuite) TestAPIAddresses(c *gc.C) {
    38  	result, err := s.addresser.APIAddresses()
    39  	c.Assert(err, jc.ErrorIsNil)
    40  	c.Assert(result.Result, gc.DeepEquals, []string{"apiaddresses:1", "apiaddresses:2"})
    41  }
    42  
    43  func (s *apiAddresserSuite) TestAPIAddressesPrivateFirst(c *gc.C) {
    44  	addrs := network.NewSpaceAddresses("52.7.1.1", "10.0.2.1")
    45  	ctlr1 := network.SpaceAddressesWithPort(addrs, 17070)
    46  
    47  	addrs = network.NewSpaceAddresses("53.51.121.17", "10.0.1.17")
    48  	ctlr2 := network.SpaceAddressesWithPort(addrs, 17070)
    49  
    50  	s.fake.hostPorts = []network.SpaceHostPorts{
    51  		network.NewSpaceHostPorts(1, "apiaddresses"),
    52  		ctlr1,
    53  		ctlr2,
    54  		network.NewSpaceHostPorts(2, "apiaddresses"),
    55  	}
    56  	for _, hps := range s.fake.hostPorts {
    57  		for _, hp := range hps {
    58  			c.Logf("%s - %#v", hp.Scope, hp)
    59  		}
    60  	}
    61  
    62  	result, err := s.addresser.APIAddresses()
    63  	c.Assert(err, jc.ErrorIsNil)
    64  
    65  	c.Check(result.Result, gc.DeepEquals, []string{
    66  		"apiaddresses:1",
    67  		"10.0.2.1:17070",
    68  		"52.7.1.1:17070",
    69  		"10.0.1.17:17070",
    70  		"53.51.121.17:17070",
    71  		"apiaddresses:2",
    72  	})
    73  }
    74  
    75  var _ common.APIAddressAccessor = fakeAddresses{}
    76  
    77  type fakeAddresses struct {
    78  	hostPorts []network.SpaceHostPorts
    79  }
    80  
    81  func (fakeAddresses) Addresses() ([]string, error) {
    82  	return []string{"addresses:1", "addresses:2"}, nil
    83  }
    84  
    85  func (fakeAddresses) ControllerConfig() (controller.Config, error) {
    86  	return coretesting.FakeControllerConfig(), nil
    87  }
    88  
    89  func (f fakeAddresses) APIHostPortsForAgents() ([]network.SpaceHostPorts, error) {
    90  	return f.hostPorts, nil
    91  }
    92  
    93  func (fakeAddresses) WatchAPIHostPortsForAgents() state.NotifyWatcher {
    94  	panic("should never be called")
    95  }