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 }