github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/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  	"github.com/juju/names"
    10  	gc "launchpad.net/gocheck"
    11  
    12  	"github.com/juju/juju/agent"
    13  	"github.com/juju/juju/environs"
    14  	"github.com/juju/juju/environs/cloudinit"
    15  	"github.com/juju/juju/state"
    16  	"github.com/juju/juju/state/api"
    17  	"github.com/juju/juju/state/api/params"
    18  	"github.com/juju/juju/testing"
    19  	"github.com/juju/juju/tools"
    20  )
    21  
    22  type customDataSuite struct {
    23  	testing.BaseSuite
    24  }
    25  
    26  var _ = gc.Suite(&customDataSuite{})
    27  
    28  // makeMachineConfig produces a valid cloudinit machine config.
    29  func makeMachineConfig(c *gc.C) *cloudinit.MachineConfig {
    30  	machineID := "0"
    31  	return &cloudinit.MachineConfig{
    32  		MachineId:          machineID,
    33  		MachineNonce:       "gxshasqlnng",
    34  		DataDir:            environs.DataDir,
    35  		LogDir:             agent.DefaultLogDir,
    36  		Jobs:               []params.MachineJob{params.JobManageEnviron, params.JobHostUnits},
    37  		CloudInitOutputLog: environs.CloudInitOutputLog,
    38  		Tools:              &tools.Tools{URL: "file://" + c.MkDir()},
    39  		StateInfo: &state.Info{
    40  			CACert:   testing.CACert,
    41  			Addrs:    []string{"127.0.0.1:123"},
    42  			Tag:      names.MachineTag(machineID),
    43  			Password: "password",
    44  		},
    45  		APIInfo: &api.Info{
    46  			CACert: testing.CACert,
    47  			Addrs:  []string{"127.0.0.1:123"},
    48  			Tag:    names.MachineTag(machineID),
    49  		},
    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, nil)
    76  	c.Assert(err, gc.IsNil)
    77  	c.Check(data, gc.DeepEquals, reference)
    78  }