github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/cloudconfig/instancecfg/instancecfg_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package instancecfg_test
     5  
     6  import (
     7  	"github.com/juju/names/v5"
     8  	jc "github.com/juju/testing/checkers"
     9  	"github.com/juju/version/v2"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/api"
    13  	"github.com/juju/juju/cloudconfig/instancecfg"
    14  	"github.com/juju/juju/controller"
    15  	"github.com/juju/juju/core/model"
    16  	"github.com/juju/juju/environs/config"
    17  	"github.com/juju/juju/testing"
    18  	coretools "github.com/juju/juju/tools"
    19  )
    20  
    21  type instancecfgSuite struct {
    22  	testing.BaseSuite
    23  }
    24  
    25  var _ = gc.Suite(&instancecfgSuite{})
    26  
    27  func (*instancecfgSuite) TestIsController(c *gc.C) {
    28  	cfg := instancecfg.InstanceConfig{}
    29  	c.Assert(cfg.IsController(), jc.IsFalse)
    30  	cfg.Jobs = []model.MachineJob{model.JobManageModel}
    31  	c.Assert(cfg.IsController(), jc.IsTrue)
    32  }
    33  
    34  func (*instancecfgSuite) TestInstanceTagsController(c *gc.C) {
    35  	cfg := testing.CustomModelConfig(c, testing.Attrs{})
    36  	testInstanceTags(c, cfg, true, map[string]string{
    37  		"juju-model-uuid":      testing.ModelTag.Id(),
    38  		"juju-controller-uuid": testing.ControllerTag.Id(),
    39  		"juju-is-controller":   "true",
    40  	})
    41  	testInstanceTags(c, cfg, false, map[string]string{
    42  		"juju-model-uuid":      testing.ModelTag.Id(),
    43  		"juju-controller-uuid": testing.ControllerTag.Id(),
    44  	})
    45  }
    46  
    47  func (*instancecfgSuite) TestInstanceTagsUserSpecified(c *gc.C) {
    48  	cfg := testing.CustomModelConfig(c, testing.Attrs{
    49  		"resource-tags": "a=b c=",
    50  	})
    51  	testInstanceTags(c, cfg, false, map[string]string{
    52  		"juju-model-uuid":      testing.ModelTag.Id(),
    53  		"juju-controller-uuid": testing.ControllerTag.Id(),
    54  		"a":                    "b",
    55  		"c":                    "",
    56  	})
    57  }
    58  
    59  func testInstanceTags(c *gc.C, cfg *config.Config, isController bool, expectTags map[string]string) {
    60  	tags := instancecfg.InstanceTags(testing.ModelTag.Id(), testing.ControllerTag.Id(), cfg, isController)
    61  	c.Assert(tags, jc.DeepEquals, expectTags)
    62  }
    63  
    64  func (*instancecfgSuite) TestAgentVersionZero(c *gc.C) {
    65  	var icfg instancecfg.InstanceConfig
    66  	c.Assert(icfg.AgentVersion(), gc.Equals, version.Binary{})
    67  }
    68  
    69  func (*instancecfgSuite) TestAgentVersion(c *gc.C) {
    70  	var icfg instancecfg.InstanceConfig
    71  	list := coretools.List{
    72  		&coretools.Tools{Version: version.MustParseBinary("2.3.4-ubuntu-amd64")},
    73  	}
    74  	err := icfg.SetTools(list)
    75  	c.Assert(err, jc.ErrorIsNil)
    76  	c.Assert(icfg.AgentVersion(), gc.Equals, list[0].Version)
    77  }
    78  
    79  func (*instancecfgSuite) TestSetToolsSameVersions(c *gc.C) {
    80  	var icfg instancecfg.InstanceConfig
    81  	list := coretools.List{
    82  		&coretools.Tools{Version: version.MustParseBinary("2.3.4-ubuntu-amd64")},
    83  		&coretools.Tools{Version: version.MustParseBinary("2.3.4-ubuntu-amd64")},
    84  	}
    85  	err := icfg.SetTools(list)
    86  	c.Assert(err, jc.ErrorIsNil)
    87  	c.Assert(icfg.ToolsList(), jc.DeepEquals, list)
    88  }
    89  
    90  func (*instancecfgSuite) TestSetToolsDifferentVersions(c *gc.C) {
    91  	var icfg instancecfg.InstanceConfig
    92  	list := coretools.List{
    93  		&coretools.Tools{Version: version.MustParseBinary("2.3.4-ubuntu-amd64")},
    94  		&coretools.Tools{Version: version.MustParseBinary("2.3.5-ubuntu-amd64")},
    95  	}
    96  	err := icfg.SetTools(list)
    97  	c.Assert(err, gc.ErrorMatches, `agent binary info mismatch.*2\.3\.4.*2\.3\.5.*`)
    98  	c.Assert(icfg.ToolsList(), gc.HasLen, 0)
    99  }
   100  
   101  func (*instancecfgSuite) TestJujuTools(c *gc.C) {
   102  	icfg := &instancecfg.InstanceConfig{
   103  		DataDir: "/path/to/datadir/",
   104  	}
   105  	err := icfg.SetTools(coretools.List{
   106  		&coretools.Tools{
   107  			Version: version.MustParseBinary("2.3.4-ubuntu-amd64"),
   108  			URL:     "/tools/2.3.4-ubuntu-amd64",
   109  		},
   110  	})
   111  	c.Assert(err, jc.ErrorIsNil)
   112  
   113  	c.Assert(icfg.JujuTools(), gc.Equals, "/path/to/datadir/tools/2.3.4-ubuntu-amd64")
   114  }
   115  
   116  func (*instancecfgSuite) TestCharmDir(c *gc.C) {
   117  	icfg := &instancecfg.InstanceConfig{
   118  		DataDir: "/path/to/datadir/",
   119  	}
   120  	c.Assert(icfg.CharmDir(), gc.Equals, "/path/to/datadir/charms")
   121  }
   122  
   123  func (*instancecfgSuite) TestAgentConfigLogParams(c *gc.C) {
   124  	icfg := instancecfg.InstanceConfig{
   125  		APIInfo: &api.Info{
   126  			Addrs:    []string{"1.2.3.4:4321"},
   127  			CACert:   "cert",
   128  			ModelTag: names.NewModelTag(testing.ModelTag.Id()),
   129  			Password: "secret123",
   130  		},
   131  		ControllerConfig: controller.Config{
   132  			"agent-logfile-max-size":    "123MB",
   133  			"agent-logfile-max-backups": 7,
   134  		},
   135  		ControllerTag: names.NewControllerTag(testing.ControllerTag.Id()),
   136  		DataDir:       "/path/to/datadir/",
   137  	}
   138  	config, err := icfg.AgentConfig(names.NewMachineTag("foo"), version.MustParse("1.2.3"))
   139  	c.Assert(err, jc.ErrorIsNil)
   140  	c.Assert(config.AgentLogfileMaxSizeMB(), gc.Equals, 123)
   141  	c.Assert(config.AgentLogfileMaxBackups(), gc.Equals, 7)
   142  }