LEFT | RIGHT |
1 // Copyright 2012, 2013 Canonical Ltd. | 1 // Copyright 2012, 2013 Canonical Ltd. |
2 // Licensed under the AGPLv3, see LICENCE file for details. | 2 // Licensed under the AGPLv3, see LICENCE file for details. |
3 | 3 |
4 package agent_test | 4 package agent_test |
5 | 5 |
6 import ( | 6 import ( |
7 "fmt" | 7 "fmt" |
8 stdtesting "testing" | 8 stdtesting "testing" |
9 | 9 |
10 jc "github.com/juju/testing/checkers" | 10 jc "github.com/juju/testing/checkers" |
11 "labix.org/v2/mgo" | 11 "labix.org/v2/mgo" |
12 gc "launchpad.net/gocheck" | 12 gc "launchpad.net/gocheck" |
13 | 13 |
14 "launchpad.net/juju-core/agent/mongo" | 14 "launchpad.net/juju-core/agent/mongo" |
15 "launchpad.net/juju-core/environs" | 15 "launchpad.net/juju-core/environs" |
16 "launchpad.net/juju-core/errors" | 16 "launchpad.net/juju-core/errors" |
17 "launchpad.net/juju-core/instance" | |
18 "launchpad.net/juju-core/juju/testing" | 17 "launchpad.net/juju-core/juju/testing" |
19 "launchpad.net/juju-core/replicaset" | |
20 "launchpad.net/juju-core/state" | 18 "launchpad.net/juju-core/state" |
21 "launchpad.net/juju-core/state/api" | 19 "launchpad.net/juju-core/state/api" |
22 "launchpad.net/juju-core/state/api/params" | 20 "launchpad.net/juju-core/state/api/params" |
| 21 apiserveragent "launchpad.net/juju-core/state/apiserver/agent" |
23 coretesting "launchpad.net/juju-core/testing" | 22 coretesting "launchpad.net/juju-core/testing" |
24 ) | 23 ) |
25 | 24 |
26 func TestAll(t *stdtesting.T) { | 25 func TestAll(t *stdtesting.T) { |
27 coretesting.MgoTestPackage(t) | 26 coretesting.MgoTestPackage(t) |
28 } | 27 } |
29 | 28 |
30 type servingInfoSuite struct { | 29 type servingInfoSuite struct { |
31 testing.JujuConnSuite | 30 testing.JujuConnSuite |
32 } | 31 } |
33 | 32 |
34 var _ = gc.Suite(&servingInfoSuite{}) | 33 var _ = gc.Suite(&servingInfoSuite{}) |
35 | |
36 func fakeMasterHostPort(session *mgo.Session) (string, error) { | |
37 return "localhost:27017", nil | |
38 } | |
39 | 34 |
40 func (s *servingInfoSuite) TestStateServingInfo(c *gc.C) { | 35 func (s *servingInfoSuite) TestStateServingInfo(c *gc.C) { |
41 st, _ := s.OpenAPIAsNewMachine(c, state.JobManageEnviron) | 36 st, _ := s.OpenAPIAsNewMachine(c, state.JobManageEnviron) |
42 | 37 |
43 expected := params.StateServingInfo{ | 38 expected := params.StateServingInfo{ |
44 PrivateKey: "some key", | 39 PrivateKey: "some key", |
45 Cert: "Some cert", | 40 Cert: "Some cert", |
46 SharedSecret: "really, really secret", | 41 SharedSecret: "really, really secret", |
47 APIPort: 33, | 42 APIPort: 33, |
48 StatePort: 44, | 43 StatePort: 44, |
49 } | 44 } |
50 s.State.SetStateServingInfo(expected) | 45 s.State.SetStateServingInfo(expected) |
51 info, err := st.Agent().StateServingInfo() | 46 info, err := st.Agent().StateServingInfo() |
52 c.Assert(err, gc.IsNil) | 47 c.Assert(err, gc.IsNil) |
53 c.Assert(info, jc.DeepEquals, expected) | 48 c.Assert(info, jc.DeepEquals, expected) |
54 } | 49 } |
55 | 50 |
56 func (s *servingInfoSuite) TestStateServingInfoPermission(c *gc.C) { | 51 func (s *servingInfoSuite) TestStateServingInfoPermission(c *gc.C) { |
57 st, _ := s.OpenAPIAsNewMachine(c) | 52 st, _ := s.OpenAPIAsNewMachine(c) |
58 | 53 |
59 _, err := st.Agent().StateServingInfo() | 54 _, err := st.Agent().StateServingInfo() |
60 c.Assert(err, gc.ErrorMatches, "permission denied") | 55 c.Assert(err, gc.ErrorMatches, "permission denied") |
61 } | 56 } |
62 | 57 |
63 func (s *servingInfoSuite) TestIsMaster(c *gc.C) { | 58 func (s *servingInfoSuite) TestIsMaster(c *gc.C) { |
64 » replicaset.MasterHostPort = func(session *mgo.Session) (string, error) { | 59 » calledIsMaster := false |
65 » » return "10.0.3.1:27017", nil | 60 » var fakeMongoIsMaster = func(session *mgo.Session, m mongo.WithAddresses
) (bool, error) { |
| 61 » » calledIsMaster = true |
| 62 » » return true, nil |
66 } | 63 } |
67 | 64 » s.PatchValue(&apiserveragent.MongoIsMaster, fakeMongoIsMaster) |
68 » mongo.SelectPeerAddress = func(addrs []instance.Address) string { | |
69 » » return "10.0.3.1" | |
70 » } | |
71 | 65 |
72 st, _ := s.OpenAPIAsNewMachine(c, state.JobManageEnviron) | 66 st, _ := s.OpenAPIAsNewMachine(c, state.JobManageEnviron) |
73 » expected := params.IsMasterResult{Master: true} | 67 » expected := true |
74 result, err := st.Agent().IsMaster() | 68 result, err := st.Agent().IsMaster() |
75 | 69 |
76 c.Assert(err, gc.IsNil) | 70 c.Assert(err, gc.IsNil) |
77 » c.Assert(result, jc.DeepEquals, expected) | 71 » c.Assert(result, gc.Equals, expected) |
78 } | 72 » c.Assert(calledIsMaster, gc.Equals, true) |
79 | |
80 func (s *servingInfoSuite) TestIsMasterFalse(c *gc.C) { | |
81 » replicaset.MasterHostPort = func(session *mgo.Session) (string, error) { | |
82 » » return "10.0.3.1:27017", nil | |
83 » } | |
84 | |
85 » mongo.SelectPeerAddress = func(addrs []instance.Address) string { | |
86 » » return "10.0.3.2" | |
87 » } | |
88 | |
89 » st, _ := s.OpenAPIAsNewMachine(c, state.JobManageEnviron) | |
90 » expected := params.IsMasterResult{Master: false} | |
91 » result, err := st.Agent().IsMaster() | |
92 | |
93 » c.Assert(err, gc.IsNil) | |
94 » c.Assert(result, jc.DeepEquals, expected) | |
95 } | 73 } |
96 | 74 |
97 func (s *servingInfoSuite) TestIsMasterPermission(c *gc.C) { | 75 func (s *servingInfoSuite) TestIsMasterPermission(c *gc.C) { |
98 st, _ := s.OpenAPIAsNewMachine(c) | 76 st, _ := s.OpenAPIAsNewMachine(c) |
99 _, err := st.Agent().IsMaster() | 77 _, err := st.Agent().IsMaster() |
100 c.Assert(err, gc.ErrorMatches, "permission denied") | 78 c.Assert(err, gc.ErrorMatches, "permission denied") |
101 } | 79 } |
102 | 80 |
103 type machineSuite struct { | 81 type machineSuite struct { |
104 testing.JujuConnSuite | 82 testing.JujuConnSuite |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 c.Assert(err, jc.Satisfies, errors.IsUnauthorizedError) | 138 c.Assert(err, jc.Satisfies, errors.IsUnauthorizedError) |
161 } | 139 } |
162 | 140 |
163 func tryOpenState(info *state.Info) error { | 141 func tryOpenState(info *state.Info) error { |
164 st, err := state.Open(info, state.DialOpts{}, environs.NewStatePolicy()) | 142 st, err := state.Open(info, state.DialOpts{}, environs.NewStatePolicy()) |
165 if err == nil { | 143 if err == nil { |
166 st.Close() | 144 st.Close() |
167 } | 145 } |
168 return err | 146 return err |
169 } | 147 } |
LEFT | RIGHT |