github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/service/agent_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package service_test 5 6 import ( 7 "path/filepath" 8 "runtime" 9 "strings" 10 11 jc "github.com/juju/testing/checkers" 12 "github.com/juju/utils" 13 "github.com/juju/utils/shell" 14 gc "gopkg.in/check.v1" 15 16 "github.com/juju/juju/juju/osenv" 17 "github.com/juju/juju/service" 18 "github.com/juju/juju/service/common" 19 ) 20 21 var ( 22 cmdSuffix string 23 shquote = utils.ShQuote 24 ) 25 26 func init() { 27 if runtime.GOOS == "windows" { 28 cmdSuffix = ".exe" 29 } 30 } 31 32 type agentSuite struct { 33 service.BaseSuite 34 } 35 36 var _ = gc.Suite(&agentSuite{}) 37 38 func (*agentSuite) TestAgentConfMachineLocal(c *gc.C) { 39 // We use two distinct directories to ensure the paths don't get 40 // mixed up during the call. 41 dataDir := c.MkDir() 42 logDir := c.MkDir() 43 info := service.NewMachineAgentInfo("0", dataDir, logDir) 44 renderer, err := shell.NewRenderer("") 45 c.Assert(err, jc.ErrorIsNil) 46 conf := service.AgentConf(info, renderer) 47 48 jujud := filepath.Join(dataDir, "tools", "machine-0", "jujud"+cmdSuffix) 49 cmd := strings.Join([]string{ 50 shquote(jujud), 51 "machine", 52 "--data-dir", shquote(dataDir), 53 "--machine-id", "0", 54 "--debug", 55 }, " ") 56 serviceBinary := jujud 57 serviceArgs := []string{ 58 "machine", 59 "--data-dir", dataDir, 60 "--machine-id", "0", 61 "--debug", 62 } 63 c.Check(conf, jc.DeepEquals, common.Conf{ 64 Desc: "juju agent for machine-0", 65 ExecStart: cmd, 66 Logfile: filepath.Join(logDir, "machine-0.log"), 67 Env: osenv.FeatureFlags(), 68 Limit: map[string]int{ 69 "nofile": 20000, 70 }, 71 Timeout: 300, 72 ServiceBinary: serviceBinary, 73 ServiceArgs: serviceArgs, 74 }) 75 } 76 77 func (*agentSuite) TestAgentConfMachineUbuntu(c *gc.C) { 78 dataDir := "/var/lib/juju" 79 logDir := "/var/log/juju" 80 info := service.NewMachineAgentInfo("0", dataDir, logDir) 81 renderer, err := shell.NewRenderer("ubuntu") 82 c.Assert(err, jc.ErrorIsNil) 83 conf := service.AgentConf(info, renderer) 84 85 jujud := dataDir + "/tools/machine-0/jujud" 86 cmd := strings.Join([]string{ 87 shquote(dataDir + "/tools/machine-0/jujud"), 88 "machine", 89 "--data-dir", shquote(dataDir), 90 "--machine-id", "0", 91 "--debug", 92 }, " ") 93 serviceBinary := jujud 94 serviceArgs := []string{ 95 "machine", 96 "--data-dir", dataDir, 97 "--machine-id", "0", 98 "--debug", 99 } 100 c.Check(conf, jc.DeepEquals, common.Conf{ 101 Desc: "juju agent for machine-0", 102 ExecStart: cmd, 103 Logfile: logDir + "/machine-0.log", 104 Env: osenv.FeatureFlags(), 105 Limit: map[string]int{ 106 "nofile": 20000, 107 }, 108 Timeout: 300, 109 ServiceBinary: serviceBinary, 110 ServiceArgs: serviceArgs, 111 }) 112 } 113 114 func (*agentSuite) TestAgentConfMachineWindows(c *gc.C) { 115 dataDir := `C:\Juju\lib\juju` 116 logDir := `C:\Juju\logs\juju` 117 info := service.NewMachineAgentInfo("0", dataDir, logDir) 118 renderer, err := shell.NewRenderer("windows") 119 c.Assert(err, jc.ErrorIsNil) 120 conf := service.AgentConf(info, renderer) 121 122 jujud := dataDir + `\tools\machine-0\jujud.exe` 123 cmd := strings.Join([]string{ 124 shquote(jujud), 125 "machine", 126 "--data-dir", shquote(dataDir), 127 "--machine-id", "0", 128 "--debug", 129 }, " ") 130 serviceBinary := jujud 131 serviceArgs := []string{ 132 "machine", 133 "--data-dir", dataDir, 134 "--machine-id", "0", 135 "--debug", 136 } 137 c.Check(conf, jc.DeepEquals, common.Conf{ 138 Desc: "juju agent for machine-0", 139 ExecStart: cmd, 140 Logfile: logDir + `\machine-0.log`, 141 Env: osenv.FeatureFlags(), 142 Limit: map[string]int{ 143 "nofile": 20000, 144 }, 145 Timeout: 300, 146 ServiceBinary: serviceBinary, 147 ServiceArgs: serviceArgs, 148 }) 149 } 150 151 func (*agentSuite) TestAgentConfUnit(c *gc.C) { 152 dataDir := c.MkDir() 153 logDir := c.MkDir() 154 info := service.NewUnitAgentInfo("wordpress/0", dataDir, logDir) 155 renderer, err := shell.NewRenderer("") 156 c.Assert(err, jc.ErrorIsNil) 157 conf := service.AgentConf(info, renderer) 158 159 jujud := filepath.Join(dataDir, "tools", "unit-wordpress-0", "jujud"+cmdSuffix) 160 cmd := strings.Join([]string{ 161 shquote(jujud), 162 "unit", 163 "--data-dir", shquote(dataDir), 164 "--unit-name", "wordpress/0", 165 "--debug", 166 }, " ") 167 serviceBinary := jujud 168 serviceArgs := []string{ 169 "unit", 170 "--data-dir", dataDir, 171 "--unit-name", "wordpress/0", 172 "--debug", 173 } 174 c.Check(conf, jc.DeepEquals, common.Conf{ 175 Desc: "juju unit agent for wordpress/0", 176 ExecStart: cmd, 177 Logfile: filepath.Join(logDir, "unit-wordpress-0.log"), 178 Env: osenv.FeatureFlags(), 179 Timeout: 300, 180 ServiceBinary: serviceBinary, 181 ServiceArgs: serviceArgs, 182 }) 183 } 184 185 func (*agentSuite) TestContainerAgentConf(c *gc.C) { 186 dataDir := c.MkDir() 187 logDir := c.MkDir() 188 info := service.NewUnitAgentInfo("wordpress/0", dataDir, logDir) 189 renderer, err := shell.NewRenderer("") 190 c.Assert(err, jc.ErrorIsNil) 191 conf := service.ContainerAgentConf(info, renderer, "cont") 192 193 jujud := filepath.Join(dataDir, "tools", "unit-wordpress-0", "jujud"+cmdSuffix) 194 cmd := strings.Join([]string{ 195 shquote(jujud), 196 "unit", 197 "--data-dir", shquote(dataDir), 198 "--unit-name", "wordpress/0", 199 "--debug", 200 }, " ") 201 serviceBinary := jujud 202 serviceArgs := []string{ 203 "unit", 204 "--data-dir", dataDir, 205 "--unit-name", "wordpress/0", 206 "--debug", 207 } 208 env := osenv.FeatureFlags() 209 env[osenv.JujuContainerTypeEnvKey] = "cont" 210 c.Check(conf, jc.DeepEquals, common.Conf{ 211 Desc: "juju unit agent for wordpress/0", 212 ExecStart: cmd, 213 Logfile: filepath.Join(logDir, "unit-wordpress-0.log"), 214 Env: env, 215 Timeout: 300, 216 ServiceBinary: serviceBinary, 217 ServiceArgs: serviceArgs, 218 }) 219 } 220 221 func (*agentSuite) TestShutdownAfterConf(c *gc.C) { 222 conf, err := service.ShutdownAfterConf("spam") 223 c.Assert(err, jc.ErrorIsNil) 224 225 c.Check(conf, jc.DeepEquals, common.Conf{ 226 Desc: "juju shutdown job", 227 Transient: true, 228 AfterStopped: "spam", 229 ExecStart: "/sbin/shutdown -h now", 230 }) 231 renderer := &shell.BashRenderer{} 232 c.Check(conf.Validate(renderer), jc.ErrorIsNil) 233 } 234 235 func (*agentSuite) TestShutdownAfterConfMissingServiceName(c *gc.C) { 236 _, err := service.ShutdownAfterConf("") 237 238 c.Check(err, gc.ErrorMatches, `.*missing "after" service name.*`) 239 }