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 }