github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/network/containerizer/bridgepolicy_test.go (about) 1 // Copyright 2019 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package containerizer 5 6 import ( 7 "strconv" 8 9 "github.com/juju/testing" 10 jc "github.com/juju/testing/checkers" 11 "go.uber.org/mock/gomock" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/core/constraints" 15 "github.com/juju/juju/core/network" 16 ) 17 18 type bridgePolicySuite struct { 19 testing.IsolationSuite 20 21 netBondReconfigureDelay int 22 containerNetworkingMethod string 23 24 spaces network.SpaceInfos 25 host *MockContainer 26 guest *MockContainer 27 } 28 29 var _ = gc.Suite(&bridgePolicySuite{}) 30 31 func (s *bridgePolicySuite) SetUpTest(c *gc.C) { 32 s.IsolationSuite.SetUpTest(c) 33 34 s.netBondReconfigureDelay = 13 35 s.containerNetworkingMethod = "local" 36 } 37 38 func (s *bridgePolicySuite) TestDetermineContainerSpacesConstraints(c *gc.C) { 39 defer s.setupMocks(c).Finish() 40 41 exp := s.guest.EXPECT() 42 exp.Constraints().Return(constraints.MustParse("spaces=foo,bar,^baz"), nil) 43 44 obtained, err := s.policy().determineContainerSpaces(s.host, s.guest) 45 c.Assert(err, jc.ErrorIsNil) 46 expected := network.SpaceInfos{ 47 *s.spaces.GetByName("foo"), 48 *s.spaces.GetByName("bar"), 49 } 50 c.Check(obtained, jc.DeepEquals, expected) 51 } 52 53 func (s *bridgePolicySuite) TestDetermineContainerNoSpacesConstraints(c *gc.C) { 54 defer s.setupMocks(c).Finish() 55 56 exp := s.guest.EXPECT() 57 exp.Constraints().Return(constraints.MustParse(""), nil) 58 59 obtained, err := s.policy().determineContainerSpaces(s.host, s.guest) 60 c.Assert(err, jc.ErrorIsNil) 61 expected := network.SpaceInfos{ 62 *s.spaces.GetByName(network.AlphaSpaceName), 63 } 64 c.Check(obtained, jc.DeepEquals, expected) 65 } 66 67 func (s *bridgePolicySuite) setupMocks(c *gc.C) *gomock.Controller { 68 ctrl := gomock.NewController(c) 69 70 s.host = NewMockContainer(ctrl) 71 s.guest = NewMockContainer(ctrl) 72 73 s.guest.EXPECT().Id().Return("guest-id").AnyTimes() 74 75 s.spaces = make(network.SpaceInfos, 4) 76 for i, space := range []string{network.AlphaSpaceName, "foo", "bar", "fizz"} { 77 // 0 is the AlphaSpaceId 78 id := strconv.Itoa(i) 79 s.spaces[i] = network.SpaceInfo{ID: id, Name: network.SpaceName(space)} 80 } 81 return ctrl 82 } 83 84 func (s *bridgePolicySuite) policy() *BridgePolicy { 85 return &BridgePolicy{ 86 spaces: s.spaces, 87 netBondReconfigureDelay: s.netBondReconfigureDelay, 88 containerNetworkingMethod: s.containerNetworkingMethod, 89 } 90 }