tail_reader_test.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package logs
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "testing"
  6. "time"
  7. "github.com/coroot/logparser"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. func TestTailReader(t *testing.T) {
  11. f, err := ioutil.TempFile("/tmp", "log")
  12. assert.NoError(t, err)
  13. defer os.Remove(f.Name())
  14. tailPollInterval = time.Millisecond * 100
  15. ch := make(chan logparser.LogEntry, 10)
  16. tr, err := NewTailReader(f.Name(), ch)
  17. assert.NoError(t, err)
  18. defer tr.Stop()
  19. write := func(s string) {
  20. _, err = f.WriteString(s)
  21. assert.NoError(t, err)
  22. }
  23. wait := func() {
  24. time.Sleep(time.Second)
  25. }
  26. get := func(expected string) {
  27. entry := <-ch
  28. assert.Equal(t, expected, entry.Content)
  29. }
  30. write("foo 1\n")
  31. get("foo 1")
  32. // append
  33. write("bar 1\nbuz 1\n")
  34. get("bar 1")
  35. get("buz 1")
  36. // no end of line
  37. write("foo 2\nba")
  38. wait()
  39. write("r 2\n")
  40. get("foo 2")
  41. get("bar 2")
  42. // move
  43. err = os.Rename(f.Name(), f.Name()+".1")
  44. assert.NoError(t, err)
  45. defer os.Remove(f.Name() + ".1")
  46. f, err = os.Create(f.Name())
  47. assert.NoError(t, err)
  48. write("foo 3\nbar 3\n")
  49. get("foo 3")
  50. get("bar 3")
  51. // truncate
  52. f, err = os.OpenFile(f.Name(), os.O_WRONLY|os.O_TRUNC, 0)
  53. assert.NoError(t, err)
  54. write("foo 4\n")
  55. get("foo 4")
  56. // delete
  57. err = os.Remove(f.Name())
  58. assert.NoError(t, err)
  59. wait()
  60. f, err = os.Create(f.Name())
  61. assert.NoError(t, err)
  62. write("foo 5\n")
  63. get("foo 5")
  64. }