github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/container/userdata_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package container_test
     5  
     6  import (
     7  	"path/filepath"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/cloudinit"
    13  	"github.com/juju/juju/container"
    14  	containertesting "github.com/juju/juju/container/testing"
    15  	"github.com/juju/juju/network"
    16  	"github.com/juju/juju/testing"
    17  )
    18  
    19  type UserDataSuite struct {
    20  	testing.BaseSuite
    21  
    22  	networkInterfacesFile string
    23  }
    24  
    25  var _ = gc.Suite(&UserDataSuite{})
    26  
    27  func (s *UserDataSuite) SetUpTest(c *gc.C) {
    28  	s.BaseSuite.SetUpTest(c)
    29  	s.networkInterfacesFile = filepath.Join(c.MkDir(), "interfaces")
    30  	s.PatchValue(container.NetworkInterfacesFile, s.networkInterfacesFile)
    31  }
    32  
    33  func (s *UserDataSuite) TestNewCloudInitConfigWithNetworks(c *gc.C) {
    34  	ifaces := []network.InterfaceInfo{{
    35  		InterfaceName:  "eth0",
    36  		ConfigType:     network.ConfigStatic,
    37  		NoAutoStart:    false,
    38  		Address:        network.NewAddress("0.1.2.3", network.ScopeUnknown),
    39  		DNSServers:     network.NewAddresses("ns1.invalid", "ns2.invalid"),
    40  		GatewayAddress: network.NewAddress("0.1.2.1", network.ScopeUnknown),
    41  	}, {
    42  		InterfaceName: "eth1",
    43  		ConfigType:    network.ConfigDHCP,
    44  		NoAutoStart:   true,
    45  	}}
    46  	netConfig := container.BridgeNetworkConfig("foo", ifaces)
    47  	cloudConf, err := container.NewCloudInitConfigWithNetworks(netConfig)
    48  	c.Assert(err, jc.ErrorIsNil)
    49  	expected := `
    50  #cloud-config
    51  bootcmd:
    52  - install -D -m 644 /dev/null '`[1:] + s.networkInterfacesFile + `'
    53  - |-
    54    printf '%s\n' '
    55    # loopback interface
    56    auto lo
    57    iface lo inet loopback
    58  
    59    # interface "eth0"
    60    auto eth0
    61    iface eth0 inet static
    62        address 0.1.2.3
    63        netmask 255.255.255.255
    64        dns-nameservers ns1.invalid ns2.invalid
    65        pre-up ip route add 0.1.2.1 dev eth0
    66        pre-up ip route add default via 0.1.2.1
    67        post-down ip route del default via 0.1.2.1
    68        post-down ip route del 0.1.2.1 dev eth0
    69  
    70    # interface "eth1"
    71    iface eth1 inet dhcp
    72    ' > '` + s.networkInterfacesFile + `'
    73  `
    74  	assertUserData(c, cloudConf, expected)
    75  }
    76  
    77  func (s *UserDataSuite) TestNewCloudInitConfigWithNetworksNoConfig(c *gc.C) {
    78  	netConfig := container.BridgeNetworkConfig("foo", nil)
    79  	cloudConf, err := container.NewCloudInitConfigWithNetworks(netConfig)
    80  	c.Assert(err, jc.ErrorIsNil)
    81  	expected := "#cloud-config\n{}\n"
    82  	assertUserData(c, cloudConf, expected)
    83  }
    84  
    85  func (s *UserDataSuite) TestCloudInitUserData(c *gc.C) {
    86  	machineConfig, err := containertesting.MockMachineConfig("1/lxc/0")
    87  	c.Assert(err, jc.ErrorIsNil)
    88  	networkConfig := container.BridgeNetworkConfig("foo", nil)
    89  	data, err := container.CloudInitUserData(machineConfig, networkConfig)
    90  	c.Assert(err, jc.ErrorIsNil)
    91  	// No need to test the exact contents here, as they are already
    92  	// tested separately.
    93  	c.Assert(string(data), jc.HasPrefix, "#cloud-config\n")
    94  }
    95  
    96  func assertUserData(c *gc.C, cloudConf *cloudinit.Config, expected string) {
    97  	renderer, err := cloudinit.NewRenderer("quantal")
    98  	c.Assert(err, jc.ErrorIsNil)
    99  	data, err := renderer.Render(cloudConf)
   100  	c.Assert(err, jc.ErrorIsNil)
   101  	c.Assert(string(data), gc.Equals, expected)
   102  }