github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/apiserver/client/instanceconfig_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  	"net"
     9  	"strconv"
    10  
    11  	jc "github.com/juju/testing/checkers"
    12  	"github.com/juju/version"
    13  	gc "gopkg.in/check.v1"
    14  
    15  	"github.com/juju/juju/apiserver/client"
    16  	"github.com/juju/juju/apiserver/params"
    17  	envtools "github.com/juju/juju/environs/tools"
    18  	"github.com/juju/juju/instance"
    19  	"github.com/juju/juju/juju/testing"
    20  	"github.com/juju/juju/network"
    21  	"github.com/juju/juju/state/multiwatcher"
    22  	jujutesting "github.com/juju/juju/testing"
    23  	coretools "github.com/juju/juju/tools"
    24  )
    25  
    26  type machineConfigSuite struct {
    27  	testing.JujuConnSuite
    28  }
    29  
    30  var _ = gc.Suite(&machineConfigSuite{})
    31  
    32  func (s *machineConfigSuite) TestMachineConfig(c *gc.C) {
    33  	addrs := network.NewAddresses("1.2.3.4")
    34  	hc := instance.MustParseHardware("mem=4G arch=amd64")
    35  	apiParams := params.AddMachineParams{
    36  		Jobs:       []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
    37  		InstanceId: instance.Id("1234"),
    38  		Nonce:      "foo",
    39  		HardwareCharacteristics: hc,
    40  		Addrs: params.FromNetworkAddresses(addrs...),
    41  	}
    42  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
    43  	c.Assert(err, jc.ErrorIsNil)
    44  	c.Assert(len(machines), gc.Equals, 1)
    45  
    46  	machineId := machines[0].Machine
    47  	instanceConfig, err := client.InstanceConfig(s.State, machineId, apiParams.Nonce, "")
    48  	c.Assert(err, jc.ErrorIsNil)
    49  
    50  	cfg, err := s.State.ControllerConfig()
    51  	c.Assert(err, jc.ErrorIsNil)
    52  	apiAddrs := []string{net.JoinHostPort("localhost", strconv.Itoa(cfg.APIPort()))}
    53  
    54  	c.Check(instanceConfig.APIInfo.Addrs, gc.DeepEquals, apiAddrs)
    55  	toolsURL := fmt.Sprintf("https://%s/model/%s/tools/%s",
    56  		apiAddrs[0], jujutesting.ModelTag.Id(), instanceConfig.AgentVersion())
    57  	c.Assert(instanceConfig.ToolsList().URLs(), jc.DeepEquals, map[version.Binary][]string{
    58  		instanceConfig.AgentVersion(): []string{toolsURL},
    59  	})
    60  }
    61  
    62  func (s *machineConfigSuite) TestMachineConfigNoArch(c *gc.C) {
    63  	apiParams := params.AddMachineParams{
    64  		Jobs:       []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
    65  		InstanceId: instance.Id("1234"),
    66  		Nonce:      "foo",
    67  	}
    68  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
    69  	c.Assert(err, jc.ErrorIsNil)
    70  	c.Assert(len(machines), gc.Equals, 1)
    71  	_, err = client.InstanceConfig(s.State, machines[0].Machine, apiParams.Nonce, "")
    72  	c.Assert(err, gc.ErrorMatches, fmt.Sprintf("arch is not set for %q", "machine-"+machines[0].Machine))
    73  }
    74  
    75  func (s *machineConfigSuite) TestMachineConfigNoTools(c *gc.C) {
    76  	s.PatchValue(&envtools.DefaultBaseURL, "")
    77  	addrs := network.NewAddresses("1.2.3.4")
    78  	hc := instance.MustParseHardware("mem=4G arch=amd64")
    79  	apiParams := params.AddMachineParams{
    80  		Series:     "quantal",
    81  		Jobs:       []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
    82  		InstanceId: instance.Id("1234"),
    83  		Nonce:      "foo",
    84  		HardwareCharacteristics: hc,
    85  		Addrs: params.FromNetworkAddresses(addrs...),
    86  	}
    87  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
    88  	c.Assert(err, jc.ErrorIsNil)
    89  	_, err = client.InstanceConfig(s.State, machines[0].Machine, apiParams.Nonce, "")
    90  	c.Assert(err, gc.ErrorMatches, "finding tools: "+coretools.ErrNoMatches.Error())
    91  }