launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/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 9 gc "launchpad.net/gocheck" 10 11 "launchpad.net/juju-core/environs" 12 "launchpad.net/juju-core/environs/cloudinit" 13 "launchpad.net/juju-core/names" 14 "launchpad.net/juju-core/state" 15 "launchpad.net/juju-core/state/api" 16 "launchpad.net/juju-core/testing" 17 "launchpad.net/juju-core/testing/testbase" 18 "launchpad.net/juju-core/tools" 19 ) 20 21 type customDataSuite struct { 22 testbase.LoggingSuite 23 } 24 25 var _ = gc.Suite(&customDataSuite{}) 26 27 // makeMachineConfig produces a valid cloudinit machine config. 28 func makeMachineConfig(c *gc.C) *cloudinit.MachineConfig { 29 machineID := "0" 30 return &cloudinit.MachineConfig{ 31 MachineId: machineID, 32 MachineNonce: "gxshasqlnng", 33 DataDir: environs.DataDir, 34 LogDir: environs.LogDir, 35 CloudInitOutputLog: environs.CloudInitOutputLog, 36 RsyslogConfPath: environs.RsyslogConfPath, 37 Tools: &tools.Tools{URL: "file://" + c.MkDir()}, 38 StateInfo: &state.Info{ 39 CACert: []byte(testing.CACert), 40 Addrs: []string{"127.0.0.1:123"}, 41 Tag: names.MachineTag(machineID), 42 Password: "password", 43 }, 44 APIInfo: &api.Info{ 45 CACert: []byte(testing.CACert), 46 Addrs: []string{"127.0.0.1:123"}, 47 Tag: names.MachineTag(machineID), 48 }, 49 SyslogPort: 2345, 50 MachineAgentServiceName: "jujud-machine-0", 51 } 52 } 53 54 // makeBadMachineConfig produces a cloudinit machine config that cloudinit 55 // will reject as invalid. 56 func makeBadMachineConfig() *cloudinit.MachineConfig { 57 // As it happens, a default-initialized config is invalid. 58 return &cloudinit.MachineConfig{} 59 } 60 61 func (*customDataSuite) TestMakeCustomDataPropagatesError(c *gc.C) { 62 _, err := makeCustomData(makeBadMachineConfig()) 63 c.Assert(err, gc.NotNil) 64 c.Check(err, gc.ErrorMatches, "failure while generating custom data: invalid machine configuration: invalid machine id") 65 } 66 67 func (*customDataSuite) TestMakeCustomDataEncodesUserData(c *gc.C) { 68 cfg := makeMachineConfig(c) 69 70 encodedData, err := makeCustomData(cfg) 71 c.Assert(err, gc.IsNil) 72 73 data, err := base64.StdEncoding.DecodeString(encodedData) 74 c.Assert(err, gc.IsNil) 75 reference, err := environs.ComposeUserData(cfg) 76 c.Assert(err, gc.IsNil) 77 c.Check(data, gc.DeepEquals, reference) 78 }