github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/state/containernetworking_test.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package state_test
     5  
     6  import (
     7  	"github.com/juju/testing"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/environs"
    12  	"github.com/juju/juju/environs/context"
    13  )
    14  
    15  type containerTestNetworkLessEnviron struct {
    16  	environs.Environ
    17  }
    18  
    19  type containerTestNetworkedEnviron struct {
    20  	environs.NetworkingEnviron
    21  
    22  	stub                       *testing.Stub
    23  	supportsContainerAddresses bool
    24  	superSubnets               []string
    25  }
    26  
    27  type ContainerNetworkingSuite struct {
    28  	ConnSuite
    29  }
    30  
    31  var _ = gc.Suite(&ContainerNetworkingSuite{})
    32  
    33  func (e *containerTestNetworkedEnviron) SuperSubnets(ctx context.ProviderCallContext) ([]string, error) {
    34  	e.stub.AddCall("SuperSubnets", ctx)
    35  	return e.superSubnets, e.stub.NextErr()
    36  }
    37  
    38  func (e *containerTestNetworkedEnviron) SupportsContainerAddresses(ctx context.ProviderCallContext) (bool, error) {
    39  	e.stub.AddCall("SupportsContainerAddresses", ctx)
    40  	return e.supportsContainerAddresses, e.stub.NextErr()
    41  }
    42  
    43  var _ environs.NetworkingEnviron = (*containerTestNetworkedEnviron)(nil)
    44  
    45  func (s *ContainerNetworkingSuite) TestAutoConfigureContainerNetworkingNetworkless(c *gc.C) {
    46  	err := s.Model.AutoConfigureContainerNetworking(containerTestNetworkLessEnviron{})
    47  	c.Assert(err, jc.ErrorIsNil)
    48  	config, err := s.Model.ModelConfig()
    49  	c.Assert(err, jc.ErrorIsNil)
    50  	attrs := config.AllAttrs()
    51  	c.Check(attrs["container-networking-method"], gc.Equals, "local")
    52  	c.Check(attrs["fan-config"], gc.Equals, "")
    53  }
    54  
    55  func (s *ContainerNetworkingSuite) TestAutoConfigureContainerNetworkingDoesntChangeDefault(c *gc.C) {
    56  	err := s.Model.UpdateModelConfig(map[string]interface{}{
    57  		"container-networking-method": "provider",
    58  	}, nil)
    59  	c.Assert(err, jc.ErrorIsNil)
    60  	err = s.Model.AutoConfigureContainerNetworking(containerTestNetworkLessEnviron{})
    61  	c.Assert(err, jc.ErrorIsNil)
    62  	config, err := s.Model.ModelConfig()
    63  	c.Assert(err, jc.ErrorIsNil)
    64  	attrs := config.AllAttrs()
    65  	c.Check(attrs["container-networking-method"], gc.Equals, "provider")
    66  	c.Check(attrs["fan-config"], gc.Equals, "")
    67  }
    68  
    69  func (s *ContainerNetworkingSuite) TestAutoConfigureContainerNetworkingAlreadyConfigured(c *gc.C) {
    70  	environ := containerTestNetworkedEnviron{
    71  		stub:         &testing.Stub{},
    72  		superSubnets: []string{"172.31.0.0/16", "192.168.1.0/24", "10.0.0.0/8"},
    73  	}
    74  	err := s.Model.UpdateModelConfig(map[string]interface{}{
    75  		"container-networking-method": "local",
    76  		"fan-config":                  "1.2.3.4/24=5.6.7.8/16",
    77  	}, nil)
    78  	c.Assert(err, jc.ErrorIsNil)
    79  	err = s.Model.AutoConfigureContainerNetworking(&environ)
    80  	c.Check(err, jc.ErrorIsNil)
    81  	config, err := s.Model.ModelConfig()
    82  	c.Assert(err, jc.ErrorIsNil)
    83  	attrs := config.AllAttrs()
    84  	c.Check(attrs["container-networking-method"], gc.Equals, "local")
    85  	c.Check(attrs["fan-config"], gc.Equals, "1.2.3.4/24=5.6.7.8/16")
    86  }
    87  
    88  func (s *ContainerNetworkingSuite) TestAutoConfigureContainerNetworkingNoSuperSubnets(c *gc.C) {
    89  	environ := containerTestNetworkedEnviron{
    90  		stub: &testing.Stub{},
    91  	}
    92  	err := s.Model.AutoConfigureContainerNetworking(&environ)
    93  	c.Check(err, jc.ErrorIsNil)
    94  	config, err := s.Model.ModelConfig()
    95  	c.Assert(err, jc.ErrorIsNil)
    96  	attrs := config.AllAttrs()
    97  	c.Check(attrs["container-networking-method"], gc.Equals, "local")
    98  	c.Check(attrs["fan-config"], gc.Equals, "")
    99  }
   100  
   101  func (s *ContainerNetworkingSuite) TestAutoConfigureContainerNetworkingSupportsContainerAddresses(c *gc.C) {
   102  	environ := containerTestNetworkedEnviron{
   103  		stub:                       &testing.Stub{},
   104  		supportsContainerAddresses: true,
   105  		superSubnets:               []string{"172.31.0.0/16", "192.168.1.0/24", "10.0.0.0/8"},
   106  	}
   107  	err := s.Model.AutoConfigureContainerNetworking(&environ)
   108  	c.Check(err, jc.ErrorIsNil)
   109  	config, err := s.Model.ModelConfig()
   110  	c.Assert(err, jc.ErrorIsNil)
   111  	attrs := config.AllAttrs()
   112  	c.Check(attrs["container-networking-method"], gc.Equals, "provider")
   113  	c.Check(attrs["fan-config"], gc.Equals, "172.31.0.0/16=252.0.0.0/8 192.168.1.0/24=253.0.0.0/8")
   114  }
   115  
   116  func (s *ContainerNetworkingSuite) TestAutoConfigureContainerNetworkingDefault(c *gc.C) {
   117  	environ := containerTestNetworkedEnviron{
   118  		stub:                       &testing.Stub{},
   119  		supportsContainerAddresses: false,
   120  		superSubnets:               []string{"172.31.0.0/16", "192.168.1.0/24", "10.0.0.0/8"},
   121  	}
   122  	err := s.Model.AutoConfigureContainerNetworking(&environ)
   123  	c.Check(err, jc.ErrorIsNil)
   124  	config, err := s.Model.ModelConfig()
   125  	c.Assert(err, jc.ErrorIsNil)
   126  	attrs := config.AllAttrs()
   127  	c.Check(attrs["container-networking-method"], gc.Equals, "fan")
   128  	c.Check(attrs["fan-config"], gc.Equals, "172.31.0.0/16=252.0.0.0/8 192.168.1.0/24=253.0.0.0/8")
   129  }
   130  
   131  func (s *ContainerNetworkingSuite) TestAutoConfigureContainerNetworkingIgnoresIPv6(c *gc.C) {
   132  	environ := containerTestNetworkedEnviron{
   133  		stub:                       &testing.Stub{},
   134  		supportsContainerAddresses: true,
   135  		superSubnets:               []string{"172.31.0.0/16", "2000::dead:beef:1/64"},
   136  	}
   137  	err := s.Model.AutoConfigureContainerNetworking(&environ)
   138  	c.Check(err, jc.ErrorIsNil)
   139  	config, err := s.Model.ModelConfig()
   140  	c.Assert(err, jc.ErrorIsNil)
   141  	attrs := config.AllAttrs()
   142  	c.Check(attrs["container-networking-method"], gc.Equals, "provider")
   143  	c.Check(attrs["fan-config"], gc.Equals, "172.31.0.0/16=252.0.0.0/8")
   144  }