github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/state/apiserver/client/machineconfig_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package client_test
     5  
     6  import (
     7  	"fmt"
     8  
     9  	gc "launchpad.net/gocheck"
    10  
    11  	"github.com/juju/juju/environs"
    12  	envtools "github.com/juju/juju/environs/tools"
    13  	"github.com/juju/juju/instance"
    14  	"github.com/juju/juju/juju/testing"
    15  	"github.com/juju/juju/state/api/params"
    16  	"github.com/juju/juju/state/apiserver/client"
    17  	coretools "github.com/juju/juju/tools"
    18  )
    19  
    20  type machineConfigSuite struct {
    21  	testing.JujuConnSuite
    22  }
    23  
    24  var _ = gc.Suite(&machineConfigSuite{})
    25  
    26  func (s *machineConfigSuite) TestMachineConfig(c *gc.C) {
    27  	addrs := []instance.Address{instance.NewAddress("1.2.3.4", instance.NetworkUnknown)}
    28  	hc := instance.MustParseHardware("mem=4G arch=amd64")
    29  	apiParams := params.AddMachineParams{
    30  		Jobs:       []params.MachineJob{params.JobHostUnits},
    31  		InstanceId: instance.Id("1234"),
    32  		Nonce:      "foo",
    33  		HardwareCharacteristics: hc,
    34  		Addrs: addrs,
    35  	}
    36  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
    37  	c.Assert(err, gc.IsNil)
    38  	c.Assert(len(machines), gc.Equals, 1)
    39  
    40  	machineId := machines[0].Machine
    41  	machineConfig, err := client.MachineConfig(s.State, machineId, apiParams.Nonce, "")
    42  	c.Assert(err, gc.IsNil)
    43  
    44  	envConfig, err := s.State.EnvironConfig()
    45  	c.Assert(err, gc.IsNil)
    46  	env, err := environs.New(envConfig)
    47  	c.Assert(err, gc.IsNil)
    48  	stateInfo, apiInfo, err := env.StateInfo()
    49  	c.Assert(err, gc.IsNil)
    50  	c.Check(machineConfig.StateInfo.Addrs, gc.DeepEquals, stateInfo.Addrs)
    51  	c.Check(machineConfig.APIInfo.Addrs, gc.DeepEquals, apiInfo.Addrs)
    52  	c.Assert(machineConfig.Tools.URL, gc.Not(gc.Equals), "")
    53  }
    54  
    55  func (s *machineConfigSuite) TestMachineConfigNoArch(c *gc.C) {
    56  	apiParams := params.AddMachineParams{
    57  		Jobs:       []params.MachineJob{params.JobHostUnits},
    58  		InstanceId: instance.Id("1234"),
    59  		Nonce:      "foo",
    60  	}
    61  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
    62  	c.Assert(err, gc.IsNil)
    63  	c.Assert(len(machines), gc.Equals, 1)
    64  	_, err = client.MachineConfig(s.State, machines[0].Machine, apiParams.Nonce, "")
    65  	c.Assert(err, gc.ErrorMatches, fmt.Sprintf("arch is not set for %q", "machine-"+machines[0].Machine))
    66  }
    67  
    68  func (s *machineConfigSuite) TestMachineConfigNoTools(c *gc.C) {
    69  	s.PatchValue(&envtools.DefaultBaseURL, "")
    70  	addrs := []instance.Address{instance.NewAddress("1.2.3.4", instance.NetworkUnknown)}
    71  	hc := instance.MustParseHardware("mem=4G arch=amd64")
    72  	apiParams := params.AddMachineParams{
    73  		Series:     "quantal",
    74  		Jobs:       []params.MachineJob{params.JobHostUnits},
    75  		InstanceId: instance.Id("1234"),
    76  		Nonce:      "foo",
    77  		HardwareCharacteristics: hc,
    78  		Addrs: addrs,
    79  	}
    80  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
    81  	c.Assert(err, gc.IsNil)
    82  	_, err = client.MachineConfig(s.State, machines[0].Machine, apiParams.Nonce, "")
    83  	c.Assert(err, gc.ErrorMatches, coretools.ErrNoMatches.Error())
    84  }