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 }