github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/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/agent"
    12  	"launchpad.net/juju-core/environs"
    13  	"launchpad.net/juju-core/environs/cloudinit"
    14  	"launchpad.net/juju-core/names"
    15  	"launchpad.net/juju-core/state"
    16  	"launchpad.net/juju-core/state/api"
    17  	"launchpad.net/juju-core/state/api/params"
    18  	"launchpad.net/juju-core/testing"
    19  	"launchpad.net/juju-core/testing/testbase"
    20  	"launchpad.net/juju-core/tools"
    21  )
    22  
    23  type customDataSuite struct {
    24  	testbase.LoggingSuite
    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  			CACert:   []byte(testing.CACert),
    42  			Addrs:    []string{"127.0.0.1:123"},
    43  			Tag:      names.MachineTag(machineID),
    44  			Password: "password",
    45  		},
    46  		APIInfo: &api.Info{
    47  			CACert: []byte(testing.CACert),
    48  			Addrs:  []string{"127.0.0.1:123"},
    49  			Tag:    names.MachineTag(machineID),
    50  		},
    51  		MachineAgentServiceName: "jujud-machine-0",
    52  	}
    53  }
    54  
    55  // makeBadMachineConfig produces a cloudinit machine config that cloudinit
    56  // will reject as invalid.
    57  func makeBadMachineConfig() *cloudinit.MachineConfig {
    58  	// As it happens, a default-initialized config is invalid.
    59  	return &cloudinit.MachineConfig{}
    60  }
    61  
    62  func (*customDataSuite) TestMakeCustomDataPropagatesError(c *gc.C) {
    63  	_, err := makeCustomData(makeBadMachineConfig())
    64  	c.Assert(err, gc.NotNil)
    65  	c.Check(err, gc.ErrorMatches, "failure while generating custom data: invalid machine configuration: invalid machine id")
    66  }
    67  
    68  func (*customDataSuite) TestMakeCustomDataEncodesUserData(c *gc.C) {
    69  	cfg := makeMachineConfig(c)
    70  
    71  	encodedData, err := makeCustomData(cfg)
    72  	c.Assert(err, gc.IsNil)
    73  
    74  	data, err := base64.StdEncoding.DecodeString(encodedData)
    75  	c.Assert(err, gc.IsNil)
    76  	reference, err := environs.ComposeUserData(cfg)
    77  	c.Assert(err, gc.IsNil)
    78  	c.Check(data, gc.DeepEquals, reference)
    79  }