github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/controller/caasmodeloperator/operator_test.go (about) 1 // Copyright 2020 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caasmodeloperator_test 5 6 import ( 7 "github.com/juju/names/v5" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 11 "github.com/juju/juju/apiserver/common" 12 "github.com/juju/juju/apiserver/facades/controller/caasmodeloperator" 13 apiservertesting "github.com/juju/juju/apiserver/testing" 14 "github.com/juju/juju/cloudconfig/podcfg" 15 statetesting "github.com/juju/juju/state/testing" 16 coretesting "github.com/juju/juju/testing" 17 ) 18 19 type ModelOperatorSuite struct { 20 coretesting.BaseSuite 21 22 authorizer *apiservertesting.FakeAuthorizer 23 api *caasmodeloperator.API 24 resources *common.Resources 25 state *mockState 26 } 27 28 var _ = gc.Suite(&ModelOperatorSuite{}) 29 30 func (m *ModelOperatorSuite) SetUpTest(c *gc.C) { 31 m.BaseSuite.SetUpTest(c) 32 33 m.resources = common.NewResources() 34 35 m.authorizer = &apiservertesting.FakeAuthorizer{ 36 Tag: names.NewModelTag("model-deadbeef-0bad-400d-8000-4b1d0d06f00d"), 37 Controller: true, 38 } 39 40 m.state = newMockState() 41 m.state.operatorRepo = ` 42 { 43 "serveraddress": "quay.io", 44 "auth": "xxxxx==", 45 "repository": "test-account" 46 }`[1:] 47 48 c.Logf("m.state.1operatorRepo %q", m.state.operatorRepo) 49 50 api, err := caasmodeloperator.NewAPI(m.authorizer, m.resources, m.state, m.state) 51 c.Assert(err, jc.ErrorIsNil) 52 53 m.api = api 54 } 55 56 func (m *ModelOperatorSuite) TestProvisioningInfo(c *gc.C) { 57 info, err := m.api.ModelOperatorProvisioningInfo() 58 c.Assert(err, jc.ErrorIsNil) 59 60 controllerConf, err := m.state.ControllerConfig() 61 c.Assert(err, jc.ErrorIsNil) 62 63 imagePath, err := podcfg.GetJujuOCIImagePath(controllerConf, info.Version) 64 c.Assert(err, jc.ErrorIsNil) 65 c.Assert(imagePath, gc.Equals, info.ImageDetails.RegistryPath) 66 67 c.Assert(info.ImageDetails.Auth, gc.Equals, `xxxxx==`) 68 c.Assert(info.ImageDetails.Repository, gc.Equals, `test-account`) 69 70 model, err := m.state.Model() 71 c.Assert(err, jc.ErrorIsNil) 72 73 modelConfig, err := model.ModelConfig() 74 c.Assert(err, jc.ErrorIsNil) 75 76 vers, ok := modelConfig.AgentVersion() 77 c.Assert(ok, jc.IsTrue) 78 79 c.Assert(vers, jc.DeepEquals, info.Version) 80 } 81 82 func (m *ModelOperatorSuite) TestWatchProvisioningInfo(c *gc.C) { 83 controllerConfigChanged := make(chan struct{}, 1) 84 modelConfigChanged := make(chan struct{}, 1) 85 apiHostPortsForAgentsChanged := make(chan struct{}, 1) 86 m.state.controllerConfigWatcher = statetesting.NewMockNotifyWatcher(controllerConfigChanged) 87 m.state.apiHostPortsForAgentsWatcher = statetesting.NewMockNotifyWatcher(apiHostPortsForAgentsChanged) 88 m.state.model.modelConfigChanged = statetesting.NewMockNotifyWatcher(modelConfigChanged) 89 90 controllerConfigChanged <- struct{}{} 91 apiHostPortsForAgentsChanged <- struct{}{} 92 modelConfigChanged <- struct{}{} 93 94 results, err := m.api.WatchModelOperatorProvisioningInfo() 95 c.Assert(err, jc.ErrorIsNil) 96 c.Assert(results.Error, gc.IsNil) 97 res := m.resources.Get("1") 98 c.Assert(res, gc.FitsTypeOf, (*common.MultiNotifyWatcher)(nil)) 99 }