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  }