@@ -4,13 +4,11 @@ import (
44 "bufio"
55 "bytes"
66 "context"
7- "errors"
87 "fmt"
98 "io"
109 "os"
1110 "path/filepath"
1211 "strings"
13- "sync"
1412 "sync/atomic"
1513 "testing"
1614 "text/tabwriter"
@@ -24,8 +22,9 @@ import (
2422)
2523
2624type testDecoder struct {
27- rdr io.Reader
28- scanner * bufio.Scanner
25+ rdr io.Reader
26+ scanner * bufio.Scanner
27+ resetCount int
2928}
3029
3130func (d * testDecoder ) Decode () (* logger.Message , error ) {
@@ -42,6 +41,7 @@ func (d *testDecoder) Decode() (*logger.Message, error) {
4241func (d * testDecoder ) Reset (rdr io.Reader ) {
4342 d .rdr = rdr
4443 d .scanner = bufio .NewScanner (rdr )
44+ d .resetCount ++
4545}
4646
4747func (d * testDecoder ) Close () {
@@ -246,77 +246,6 @@ func TestFollowLogsProducerGone(t *testing.T) {
246246 }
247247}
248248
249- type lineDecoder struct {
250- r * bufio.Reader
251- resetCount int
252- }
253-
254- func (d * lineDecoder ) Decode () (* logger.Message , error ) {
255- line , err := d .r .ReadString ('\n' )
256- if err != nil {
257- return nil , err
258- }
259- m := logger .NewMessage ()
260- m .Line = []byte (line )
261- return m , nil
262- }
263-
264- func (d * lineDecoder ) Reset (r io.Reader ) {
265- d .r = bufio .NewReader (r )
266- d .resetCount ++
267- }
268-
269- func (d * lineDecoder ) Close () {
270- }
271-
272- func TestFollowLogsHandleDecodeErr (t * testing.T ) {
273- lw := logger .NewLogWatcher ()
274- defer lw .ConsumerGone ()
275-
276- fw , err := os .CreateTemp ("" , t .Name ())
277- assert .NilError (t , err )
278- defer os .Remove (fw .Name ())
279-
280- fr , err := os .Open (fw .Name ())
281- assert .NilError (t , err )
282-
283- dec := & lineDecoder {}
284- dec .Reset (fr )
285-
286- var since , until time.Time
287- rotate := make (chan interface {})
288- evict := make (chan interface {})
289-
290- var wg sync.WaitGroup
291- wg .Add (1 )
292- go func () {
293- defer wg .Done ()
294- followLogs (fr , lw , rotate , evict , dec , since , until )
295- }()
296-
297- sendReceive := func (f io.Writer , message string ) {
298- _ , err = f .Write ([]byte (message ))
299- assert .NilError (t , err )
300- m := <- lw .Msg
301- assert .Equal (t , message , string (m .Line ))
302- }
303-
304- sendReceive (fw , "log1\n " )
305- sendReceive (fw , "log2\n " )
306-
307- ft , err := os .OpenFile (fw .Name (), os .O_WRONLY | os .O_TRUNC , 0600 )
308- assert .NilError (t , err )
309-
310- sendReceive (ft , "log3\n " )
311-
312- evict <- errors .New ("stop followLogs" )
313- wg .Wait ()
314-
315- // followLogs calls Reset() in the beginning,
316- // each 3 writes result Reset(), then handleDecodeErr() calles Reset().
317- assert .Equal (t , 5 , dec .resetCount )
318- }
319-
320249func TestCheckCapacityAndRotate (t * testing.T ) {
321250 dir , err := os .MkdirTemp ("" , t .Name ())
322251 assert .NilError (t , err )
0 commit comments