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 }