github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/peergrouper/controllertracker_test.go (about)

     1  // Copyright 2018 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package peergrouper
     5  
     6  import (
     7  	"sort"
     8  
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/core/network"
    12  	coretesting "github.com/juju/juju/testing"
    13  )
    14  
    15  type machineTrackerSuite struct {
    16  	coretesting.BaseSuite
    17  }
    18  
    19  var _ = gc.Suite(&machineTrackerSuite{})
    20  
    21  func (s *machineTrackerSuite) TestSelectMongoAddressFromSpaceReturnsCorrectAddress(c *gc.C) {
    22  	space := network.SpaceInfo{
    23  		ID:   "123",
    24  		Name: network.SpaceName("ha-space"),
    25  	}
    26  
    27  	m := &controllerTracker{
    28  		addresses: []network.SpaceAddress{
    29  			network.NewSpaceAddress("192.168.5.5", network.WithScope(network.ScopeCloudLocal)),
    30  			network.NewSpaceAddress("192.168.10.5", network.WithScope(network.ScopeCloudLocal)),
    31  			network.NewSpaceAddress("localhost", network.WithScope(network.ScopeMachineLocal)),
    32  		},
    33  	}
    34  	m.addresses[0].SpaceID = space.ID
    35  	m.addresses[1].SpaceID = "456"
    36  
    37  	addr, err := m.SelectMongoAddressFromSpace(666, space)
    38  	c.Assert(err, gc.IsNil)
    39  	c.Check(addr, gc.Equals, "192.168.5.5:666")
    40  }
    41  
    42  func (s *machineTrackerSuite) TestSelectMongoAddressFromSpaceEmptyWhenNoAddressFound(c *gc.C) {
    43  	m := &controllerTracker{
    44  		id: "3",
    45  		addresses: []network.SpaceAddress{
    46  			network.NewSpaceAddress("localhost", network.WithScope(network.ScopeMachineLocal))},
    47  	}
    48  
    49  	addrs, err := m.SelectMongoAddressFromSpace(666, network.SpaceInfo{ID: "whatever", Name: "bad-space"})
    50  	c.Check(addrs, gc.Equals, "")
    51  	c.Check(err, gc.ErrorMatches, `addresses for controller node "3" in space "bad-space" not found`)
    52  }
    53  
    54  func (s *machineTrackerSuite) TestSelectMongoAddressFromSpaceErrorForEmptySpace(c *gc.C) {
    55  	m := &controllerTracker{
    56  		id: "3",
    57  	}
    58  
    59  	_, err := m.SelectMongoAddressFromSpace(666, network.SpaceInfo{})
    60  	c.Check(err, gc.ErrorMatches, `empty space supplied as an argument for selecting Mongo address for controller node "3"`)
    61  }
    62  
    63  func (s *machineTrackerSuite) TestGetPotentialMongoHostPortsReturnsAllAddresses(c *gc.C) {
    64  	m := &controllerTracker{
    65  		id: "3",
    66  		addresses: []network.SpaceAddress{
    67  			network.NewSpaceAddress("192.168.5.5", network.WithScope(network.ScopeCloudLocal)),
    68  			network.NewSpaceAddress("10.0.0.1", network.WithScope(network.ScopeCloudLocal)),
    69  			network.NewSpaceAddress("185.159.16.82", network.WithScope(network.ScopePublic)),
    70  		},
    71  	}
    72  
    73  	addrs := m.GetPotentialMongoHostPorts(666).HostPorts().Strings()
    74  	sort.Strings(addrs)
    75  	c.Check(addrs, gc.DeepEquals, []string{"10.0.0.1:666", "185.159.16.82:666", "192.168.5.5:666"})
    76  }