1
// Copyright 2012, 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
11
jc "github.com/juju/testing/checkers"
12
gc "gopkg.in/check.v1"
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"
27
type machineConfigSuite struct {
31
var _ = gc.Suite(&machineConfigSuite{})
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"),
40
HardwareCharacteristics: hc,
41
Addrs: params.FromNetworkAddresses(addrs),
43
machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
44
c.Assert(err, jc.ErrorIsNil)
45
c.Assert(len(machines), gc.Equals, 1)
47
machineId := machines[0].Machine
48
instanceConfig, err := client.InstanceConfig(s.State, machineId, apiParams.Nonce, "")
49
c.Assert(err, jc.ErrorIsNil)
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()))}
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")
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",
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"),
79
HardwareCharacteristics: hc,
81
machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
82
c.Assert(err, jc.ErrorIsNil)
83
c.Assert(len(machines), gc.Equals, 1)
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")
91
func (s *machineConfigSuite) TestMachineConfigNoArch(c *gc.C) {
92
apiParams := params.AddMachineParams{
93
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
94
InstanceId: instance.Id("1234"),
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))
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{
110
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
111
InstanceId: instance.Id("1234"),
113
HardwareCharacteristics: hc,
114
Addrs: params.FromNetworkAddresses(addrs),
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())