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