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  }