github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/provider/azure/customdata_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package azure 5 6 import ( 7 "encoding/base64" 8 "path" 9 10 "github.com/juju/names" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/api" 15 "github.com/juju/juju/cloudconfig/instancecfg" 16 "github.com/juju/juju/cloudconfig/providerinit" 17 "github.com/juju/juju/juju/paths" 18 "github.com/juju/juju/mongo" 19 "github.com/juju/juju/state/multiwatcher" 20 "github.com/juju/juju/testing" 21 "github.com/juju/juju/tools" 22 "github.com/juju/juju/version" 23 ) 24 25 type customDataSuite struct { 26 testing.BaseSuite 27 } 28 29 var _ = gc.Suite(&customDataSuite{}) 30 31 func must(s string, err error) string { 32 if err != nil { 33 panic(err) 34 } 35 return s 36 } 37 38 var logDir = must(paths.LogDir("precise")) 39 var dataDir = must(paths.DataDir("precise")) 40 var cloudInitOutputLog = path.Join(logDir, "cloud-init-output.log") 41 42 // makeInstanceConfig produces a valid cloudinit machine config. 43 func makeInstanceConfig(c *gc.C) *instancecfg.InstanceConfig { 44 machineId := "0" 45 machineTag := names.NewMachineTag(machineId) 46 return &instancecfg.InstanceConfig{ 47 MachineId: machineId, 48 MachineNonce: "gxshasqlnng", 49 DataDir: dataDir, 50 LogDir: logDir, 51 Jobs: []multiwatcher.MachineJob{ 52 multiwatcher.JobManageEnviron, 53 multiwatcher.JobHostUnits, 54 multiwatcher.JobManageNetworking, 55 }, 56 CloudInitOutputLog: cloudInitOutputLog, 57 Tools: &tools.Tools{ 58 Version: version.MustParseBinary("1.2.3-quantal-amd64"), 59 URL: "http://testing.invalid/tools.tar.gz", 60 }, 61 Series: "quantal", 62 MongoInfo: &mongo.MongoInfo{ 63 Info: mongo.Info{ 64 CACert: testing.CACert, 65 Addrs: []string{"127.0.0.1:123"}, 66 }, 67 Tag: machineTag, 68 Password: "password", 69 }, 70 APIInfo: &api.Info{ 71 CACert: testing.CACert, 72 Addrs: []string{"127.0.0.1:123"}, 73 Tag: machineTag, 74 EnvironTag: testing.EnvironmentTag, 75 }, 76 MachineAgentServiceName: "jujud-machine-0", 77 } 78 } 79 80 // makeBadInstanceConfig produces a cloudinit machine config that cloudinit 81 // will reject as invalid. 82 func makeBadInstanceConfig() *instancecfg.InstanceConfig { 83 // As it happens, a default-initialized config is invalid. 84 return &instancecfg.InstanceConfig{Series: "quantal"} 85 } 86 87 func (*customDataSuite) TestMakeCustomDataPropagatesError(c *gc.C) { 88 _, err := makeCustomData(makeBadInstanceConfig()) 89 c.Assert(err, gc.NotNil) 90 c.Check(err, gc.ErrorMatches, "failure while generating custom data: invalid machine configuration: invalid machine id") 91 } 92 93 func (*customDataSuite) TestMakeCustomDataEncodesUserData(c *gc.C) { 94 cfg := makeInstanceConfig(c) 95 96 encodedData, err := makeCustomData(cfg) 97 c.Assert(err, jc.ErrorIsNil) 98 99 data, err := base64.StdEncoding.DecodeString(encodedData) 100 c.Assert(err, jc.ErrorIsNil) 101 reference, err := providerinit.ComposeUserData(cfg, nil) 102 c.Assert(err, jc.ErrorIsNil) 103 c.Check(data, gc.DeepEquals, reference) 104 }