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  }