github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/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/network"
    16  	"github.com/juju/juju/state/api/params"
    17  	"github.com/juju/juju/state/apiserver/client"
    18  	coretools "github.com/juju/juju/tools"
    19  )
    20  
    21  type machineConfigSuite struct {
    22  	testing.JujuConnSuite
    23  }
    24  
    25  var _ = gc.Suite(&machineConfigSuite{})
    26  
    27  func (s *machineConfigSuite) TestMachineConfig(c *gc.C) {
    28  	addrs := []network.Address{network.NewAddress("1.2.3.4", network.ScopeUnknown)}
    29  	hc := instance.MustParseHardware("mem=4G arch=amd64")
    30  	apiParams := params.AddMachineParams{
    31  		Jobs:       []params.MachineJob{params.JobHostUnits},
    32  		InstanceId: instance.Id("1234"),
    33  		Nonce:      "foo",
    34  		HardwareCharacteristics: hc,
    35  		Addrs: addrs,
    36  	}
    37  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
    38  	c.Assert(err, gc.IsNil)
    39  	c.Assert(len(machines), gc.Equals, 1)
    40  
    41  	machineId := machines[0].Machine
    42  	machineConfig, err := client.MachineConfig(s.State, machineId, apiParams.Nonce, "")
    43  	c.Assert(err, gc.IsNil)
    44  
    45  	envConfig, err := s.State.EnvironConfig()
    46  	c.Assert(err, gc.IsNil)
    47  	env, err := environs.New(envConfig)
    48  	c.Assert(err, gc.IsNil)
    49  	stateInfo, apiInfo, err := env.StateInfo()
    50  	c.Assert(err, gc.IsNil)
    51  	c.Check(machineConfig.StateInfo.Addrs, gc.DeepEquals, stateInfo.Addrs)
    52  	c.Check(machineConfig.APIInfo.Addrs, gc.DeepEquals, apiInfo.Addrs)
    53  	c.Assert(machineConfig.Tools.URL, gc.Not(gc.Equals), "")
    54  }
    55  
    56  func (s *machineConfigSuite) TestMachineConfigNoArch(c *gc.C) {
    57  	apiParams := params.AddMachineParams{
    58  		Jobs:       []params.MachineJob{params.JobHostUnits},
    59  		InstanceId: instance.Id("1234"),
    60  		Nonce:      "foo",
    61  	}
    62  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
    63  	c.Assert(err, gc.IsNil)
    64  	c.Assert(len(machines), gc.Equals, 1)
    65  	_, err = client.MachineConfig(s.State, machines[0].Machine, apiParams.Nonce, "")
    66  	c.Assert(err, gc.ErrorMatches, fmt.Sprintf("arch is not set for %q", "machine-"+machines[0].Machine))
    67  }
    68  
    69  func (s *machineConfigSuite) TestMachineConfigNoTools(c *gc.C) {
    70  	s.PatchValue(&envtools.DefaultBaseURL, "")
    71  	addrs := []network.Address{network.NewAddress("1.2.3.4", network.ScopeUnknown)}
    72  	hc := instance.MustParseHardware("mem=4G arch=amd64")
    73  	apiParams := params.AddMachineParams{
    74  		Series:     "quantal",
    75  		Jobs:       []params.MachineJob{params.JobHostUnits},
    76  		InstanceId: instance.Id("1234"),
    77  		Nonce:      "foo",
    78  		HardwareCharacteristics: hc,
    79  		Addrs: addrs,
    80  	}
    81  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
    82  	c.Assert(err, gc.IsNil)
    83  	_, err = client.MachineConfig(s.State, machines[0].Machine, apiParams.Nonce, "")
    84  	c.Assert(err, gc.ErrorMatches, coretools.ErrNoMatches.Error())
    85  }