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  }