github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/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 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/agent" 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" 22 "github.com/juju/juju/state/multiwatcher" 23 jujutesting "github.com/juju/juju/testing" 24 coretools "github.com/juju/juju/tools" 25 ) 26 27 type machineConfigSuite struct { 28 testing.JujuConnSuite 29 } 30 31 var _ = gc.Suite(&machineConfigSuite{}) 32 33 func (s *machineConfigSuite) TestMachineConfig(c *gc.C) { 34 addrs := network.NewAddresses("1.2.3.4") 35 hc := instance.MustParseHardware("mem=4G arch=amd64") 36 apiParams := params.AddMachineParams{ 37 Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits}, 38 InstanceId: instance.Id("1234"), 39 Nonce: "foo", 40 HardwareCharacteristics: hc, 41 Addrs: params.FromNetworkAddresses(addrs), 42 } 43 machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams}) 44 c.Assert(err, jc.ErrorIsNil) 45 c.Assert(len(machines), gc.Equals, 1) 46 47 machineId := machines[0].Machine 48 instanceConfig, err := client.InstanceConfig(s.State, machineId, apiParams.Nonce, "") 49 c.Assert(err, jc.ErrorIsNil) 50 51 envConfig, err := s.State.EnvironConfig() 52 c.Assert(err, jc.ErrorIsNil) 53 mongoAddrs := s.State.MongoConnectionInfo().Addrs 54 apiAddrs := []string{net.JoinHostPort("localhost", strconv.Itoa(envConfig.APIPort()))} 55 56 c.Check(instanceConfig.MongoInfo.Addrs, gc.DeepEquals, mongoAddrs) 57 c.Check(instanceConfig.APIInfo.Addrs, gc.DeepEquals, apiAddrs) 58 toolsURL := fmt.Sprintf("https://%s/environment/%s/tools/%s", 59 apiAddrs[0], jujutesting.EnvironmentTag.Id(), instanceConfig.Tools.Version) 60 c.Assert(instanceConfig.Tools.URL, gc.Equals, toolsURL) 61 c.Assert(instanceConfig.AgentEnvironment[agent.AllowsSecureConnection], gc.Equals, "true") 62 } 63 64 func (s *machineConfigSuite) TestSecureConnectionDisallowed(c *gc.C) { 65 // StateServingInfo without CAPrivateKey will not allow secure connections. 66 servingInfo := state.StateServingInfo{ 67 PrivateKey: jujutesting.ServerKey, 68 Cert: jujutesting.ServerCert, 69 SharedSecret: "really, really secret", 70 APIPort: 4321, 71 StatePort: 1234, 72 } 73 s.State.SetStateServingInfo(servingInfo) 74 hc := instance.MustParseHardware("mem=4G arch=amd64") 75 apiParams := params.AddMachineParams{ 76 Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits}, 77 InstanceId: instance.Id("1234"), 78 Nonce: "foo", 79 HardwareCharacteristics: hc, 80 } 81 machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams}) 82 c.Assert(err, jc.ErrorIsNil) 83 c.Assert(len(machines), gc.Equals, 1) 84 85 machineId := machines[0].Machine 86 instanceConfig, err := client.InstanceConfig(s.State, machineId, apiParams.Nonce, "") 87 c.Assert(err, jc.ErrorIsNil) 88 c.Assert(instanceConfig.AgentEnvironment[agent.AllowsSecureConnection], gc.Equals, "false") 89 } 90 91 func (s *machineConfigSuite) TestMachineConfigNoArch(c *gc.C) { 92 apiParams := params.AddMachineParams{ 93 Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits}, 94 InstanceId: instance.Id("1234"), 95 Nonce: "foo", 96 } 97 machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams}) 98 c.Assert(err, jc.ErrorIsNil) 99 c.Assert(len(machines), gc.Equals, 1) 100 _, err = client.InstanceConfig(s.State, machines[0].Machine, apiParams.Nonce, "") 101 c.Assert(err, gc.ErrorMatches, fmt.Sprintf("arch is not set for %q", "machine-"+machines[0].Machine)) 102 } 103 104 func (s *machineConfigSuite) TestMachineConfigNoTools(c *gc.C) { 105 s.PatchValue(&envtools.DefaultBaseURL, "") 106 addrs := network.NewAddresses("1.2.3.4") 107 hc := instance.MustParseHardware("mem=4G arch=amd64") 108 apiParams := params.AddMachineParams{ 109 Series: "quantal", 110 Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits}, 111 InstanceId: instance.Id("1234"), 112 Nonce: "foo", 113 HardwareCharacteristics: hc, 114 Addrs: params.FromNetworkAddresses(addrs), 115 } 116 machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams}) 117 c.Assert(err, jc.ErrorIsNil) 118 _, err = client.InstanceConfig(s.State, machines[0].Machine, apiParams.Nonce, "") 119 c.Assert(err, gc.ErrorMatches, coretools.ErrNoMatches.Error()) 120 }