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  }