Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(542)

Delta Between Two Patch Sets: cmd/juju/status_test.go

Issue 6423043: cmd/juju: status: various improvements (Closed)
Left Patch Set: cmd/juju: initial status command Created 12 years, 8 months ago
Right Patch Set: cmd/juju: status: various improvements Created 12 years, 8 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Right: Side by side diff | Download
« no previous file with change/comment | « cmd/juju/status.go ('k') | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
(no file at all)
1 package main 1 package main
2 2
3 import ( 3 import (
4 "bytes" 4 "bytes"
5 "encoding/json" 5 "encoding/json"
6 "fmt" 6 "fmt"
7 "net/url" 7 "net/url"
8 "os" 8 "os"
9 "path/filepath" 9 "path/filepath"
10 10
11 . "launchpad.net/gocheck" 11 . "launchpad.net/gocheck"
12 "launchpad.net/goyaml" 12 "launchpad.net/goyaml"
13 "launchpad.net/juju-core/charm" 13 "launchpad.net/juju-core/charm"
14 "launchpad.net/juju-core/cmd" 14 "launchpad.net/juju-core/cmd"
15 "launchpad.net/juju-core/environs/dummy" 15 "launchpad.net/juju-core/environs/dummy"
16 "launchpad.net/juju-core/juju" 16 "launchpad.net/juju-core/juju"
17 "launchpad.net/juju-core/state" 17 "launchpad.net/juju-core/state"
18 coretesting "launchpad.net/juju-core/testing" 18 coretesting "launchpad.net/juju-core/testing"
19 "launchpad.net/juju-core/version"
19 ) 20 )
20 21
21 type StatusSuite struct { 22 type StatusSuite struct {
22 envSuite 23 envSuite
23 repoPath, seriesPath string 24 repoPath, seriesPath string
24 conn *juju.Conn 25 conn *juju.Conn
25 st *state.State 26 st *state.State
26 } 27 }
27 28
28 var _ = Suite(&StatusSuite{}) 29 var _ = Suite(&StatusSuite{})
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 m, err := st.Machine(0) 89 m, err := st.Machine(0)
89 c.Assert(err, IsNil) 90 c.Assert(err, IsNil)
90 inst, err := conn.Environ.StartInstance(m.Id(), nil, nil ) 91 inst, err := conn.Environ.StartInstance(m.Id(), nil, nil )
91 c.Assert(err, IsNil) 92 c.Assert(err, IsNil)
92 err = m.SetInstanceId(inst.Id()) 93 err = m.SetInstanceId(inst.Id())
93 c.Assert(err, IsNil) 94 c.Assert(err, IsNil)
94 }, 95 },
95 map[string]interface{}{ 96 map[string]interface{}{
96 "machines": map[int]interface{}{ 97 "machines": map[int]interface{}{
97 0: map[string]interface{}{ 98 0: map[string]interface{}{
98 » » » » » "dns-name": "palermo-0.dns", 99 » » » » » "dns-name": "palermo-0.dns ",
99 » » » » » "instance-id": "palermo-0", 100 » » » » » "instance-id": "palermo-0",
101 » » » » » "agent-version": "0.0.0",
102 » » » » » "proposed-agent-version": "0.0.0",
103 » » » » },
104 » » » },
105 » » » "services": make(map[string]interface{}),
106 » » },
107 » },
108 » {
109 » » "simulate the MA setting the version",
110 » » func(st *state.State, conn *juju.Conn, c *C) {
111 » » » m, err := st.Machine(0)
112 » » » c.Assert(err, IsNil)
113 » » » t := &state.Tools{
114 » » » » Binary: version.Binary{
115 » » » » » Number: version.MustParse("1.2.3"),
116 » » » » » Series: "gutsy",
117 » » » » » Arch: "ppc",
118 » » » » },
119 » » » » URL: "http://canonical.com/",
120 » » » }
121 » » » err = m.SetAgentTools(t)
122 » » » c.Assert(err, IsNil)
123 » » },
124 » » map[string]interface{}{
125 » » » "machines": map[int]interface{}{
126 » » » » 0: map[string]interface{}{
127 » » » » » "dns-name": "palermo-0.dns ",
128 » » » » » "instance-id": "palermo-0",
129 » » » » » "agent-version": "1.2.3",
130 » » » » » "proposed-agent-version": "0.0.0",
131 » » » » },
132 » » » },
133 » » » "services": make(map[string]interface{}),
134 » » },
135 » },
136 » {
137 » » "simulate setting the proposed version",
138 » » func(st *state.State, conn *juju.Conn, c *C) {
139 » » » m, err := st.Machine(0)
140 » » » c.Assert(err, IsNil)
141 » » » t := &state.Tools{
142 » » » » Binary: version.Binary{
143 » » » » » Number: version.MustParse("2.0.3"),
144 » » » » » Series: "gutsy",
145 » » » » » Arch: "ppc",
146 » » » » },
147 » » » » URL: "http://canonical.com/",
148 » » » }
149 » » » err = m.ProposeAgentTools(t)
150 » » » c.Assert(err, IsNil)
151 » » },
152 » » map[string]interface{}{
153 » » » "machines": map[int]interface{}{
154 » » » » 0: map[string]interface{}{
155 » » » » » "dns-name": "palermo-0.dns ",
156 » » » » » "instance-id": "palermo-0",
157 » » » » » "agent-version": "1.2.3",
158 » » » » » "proposed-agent-version": "2.0.3",
100 }, 159 },
101 }, 160 },
102 "services": make(map[string]interface{}), 161 "services": make(map[string]interface{}),
103 }, 162 },
104 }, 163 },
105 { 164 {
106 "add two services and expose one", 165 "add two services and expose one",
107 func(st *state.State, conn *juju.Conn, c *C) { 166 func(st *state.State, conn *juju.Conn, c *C) {
108 ch := coretesting.Charms.Dir("dummy") 167 ch := coretesting.Charms.Dir("dummy")
109 curl := charm.MustParseURL( 168 curl := charm.MustParseURL(
110 fmt.Sprintf("local:series/%s-%d", ch.Meta().Name , ch.Revision()), 169 fmt.Sprintf("local:series/%s-%d", ch.Meta().Name , ch.Revision()),
111 ) 170 )
112 bundleURL, err := url.Parse("http://bundles.example.com/ dummy-1") 171 bundleURL, err := url.Parse("http://bundles.example.com/ dummy-1")
113 c.Assert(err, IsNil) 172 c.Assert(err, IsNil)
114 dummy, err := st.AddCharm(ch, curl, bundleURL, "dummy-1- sha256") 173 dummy, err := st.AddCharm(ch, curl, bundleURL, "dummy-1- sha256")
115 c.Assert(err, IsNil) 174 c.Assert(err, IsNil)
116 _, err = st.AddService("dummy-service", dummy) 175 _, err = st.AddService("dummy-service", dummy)
117 c.Assert(err, IsNil) 176 c.Assert(err, IsNil)
118 s, err := st.AddService("exposed-service", dummy) 177 s, err := st.AddService("exposed-service", dummy)
119 c.Assert(err, IsNil) 178 c.Assert(err, IsNil)
120 err = s.SetExposed() 179 err = s.SetExposed()
121 c.Assert(err, IsNil) 180 c.Assert(err, IsNil)
122 }, 181 },
123 map[string]interface{}{ 182 map[string]interface{}{
124 "machines": map[int]interface{}{ 183 "machines": map[int]interface{}{
125 0: map[string]interface{}{ 184 0: map[string]interface{}{
126 » » » » » "dns-name": "palermo-0.dns", 185 » » » » » "dns-name": "palermo-0.dns ",
127 » » » » » "instance-id": "palermo-0", 186 » » » » » "instance-id": "palermo-0",
187 » » » » » "agent-version": "1.2.3",
188 » » » » » "proposed-agent-version": "2.0.3",
128 }, 189 },
129 }, 190 },
130 "services": map[string]interface{}{ 191 "services": map[string]interface{}{
131 "dummy-service": map[string]interface{}{ 192 "dummy-service": map[string]interface{}{
132 "charm": "dummy", 193 "charm": "dummy",
133 "exposed": false, 194 "exposed": false,
134 }, 195 },
135 "exposed-service": map[string]interface{}{ 196 "exposed-service": map[string]interface{}{
136 "charm": "dummy", 197 "charm": "dummy",
137 "exposed": true, 198 "exposed": true,
138 }, 199 },
139 }, 200 },
140 }, 201 },
141 }, 202 },
203 {
204 "add two more machines for units",
205 func(st *state.State, conn *juju.Conn, c *C) {
206 for i := 1; i < 3; i++ {
207 m, err := st.AddMachine()
208 c.Assert(err, IsNil)
209 c.Assert(m.Id(), Equals, i)
210 inst, err := conn.Environ.StartInstance(m.Id(), nil, nil)
211 c.Assert(err, IsNil)
212 err = m.SetInstanceId(inst.Id())
213 c.Assert(err, IsNil)
214 }
215 },
216 map[string]interface{}{
217 "machines": map[int]interface{}{
218 0: map[string]interface{}{
219 "dns-name": "palermo-0.dns ",
220 "instance-id": "palermo-0",
221 "agent-version": "1.2.3",
222 "proposed-agent-version": "2.0.3",
223 },
224 1: map[string]interface{}{
225 "dns-name": "palermo-1.dns ",
226 "instance-id": "palermo-1",
227 "agent-version": "0.0.0",
228 "proposed-agent-version": "0.0.0",
229 },
230 2: map[string]interface{}{
231 "dns-name": "palermo-2.dns ",
232 "instance-id": "palermo-2",
233 "agent-version": "0.0.0",
234 "proposed-agent-version": "0.0.0",
235 },
236 },
237 "services": map[string]interface{}{
238 "dummy-service": map[string]interface{}{
239 "charm": "dummy",
240 "exposed": false,
241 },
242 "exposed-service": map[string]interface{}{
243 "charm": "dummy",
244 "exposed": true,
245 },
246 },
247 },
248 },
249 {
250 "add units for services",
251 func(st *state.State, conn *juju.Conn, c *C) {
252 for i, n := range []string{"dummy-service", "exposed-ser vice"} {
253 s, err := st.Service(n)
254 c.Assert(err, IsNil)
255 u, err := s.AddUnit()
256 c.Assert(err, IsNil)
257 m, err := st.Machine(i + 1)
258 c.Assert(err, IsNil)
259 err = u.AssignToMachine(m)
260 c.Assert(err, IsNil)
261 }
262 },
263 map[string]interface{}{
264 "machines": map[int]interface{}{
265 0: map[string]interface{}{
266 "dns-name": "palermo-0.dns ",
267 "instance-id": "palermo-0",
268 "agent-version": "1.2.3",
269 "proposed-agent-version": "2.0.3",
270 },
271 1: map[string]interface{}{
272 "dns-name": "palermo-1.dns ",
273 "instance-id": "palermo-1",
274 "agent-version": "0.0.0",
275 "proposed-agent-version": "0.0.0",
276 },
277 2: map[string]interface{}{
278 "dns-name": "palermo-2.dns ",
279 "instance-id": "palermo-2",
280 "agent-version": "0.0.0",
281 "proposed-agent-version": "0.0.0",
282 },
283 },
284 "services": map[string]interface{}{
285 "exposed-service": map[string]interface{}{
286 "exposed": true,
287 "units": map[string]interface{}{
288 "exposed-service/0": map[string] interface{}{
289 "agent-version": "0.0.0",
290 "proposed-agent-version" : "0.0.0",
291 "machine": 2,
292 },
293 },
294 "charm": "dummy",
295 },
296 "dummy-service": map[string]interface{}{
297 "charm": "dummy",
298 "exposed": false,
299 "units": map[string]interface{}{
300 "dummy-service/0": map[string]in terface{}{
301 "agent-version": "0.0.0",
302 "proposed-agent-version" : "0.0.0",
303 "machine": 1,
304 },
305 },
306 },
307 },
308 },
309 },
310
311 // TODO(dfc) test failing components by destructively mutating zk under the hood
142 } 312 }
143 313
144 func (s *StatusSuite) testStatus(format string, marshal func(v interface{}) ([]b yte, error), unmarshal func(data []byte, v interface{}) error, c *C) { 314 func (s *StatusSuite) testStatus(format string, marshal func(v interface{}) ([]b yte, error), unmarshal func(data []byte, v interface{}) error, c *C) {
145 for _, t := range statusTests { 315 for _, t := range statusTests {
146 c.Logf("testing %s: %s", format, t.title) 316 c.Logf("testing %s: %s", format, t.title)
147 t.prepare(s.st, s.conn, c) 317 t.prepare(s.st, s.conn, c)
148 ctx := &cmd.Context{c.MkDir(), &bytes.Buffer{}, &bytes.Buffer{}} 318 ctx := &cmd.Context{c.MkDir(), &bytes.Buffer{}, &bytes.Buffer{}}
149 code := cmd.Main(&StatusCommand{}, ctx, []string{"--format", for mat}) 319 code := cmd.Main(&StatusCommand{}, ctx, []string{"--format", for mat})
150 c.Check(code, Equals, 0) 320 c.Check(code, Equals, 0)
151 c.Assert(ctx.Stderr.(*bytes.Buffer).String(), Equals, "") 321 c.Assert(ctx.Stderr.(*bytes.Buffer).String(), Equals, "")
152 322
153 var buf []byte 323 var buf []byte
154 var err error 324 var err error
155 if format == "json" { 325 if format == "json" {
156 buf, err = marshal(Jsonify(t.output)) 326 buf, err = marshal(Jsonify(t.output))
157 } else { 327 } else {
158 buf, err = marshal(t.output) 328 buf, err = marshal(t.output)
159 } 329 }
160 c.Assert(err, IsNil) 330 c.Assert(err, IsNil)
161 expected := make(map[string]interface{}) 331 expected := make(map[string]interface{})
162 err = unmarshal(buf, &expected) 332 err = unmarshal(buf, &expected)
163 c.Assert(err, IsNil) 333 c.Assert(err, IsNil)
164 334
165 actual := make(map[string]interface{}) 335 actual := make(map[string]interface{})
166 err = unmarshal(ctx.Stdout.(*bytes.Buffer).Bytes(), &actual) 336 err = unmarshal(ctx.Stdout.(*bytes.Buffer).Bytes(), &actual)
167 c.Assert(err, IsNil) 337 c.Assert(err, IsNil)
168
169 c.Assert(actual, DeepEquals, expected) 338 c.Assert(actual, DeepEquals, expected)
170 } 339 }
171 } 340 }
172 341
173 func (s *StatusSuite) TestYamlStatus(c *C) { 342 func (s *StatusSuite) TestYamlStatus(c *C) {
174 s.testStatus("yaml", goyaml.Marshal, goyaml.Unmarshal, c) 343 s.testStatus("yaml", goyaml.Marshal, goyaml.Unmarshal, c)
175 } 344 }
176 345
177 func (s *StatusSuite) TestJsonStatus(c *C) { 346 func (s *StatusSuite) TestJsonStatus(c *C) {
178 s.testStatus("json", json.Marshal, json.Unmarshal, c) 347 s.testStatus("json", json.Marshal, json.Unmarshal, c)
179 } 348 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b