github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/container/testing/common.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package testing 5 6 import ( 7 "io/ioutil" 8 9 "github.com/juju/errors" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/container" 14 "github.com/juju/juju/environs" 15 "github.com/juju/juju/environs/cloudinit" 16 "github.com/juju/juju/environs/config" 17 "github.com/juju/juju/environs/imagemetadata" 18 "github.com/juju/juju/instance" 19 jujutesting "github.com/juju/juju/juju/testing" 20 "github.com/juju/juju/provider/dummy" 21 "github.com/juju/juju/tools" 22 "github.com/juju/juju/version" 23 ) 24 25 func MockMachineConfig(machineId string) (*cloudinit.MachineConfig, error) { 26 27 stateInfo := jujutesting.FakeStateInfo(machineId) 28 apiInfo := jujutesting.FakeAPIInfo(machineId) 29 machineConfig, err := environs.NewMachineConfig(machineId, "fake-nonce", imagemetadata.ReleasedStream, "quantal", true, nil, stateInfo, apiInfo) 30 if err != nil { 31 return nil, err 32 } 33 machineConfig.Tools = &tools.Tools{ 34 Version: version.MustParseBinary("2.3.4-quantal-amd64"), 35 URL: "http://tools.testing.invalid/2.3.4-quantal-amd64.tgz", 36 } 37 38 return machineConfig, nil 39 } 40 41 func CreateContainer(c *gc.C, manager container.Manager, machineId string) instance.Instance { 42 machineConfig, err := MockMachineConfig(machineId) 43 c.Assert(err, jc.ErrorIsNil) 44 45 envConfig, err := config.New(config.NoDefaults, dummy.SampleConfig()) 46 c.Assert(err, jc.ErrorIsNil) 47 machineConfig.Config = envConfig 48 return CreateContainerWithMachineConfig(c, manager, machineConfig) 49 } 50 51 func CreateContainerWithMachineConfig( 52 c *gc.C, 53 manager container.Manager, 54 machineConfig *cloudinit.MachineConfig, 55 ) instance.Instance { 56 57 networkConfig := container.BridgeNetworkConfig("nic42", nil) 58 return CreateContainerWithMachineAndNetworkConfig(c, manager, machineConfig, networkConfig) 59 } 60 61 func CreateContainerWithMachineAndNetworkConfig( 62 c *gc.C, 63 manager container.Manager, 64 machineConfig *cloudinit.MachineConfig, 65 networkConfig *container.NetworkConfig, 66 ) instance.Instance { 67 68 inst, hardware, err := manager.CreateContainer(machineConfig, "quantal", networkConfig) 69 c.Assert(err, jc.ErrorIsNil) 70 c.Assert(hardware, gc.NotNil) 71 c.Assert(hardware.String(), gc.Not(gc.Equals), "") 72 return inst 73 } 74 75 func AssertCloudInit(c *gc.C, filename string) []byte { 76 c.Assert(filename, jc.IsNonEmptyFile) 77 data, err := ioutil.ReadFile(filename) 78 c.Assert(err, jc.ErrorIsNil) 79 c.Assert(string(data), jc.HasPrefix, "#cloud-config\n") 80 return data 81 } 82 83 // CreateContainerTest tries to create a container and returns any errors encountered along the 84 // way 85 func CreateContainerTest(c *gc.C, manager container.Manager, machineId string) (instance.Instance, error) { 86 machineConfig, err := MockMachineConfig(machineId) 87 if err != nil { 88 return nil, errors.Trace(err) 89 } 90 91 envConfig, err := config.New(config.NoDefaults, dummy.SampleConfig()) 92 if err != nil { 93 return nil, errors.Trace(err) 94 } 95 machineConfig.Config = envConfig 96 97 network := container.BridgeNetworkConfig("nic42", nil) 98 99 inst, hardware, err := manager.CreateContainer(machineConfig, "quantal", network) 100 101 if err != nil { 102 return nil, errors.Trace(err) 103 } 104 if hardware == nil { 105 return nil, errors.New("nil hardware characteristics") 106 } 107 if hardware.String() == "" { 108 return nil, errors.New("empty hardware characteristics") 109 } 110 return inst, nil 111 112 } 113 114 // FakeLxcURLScript is used to replace ubuntu-cloudimg-query in tests. 115 var FakeLxcURLScript = `#!/bin/bash 116 echo -n test://cloud-images/$1-$2-$3.tar.gz` 117 118 // MockURLGetter implements ImageURLGetter. 119 type MockURLGetter struct{} 120 121 func (ug *MockURLGetter) ImageURL(kind instance.ContainerType, series, arch string) (string, error) { 122 return "imageURL", nil 123 } 124 125 func (ug *MockURLGetter) CACert() []byte { 126 return []byte("cert") 127 }