github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/state/stateenvirons/config_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package stateenvirons_test 5 6 import ( 7 "context" 8 9 "github.com/juju/names/v5" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/caas" 14 "github.com/juju/juju/cloud" 15 "github.com/juju/juju/environs" 16 environscloudspec "github.com/juju/juju/environs/cloudspec" 17 "github.com/juju/juju/state/stateenvirons" 18 statetesting "github.com/juju/juju/state/testing" 19 "github.com/juju/juju/testing/factory" 20 ) 21 22 type environSuite struct { 23 statetesting.StateSuite 24 } 25 26 var _ = gc.Suite(&environSuite{}) 27 28 func (s *environSuite) TestGetNewEnvironFunc(c *gc.C) { 29 var calls int 30 var callArgs environs.OpenParams 31 newEnviron := func(_ context.Context, args environs.OpenParams) (environs.Environ, error) { 32 calls++ 33 callArgs = args 34 return nil, nil 35 } 36 _, err := stateenvirons.GetNewEnvironFunc(newEnviron)(s.Model) 37 c.Assert(err, jc.ErrorIsNil) 38 39 c.Assert(calls, gc.Equals, 1) 40 41 cfg, err := s.Model.ModelConfig() 42 c.Assert(err, jc.ErrorIsNil) 43 c.Assert(callArgs.Config, jc.DeepEquals, cfg) 44 } 45 46 func (s *environSuite) TestCloudSpec(c *gc.C) { 47 owner := s.Factory.MakeUser(c, nil).UserTag() 48 emptyCredential := cloud.NewEmptyCredential() 49 tag := names.NewCloudCredentialTag("dummy/" + owner.Id() + "/empty-credential") 50 err := s.State.UpdateCloudCredential(tag, emptyCredential) 51 c.Assert(err, jc.ErrorIsNil) 52 53 st := s.Factory.MakeModel(c, &factory.ModelParams{ 54 Name: "foo", 55 CloudName: "dummy", 56 CloudCredential: tag, 57 Owner: owner, 58 }) 59 defer st.Close() 60 61 m, err := st.Model() 62 c.Assert(err, jc.ErrorIsNil) 63 64 emptyCredential.Label = "empty-credential" 65 cloudSpec, err := stateenvirons.EnvironConfigGetter{Model: m}.CloudSpec() 66 c.Assert(err, jc.ErrorIsNil) 67 c.Assert(cloudSpec, jc.DeepEquals, environscloudspec.CloudSpec{ 68 Type: "dummy", 69 Name: "dummy", 70 Region: "dummy-region", 71 Endpoint: "dummy-endpoint", 72 IdentityEndpoint: "dummy-identity-endpoint", 73 StorageEndpoint: "dummy-storage-endpoint", 74 Credential: &emptyCredential, 75 IsControllerCloud: true, 76 }) 77 } 78 79 func (s *environSuite) TestCloudSpecForModel(c *gc.C) { 80 owner := s.Factory.MakeUser(c, nil).UserTag() 81 emptyCredential := cloud.NewEmptyCredential() 82 tag := names.NewCloudCredentialTag("dummy/" + owner.Id() + "/empty-credential") 83 err := s.State.UpdateCloudCredential(tag, emptyCredential) 84 c.Assert(err, jc.ErrorIsNil) 85 86 st := s.Factory.MakeModel(c, &factory.ModelParams{ 87 Name: "foo", 88 CloudName: "dummy", 89 CloudCredential: tag, 90 Owner: owner, 91 }) 92 defer st.Close() 93 94 m, err := st.Model() 95 c.Assert(err, jc.ErrorIsNil) 96 97 emptyCredential.Label = "empty-credential" 98 cloudSpec, err := stateenvirons.CloudSpecForModel(m) 99 c.Assert(err, jc.ErrorIsNil) 100 c.Assert(cloudSpec, jc.DeepEquals, environscloudspec.CloudSpec{ 101 Type: "dummy", 102 Name: "dummy", 103 Region: "dummy-region", 104 Endpoint: "dummy-endpoint", 105 IdentityEndpoint: "dummy-identity-endpoint", 106 StorageEndpoint: "dummy-storage-endpoint", 107 Credential: &emptyCredential, 108 IsControllerCloud: true, 109 }) 110 } 111 112 func (s *environSuite) TestGetNewCAASBrokerFunc(c *gc.C) { 113 var calls int 114 var callArgs environs.OpenParams 115 newBroker := func(_ context.Context, args environs.OpenParams) (caas.Broker, error) { 116 calls++ 117 callArgs = args 118 return nil, nil 119 } 120 _, err := stateenvirons.GetNewCAASBrokerFunc(newBroker)(s.Model) 121 c.Assert(err, jc.ErrorIsNil) 122 c.Assert(calls, gc.Equals, 1) 123 124 cfg, err := s.Model.ModelConfig() 125 c.Assert(err, jc.ErrorIsNil) 126 c.Assert(callArgs.Config, jc.DeepEquals, cfg) 127 } 128 129 type fakeBroker struct { 130 caas.Broker 131 } 132 133 func (*fakeBroker) APIVersion() (string, error) { 134 return "6.66", nil 135 } 136 137 func (s *environSuite) TestCloudAPIVersion(c *gc.C) { 138 st := s.Factory.MakeCAASModel(c, &factory.ModelParams{ 139 Name: "foo", 140 }) 141 defer st.Close() 142 143 m, err := st.Model() 144 c.Assert(err, jc.ErrorIsNil) 145 146 cred := cloud.NewNamedCredential("dummy-credential", "userpass", nil, false) 147 newBrokerFunc := func(_ context.Context, args environs.OpenParams) (caas.Broker, error) { 148 c.Assert(args.Cloud, jc.DeepEquals, environscloudspec.CloudSpec{ 149 Name: "caascloud", 150 Type: "kubernetes", 151 Credential: &cred, 152 }) 153 return &fakeBroker{}, nil 154 } 155 156 envConfigGetter := stateenvirons.EnvironConfigGetter{Model: m, NewContainerBroker: newBrokerFunc} 157 cloudSpec, err := envConfigGetter.CloudSpec() 158 c.Assert(err, jc.ErrorIsNil) 159 apiVersion, err := envConfigGetter.CloudAPIVersion(cloudSpec) 160 c.Assert(err, jc.ErrorIsNil) 161 c.Assert(apiVersion, gc.Equals, "6.66") 162 }