Merge lp:~pedronis/ubuntu-push/testlog-more into lp:ubuntu-push

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
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 {

Subscribers

People subscribed via source and target branches