Merge lp:~pedronis/ubuntu-push/testlog-more into lp:ubuntu-push
- testlog-more
- Merge into trunk
Proposed by
Samuele Pedroni
Status: | Merged |
---|---|
Approved by: | Samuele Pedroni |
Approved revision: | 62 |
Merged at revision: | 53 |
Proposed branch: | lp:~pedronis/ubuntu-push/testlog-more |
Merge into: | lp:ubuntu-push |
Diff against target: |
470 lines (+76/-72) 7 files modified
server/api/middleware_test.go (+3/-6) server/bootlog_test.go (+4/-5) server/broker/testsuite/suite.go (+5/-2) server/runner_test.go (+2/-4) server/session/session_test.go (+30/-31) server/session/tracker_test.go (+17/-18) testing/helpers.go (+15/-6) |
To merge this branch: | bzr merge lp:~pedronis/ubuntu-push/testlog-more |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
John Lenton (community) | Approve | ||
Review via email: mp+204800@code.launchpad.net |
Commit message
use TestLogger in more places
Description of the change
use TestLogger in more places
To post a comment you must log in.
- 62. By Samuele Pedroni
-
use TestLogger
Revision history for this message
John Lenton (chipaca) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'server/api/middleware_test.go' |
2 | --- server/api/middleware_test.go 2014-01-16 16:15:23 +0000 |
3 | +++ server/api/middleware_test.go 2014-02-04 22:50:59 +0000 |
4 | @@ -17,10 +17,8 @@ |
5 | package api |
6 | |
7 | import ( |
8 | - "bytes" |
9 | . "launchpad.net/gocheck" |
10 | - "launchpad.net/ubuntu-push/logger" |
11 | - // "launchpad.net/ubuntu-push/testing" |
12 | + helpers "launchpad.net/ubuntu-push/testing" |
13 | "net/http" |
14 | "net/http/httptest" |
15 | ) |
16 | @@ -30,8 +28,7 @@ |
17 | var _ = Suite(&middlewareSuite{}) |
18 | |
19 | func (s *middlewareSuite) TestPanicTo500Handler(c *C) { |
20 | - buf := &bytes.Buffer{} |
21 | - logger := logger.NewSimpleLogger(buf, "debug") |
22 | + logger := helpers.NewTestLogger(c, "debug") |
23 | panicking := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { |
24 | panic("panic in handler") |
25 | }) |
26 | @@ -40,7 +37,7 @@ |
27 | w := httptest.NewRecorder() |
28 | h.ServeHTTP(w, nil) |
29 | c.Check(w.Code, Equals, 500) |
30 | - c.Check(buf.String(), Matches, "(?s).* ERROR\\(PANIC\\) serving http: panic in handler:.*") |
31 | + c.Check(logger.Captured(), Matches, "(?s)ERROR\\(PANIC\\) serving http: panic in handler:.*") |
32 | c.Check(w.Header().Get("Content-Type"), Equals, "application/json") |
33 | c.Check(w.Body.String(), Equals, `{"error":"internal","message":"INTERNAL SERVER ERROR"}`) |
34 | } |
35 | |
36 | === modified file 'server/bootlog_test.go' |
37 | --- server/bootlog_test.go 2014-01-23 15:33:30 +0000 |
38 | +++ server/bootlog_test.go 2014-02-04 22:50:59 +0000 |
39 | @@ -17,9 +17,8 @@ |
40 | package server |
41 | |
42 | import ( |
43 | - "bytes" |
44 | . "launchpad.net/gocheck" |
45 | - "launchpad.net/ubuntu-push/logger" |
46 | + helpers "launchpad.net/ubuntu-push/testing" |
47 | "net" |
48 | "testing" |
49 | ) |
50 | @@ -31,9 +30,9 @@ |
51 | var _ = Suite(&bootlogSuite{}) |
52 | |
53 | func (s *bootlogSuite) TestBootLogListener(c *C) { |
54 | - buf := &bytes.Buffer{} |
55 | prevBootLogger := BootLogger |
56 | - BootLogger = logger.NewSimpleLogger(buf, "info") |
57 | + testlog := helpers.NewTestLogger(c, "info") |
58 | + BootLogger = testlog |
59 | defer func() { |
60 | BootLogger = prevBootLogger |
61 | }() |
62 | @@ -41,5 +40,5 @@ |
63 | c.Assert(err, IsNil) |
64 | defer lst.Close() |
65 | BootLogListener("client", lst) |
66 | - c.Check(buf.String(), Matches, ".* INFO listening for client on "+lst.Addr().String()+"\n") |
67 | + c.Check(testlog.Captured(), Matches, "INFO listening for client on "+lst.Addr().String()+"\n") |
68 | } |
69 | |
70 | === modified file 'server/broker/testsuite/suite.go' |
71 | --- server/broker/testsuite/suite.go 2014-02-04 21:35:11 +0000 |
72 | +++ server/broker/testsuite/suite.go 2014-02-04 22:50:59 +0000 |
73 | @@ -192,7 +192,10 @@ |
74 | } |
75 | |
76 | func (s *CommonBrokerSuite) TestBroadcastFail(c *C) { |
77 | - s.testlog.Written = make(chan bool, 1) |
78 | + logged := make(chan bool, 1) |
79 | + s.testlog.SetLogEventCb(func(string) { |
80 | + logged <- true |
81 | + }) |
82 | sto := &testFailingStore{countdownToFail: 1} |
83 | b := s.MakeBroker(sto, testBrokerConfig, s.testlog) |
84 | b.Start() |
85 | @@ -203,7 +206,7 @@ |
86 | select { |
87 | case <-time.After(5 * time.Second): |
88 | c.Fatal("taking too long to log error") |
89 | - case <-s.testlog.Written: |
90 | + case <-logged: |
91 | } |
92 | c.Check(s.testlog.Captured(), Matches, "ERROR unsuccessful broadcast, get channel snapshot for 0: get channel snapshot fail\n") |
93 | } |
94 | |
95 | === modified file 'server/runner_test.go' |
96 | --- server/runner_test.go 2014-01-23 15:33:30 +0000 |
97 | +++ server/runner_test.go 2014-02-04 22:50:59 +0000 |
98 | @@ -17,12 +17,10 @@ |
99 | package server |
100 | |
101 | import ( |
102 | - "bytes" |
103 | "fmt" |
104 | "io/ioutil" |
105 | . "launchpad.net/gocheck" |
106 | "launchpad.net/ubuntu-push/config" |
107 | - "launchpad.net/ubuntu-push/logger" |
108 | helpers "launchpad.net/ubuntu-push/testing" |
109 | "net" |
110 | "net/http" |
111 | @@ -102,9 +100,9 @@ |
112 | } |
113 | |
114 | func (s *runnerSuite) TestDevicesRunner(c *C) { |
115 | - buf := &bytes.Buffer{} |
116 | prevBootLogger := BootLogger |
117 | - BootLogger = logger.NewSimpleLogger(buf, "debug") |
118 | + testlog := helpers.NewTestLogger(c, "debug") |
119 | + BootLogger = testlog |
120 | defer func() { |
121 | BootLogger = prevBootLogger |
122 | }() |
123 | |
124 | === modified file 'server/session/session_test.go' |
125 | --- server/session/session_test.go 2014-01-31 17:25:02 +0000 |
126 | +++ server/session/session_test.go 2014-02-04 22:50:59 +0000 |
127 | @@ -18,17 +18,15 @@ |
128 | |
129 | import ( |
130 | "bufio" |
131 | - "bytes" |
132 | "encoding/json" |
133 | "errors" |
134 | "fmt" |
135 | "io" |
136 | - "io/ioutil" |
137 | . "launchpad.net/gocheck" |
138 | - "launchpad.net/ubuntu-push/logger" |
139 | "launchpad.net/ubuntu-push/protocol" |
140 | "launchpad.net/ubuntu-push/server/broker" |
141 | "launchpad.net/ubuntu-push/server/broker/testing" |
142 | + helpers "launchpad.net/ubuntu-push/testing" |
143 | "net" |
144 | "reflect" |
145 | gotesting "testing" |
146 | @@ -37,7 +35,13 @@ |
147 | |
148 | func TestSession(t *gotesting.T) { TestingT(t) } |
149 | |
150 | -type sessionSuite struct{} |
151 | +type sessionSuite struct { |
152 | + testlog *helpers.TestLogger |
153 | +} |
154 | + |
155 | +func (s *sessionSuite) SetUpTest(c *C) { |
156 | + s.testlog = helpers.NewTestLogger(c, "debug") |
157 | +} |
158 | |
159 | var _ = Suite(&sessionSuite{}) |
160 | |
161 | @@ -216,7 +220,7 @@ |
162 | } |
163 | |
164 | func (s *sessionSuite) TestSessionLoop(c *C) { |
165 | - nopTrack := NewTracker(nopLogger) |
166 | + nopTrack := NewTracker(s.testlog) |
167 | errCh := make(chan error, 1) |
168 | up := make(chan interface{}, 5) |
169 | down := make(chan interface{}, 5) |
170 | @@ -238,7 +242,7 @@ |
171 | } |
172 | |
173 | func (s *sessionSuite) TestSessionLoopWriteError(c *C) { |
174 | - nopTrack := NewTracker(nopLogger) |
175 | + nopTrack := NewTracker(s.testlog) |
176 | errCh := make(chan error, 1) |
177 | up := make(chan interface{}, 5) |
178 | down := make(chan interface{}, 5) |
179 | @@ -255,7 +259,7 @@ |
180 | } |
181 | |
182 | func (s *sessionSuite) TestSessionLoopMismatch(c *C) { |
183 | - nopTrack := NewTracker(nopLogger) |
184 | + nopTrack := NewTracker(s.testlog) |
185 | errCh := make(chan error, 1) |
186 | up := make(chan interface{}, 5) |
187 | down := make(chan interface{}, 5) |
188 | @@ -317,7 +321,7 @@ |
189 | } |
190 | |
191 | func (s *sessionSuite) TestSessionLoopExchange(c *C) { |
192 | - nopTrack := NewTracker(nopLogger) |
193 | + nopTrack := NewTracker(s.testlog) |
194 | errCh := make(chan error, 1) |
195 | up := make(chan interface{}, 5) |
196 | down := make(chan interface{}, 5) |
197 | @@ -341,7 +345,7 @@ |
198 | } |
199 | |
200 | func (s *sessionSuite) TestSessionLoopExchangeSplit(c *C) { |
201 | - nopTrack := NewTracker(nopLogger) |
202 | + nopTrack := NewTracker(s.testlog) |
203 | errCh := make(chan error, 1) |
204 | up := make(chan interface{}, 5) |
205 | down := make(chan interface{}, 5) |
206 | @@ -372,7 +376,7 @@ |
207 | } |
208 | |
209 | func (s *sessionSuite) TestSessionLoopExchangePrepareError(c *C) { |
210 | - nopTrack := NewTracker(nopLogger) |
211 | + nopTrack := NewTracker(s.testlog) |
212 | errCh := make(chan error, 1) |
213 | up := make(chan interface{}, 5) |
214 | down := make(chan interface{}, 5) |
215 | @@ -389,7 +393,7 @@ |
216 | } |
217 | |
218 | func (s *sessionSuite) TestSessionLoopExchangeAckedError(c *C) { |
219 | - nopTrack := NewTracker(nopLogger) |
220 | + nopTrack := NewTracker(s.testlog) |
221 | errCh := make(chan error, 1) |
222 | up := make(chan interface{}, 5) |
223 | down := make(chan interface{}, 5) |
224 | @@ -410,7 +414,7 @@ |
225 | } |
226 | |
227 | func (s *sessionSuite) TestSessionLoopExchangeWriteError(c *C) { |
228 | - nopTrack := NewTracker(nopLogger) |
229 | + nopTrack := NewTracker(s.testlog) |
230 | errCh := make(chan error, 1) |
231 | up := make(chan interface{}, 5) |
232 | down := make(chan interface{}, 5) |
233 | @@ -438,7 +442,7 @@ |
234 | } |
235 | |
236 | func (s *sessionSuite) TestSessionLoopExchangeNextPing(c *C) { |
237 | - track := &testTracker{NewTracker(nopLogger), make(chan interface{}, 1)} |
238 | + track := &testTracker{NewTracker(s.testlog), make(chan interface{}, 1)} |
239 | errCh := make(chan error, 1) |
240 | up := make(chan interface{}, 5) |
241 | down := make(chan interface{}, 5) |
242 | @@ -458,8 +462,9 @@ |
243 | c.Check(takeNext(down), Equals, "deadline 5ms") |
244 | c.Check(takeNext(down), DeepEquals, protocol.PingPongMsg{Type: "ping"}) |
245 | effectiveOfPing := float64(interval) / float64(10*time.Millisecond) |
246 | - c.Check(effectiveOfPing > 0.95, Equals, true) |
247 | - c.Check(effectiveOfPing < 1.15, Equals, true) |
248 | + comment := Commentf("effectiveOfPing=%f", effectiveOfPing) |
249 | + c.Check(effectiveOfPing > 0.95, Equals, true, comment) |
250 | + c.Check(effectiveOfPing < 1.15, Equals, true, comment) |
251 | up <- nil // no write error |
252 | up <- io.EOF |
253 | err := <-errCh |
254 | @@ -507,11 +512,8 @@ |
255 | exchangeTimeout: 10 * time.Millisecond, |
256 | } |
257 | |
258 | -var nopLogger = logger.NewSimpleLogger(ioutil.Discard, "error") |
259 | - |
260 | func (s *sessionSuite) TestSessionWire(c *C) { |
261 | - buf := &bytes.Buffer{} |
262 | - track := NewTracker(logger.NewSimpleLogger(buf, "debug")) |
263 | + track := NewTracker(s.testlog) |
264 | errCh := make(chan error, 1) |
265 | srv, cli, lst := serverClientWire() |
266 | defer lst.Close() |
267 | @@ -543,11 +545,11 @@ |
268 | c.Check(err, Equals, io.EOF) |
269 | c.Check(takeNext(brkr.registration), Equals, "unregister DEV") |
270 | // tracking |
271 | - c.Check(buf.String(), Matches, `.*connected.*\n.*registered DEV.*\n.*ended with: EOF\n`) |
272 | + c.Check(s.testlog.Captured(), Matches, `.*connected.*\n.*registered DEV.*\n.*ended with: EOF\n`) |
273 | } |
274 | |
275 | func (s *sessionSuite) TestSessionWireTimeout(c *C) { |
276 | - nopTrack := NewTracker(nopLogger) |
277 | + nopTrack := NewTracker(s.testlog) |
278 | errCh := make(chan error, 1) |
279 | srv, cli, lst := serverClientWire() |
280 | defer lst.Close() |
281 | @@ -563,8 +565,7 @@ |
282 | } |
283 | |
284 | func (s *sessionSuite) TestSessionWireWrongVersion(c *C) { |
285 | - buf := &bytes.Buffer{} |
286 | - track := NewTracker(logger.NewSimpleLogger(buf, "debug")) |
287 | + track := NewTracker(s.testlog) |
288 | errCh := make(chan error, 1) |
289 | srv, cli, lst := serverClientWire() |
290 | defer lst.Close() |
291 | @@ -577,13 +578,12 @@ |
292 | c.Check(err, DeepEquals, &broker.ErrAbort{"unexpected wire format version"}) |
293 | cli.Close() |
294 | // tracking |
295 | - c.Check(buf.String(), Matches, `.*connected.*\n.*ended with: session aborted \(unexpected.*version\)\n`) |
296 | + c.Check(s.testlog.Captured(), Matches, `.*connected.*\n.*ended with: session aborted \(unexpected.*version\)\n`) |
297 | |
298 | } |
299 | |
300 | func (s *sessionSuite) TestSessionWireEarlyClose(c *C) { |
301 | - buf := &bytes.Buffer{} |
302 | - track := NewTracker(logger.NewSimpleLogger(buf, "debug")) |
303 | + track := NewTracker(s.testlog) |
304 | errCh := make(chan error, 1) |
305 | srv, cli, lst := serverClientWire() |
306 | defer lst.Close() |
307 | @@ -595,13 +595,12 @@ |
308 | err := <-errCh |
309 | c.Check(err, Equals, io.EOF) |
310 | // tracking |
311 | - c.Check(buf.String(), Matches, `.*connected.*\n.*ended with: EOF\n`) |
312 | + c.Check(s.testlog.Captured(), Matches, `.*connected.*\n.*ended with: EOF\n`) |
313 | |
314 | } |
315 | |
316 | func (s *sessionSuite) TestSessionWireEarlyClose2(c *C) { |
317 | - buf := &bytes.Buffer{} |
318 | - track := NewTracker(logger.NewSimpleLogger(buf, "debug")) |
319 | + track := NewTracker(s.testlog) |
320 | errCh := make(chan error, 1) |
321 | srv, cli, lst := serverClientWire() |
322 | defer lst.Close() |
323 | @@ -615,11 +614,11 @@ |
324 | err := <-errCh |
325 | c.Check(err, Equals, io.EOF) |
326 | // tracking |
327 | - c.Check(buf.String(), Matches, `.*connected.*\n.*ended with: EOF\n`) |
328 | + c.Check(s.testlog.Captured(), Matches, `.*connected.*\n.*ended with: EOF\n`) |
329 | } |
330 | |
331 | func (s *sessionSuite) TestSessionWireTimeout2(c *C) { |
332 | - nopTrack := NewTracker(nopLogger) |
333 | + nopTrack := NewTracker(s.testlog) |
334 | errCh := make(chan error, 1) |
335 | srv, cli, lst := serverClientWire() |
336 | defer lst.Close() |
337 | |
338 | === modified file 'server/session/tracker_test.go' |
339 | --- server/session/tracker_test.go 2014-01-30 12:56:08 +0000 |
340 | +++ server/session/tracker_test.go 2014-02-04 22:50:59 +0000 |
341 | @@ -17,16 +17,21 @@ |
342 | package session |
343 | |
344 | import ( |
345 | - "bytes" |
346 | "fmt" |
347 | . "launchpad.net/gocheck" |
348 | - "launchpad.net/ubuntu-push/logger" |
349 | "launchpad.net/ubuntu-push/server/broker" |
350 | "launchpad.net/ubuntu-push/server/broker/testing" |
351 | + helpers "launchpad.net/ubuntu-push/testing" |
352 | "net" |
353 | ) |
354 | |
355 | -type trackerSuite struct{} |
356 | +type trackerSuite struct { |
357 | + testlog *helpers.TestLogger |
358 | +} |
359 | + |
360 | +func (s *trackerSuite) SetUpTest(c *C) { |
361 | + s.testlog = helpers.NewTestLogger(c, "debug") |
362 | +} |
363 | |
364 | var _ = Suite(&trackerSuite{}) |
365 | |
366 | @@ -37,31 +42,25 @@ |
367 | } |
368 | |
369 | func (s *trackerSuite) TestSessionTrackStart(c *C) { |
370 | - buf := &bytes.Buffer{} |
371 | - logger := logger.NewSimpleLogger(buf, "debug") |
372 | - track := NewTracker(logger) |
373 | + track := NewTracker(s.testlog) |
374 | track.Start(&testRemoteAddrable{}) |
375 | c.Check(track.(*tracker).sessionId, Not(Equals), 0) |
376 | - regExpected := fmt.Sprintf(`.* DEBUG session\(%x\) connected 127\.0\.0\.1:9999\n`, track.(*tracker).sessionId) |
377 | - c.Check(buf.String(), Matches, regExpected) |
378 | + regExpected := fmt.Sprintf(`DEBUG session\(%x\) connected 127\.0\.0\.1:9999\n`, track.(*tracker).sessionId) |
379 | + c.Check(s.testlog.Captured(), Matches, regExpected) |
380 | } |
381 | |
382 | func (s *trackerSuite) TestSessionTrackRegistered(c *C) { |
383 | - buf := &bytes.Buffer{} |
384 | - logger := logger.NewSimpleLogger(buf, "debug") |
385 | - track := NewTracker(logger) |
386 | + track := NewTracker(s.testlog) |
387 | track.Start(&testRemoteAddrable{}) |
388 | track.Registered(&testing.TestBrokerSession{DeviceId: "DEV-ID"}) |
389 | - regExpected := fmt.Sprintf(`.*connected.*\n.* INFO session\(%x\) registered DEV-ID\n`, track.(*tracker).sessionId) |
390 | - c.Check(buf.String(), Matches, regExpected) |
391 | + regExpected := fmt.Sprintf(`.*connected.*\nINFO session\(%x\) registered DEV-ID\n`, track.(*tracker).sessionId) |
392 | + c.Check(s.testlog.Captured(), Matches, regExpected) |
393 | } |
394 | |
395 | func (s *trackerSuite) TestSessionTrackEnd(c *C) { |
396 | - buf := &bytes.Buffer{} |
397 | - logger := logger.NewSimpleLogger(buf, "debug") |
398 | - track := NewTracker(logger) |
399 | + track := NewTracker(s.testlog) |
400 | track.Start(&testRemoteAddrable{}) |
401 | track.End(&broker.ErrAbort{}) |
402 | - regExpected := fmt.Sprintf(`.*connected.*\n.* DEBUG session\(%x\) ended with: session aborted \(\)\n`, track.(*tracker).sessionId) |
403 | - c.Check(buf.String(), Matches, regExpected) |
404 | + regExpected := fmt.Sprintf(`.*connected.*\nDEBUG session\(%x\) ended with: session aborted \(\)\n`, track.(*tracker).sessionId) |
405 | + c.Check(s.testlog.Captured(), Matches, regExpected) |
406 | } |
407 | |
408 | === modified file 'testing/helpers.go' |
409 | --- testing/helpers.go 2014-02-04 21:35:11 +0000 |
410 | +++ testing/helpers.go 2014-02-04 22:50:59 +0000 |
411 | @@ -29,7 +29,7 @@ |
412 | outputFunc func(int, string) error |
413 | lock sync.Mutex |
414 | logEvents []string |
415 | - written *chan bool |
416 | + logEventCb func(string) |
417 | } |
418 | |
419 | func (h *captureHelper) Output(calldepth int, s string) error { |
420 | @@ -37,8 +37,8 @@ |
421 | if err == nil { |
422 | h.lock.Lock() |
423 | defer h.lock.Unlock() |
424 | - if *h.written != nil { |
425 | - *h.written <- true |
426 | + if h.logEventCb != nil { |
427 | + h.logEventCb(s) |
428 | } |
429 | h.logEvents = append(h.logEvents, s+"\n") |
430 | } |
431 | @@ -57,12 +57,17 @@ |
432 | h.logEvents = nil |
433 | } |
434 | |
435 | +func (h *captureHelper) setLogEventCb(cb func(string)) { |
436 | + h.lock.Lock() |
437 | + defer h.lock.Unlock() |
438 | + h.logEventCb = cb |
439 | +} |
440 | + |
441 | // TestLogger implements logger.Logger using gocheck.C and supporting |
442 | // capturing log strings. |
443 | type TestLogger struct { |
444 | logger.Logger |
445 | - helper *captureHelper |
446 | - Written chan bool |
447 | + helper *captureHelper |
448 | } |
449 | |
450 | // NewTestLogger can be used in tests instead of NewSimpleLogger(FromMinimalLogger). |
451 | @@ -74,7 +79,6 @@ |
452 | Logger: logger.NewSimpleLoggerFromMinimalLogger(h, level), |
453 | helper: h, |
454 | } |
455 | - h.written = &log.Written |
456 | return log |
457 | } |
458 | |
459 | @@ -88,6 +92,11 @@ |
460 | tlog.helper.reset() |
461 | } |
462 | |
463 | +// SetLogEventCb sets a callback invoked for log events. |
464 | +func (tlog *TestLogger) SetLogEventCb(cb func(string)) { |
465 | + tlog.helper.setLogEventCb(cb) |
466 | +} |
467 | + |
468 | // SourceRelative produces a path relative to the source code, makes |
469 | // sense only for tests when the code is available on disk. |
470 | func SourceRelative(relativePath string) string { |