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 }