tailfile_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package tailfile
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "testing"
  6. )
  7. func TestTailFile(t *testing.T) {
  8. f, err := ioutil.TempFile("", "tail-test")
  9. if err != nil {
  10. t.Fatal(err)
  11. }
  12. defer f.Close()
  13. defer os.RemoveAll(f.Name())
  14. testFile := []byte(`first line
  15. second line
  16. third line
  17. fourth line
  18. fifth line
  19. next first line
  20. next second line
  21. next third line
  22. next fourth line
  23. next fifth line
  24. last first line
  25. next first line
  26. next second line
  27. next third line
  28. next fourth line
  29. next fifth line
  30. next first line
  31. next second line
  32. next third line
  33. next fourth line
  34. next fifth line
  35. last second line
  36. last third line
  37. last fourth line
  38. last fifth line
  39. truncated line`)
  40. if _, err := f.Write(testFile); err != nil {
  41. t.Fatal(err)
  42. }
  43. if _, err := f.Seek(0, os.SEEK_SET); err != nil {
  44. t.Fatal(err)
  45. }
  46. expected := []string{"last fourth line", "last fifth line"}
  47. res, err := TailFile(f, 2)
  48. if err != nil {
  49. t.Fatal(err)
  50. }
  51. for i, l := range res {
  52. t.Logf("%s", l)
  53. if expected[i] != string(l) {
  54. t.Fatalf("Expected line %s, got %s", expected[i], l)
  55. }
  56. }
  57. }
  58. func TestTailFileManyLines(t *testing.T) {
  59. f, err := ioutil.TempFile("", "tail-test")
  60. if err != nil {
  61. t.Fatal(err)
  62. }
  63. defer f.Close()
  64. defer os.RemoveAll(f.Name())
  65. testFile := []byte(`first line
  66. second line
  67. truncated line`)
  68. if _, err := f.Write(testFile); err != nil {
  69. t.Fatal(err)
  70. }
  71. if _, err := f.Seek(0, os.SEEK_SET); err != nil {
  72. t.Fatal(err)
  73. }
  74. expected := []string{"first line", "second line"}
  75. res, err := TailFile(f, 10000)
  76. if err != nil {
  77. t.Fatal(err)
  78. }
  79. for i, l := range res {
  80. t.Logf("%s", l)
  81. if expected[i] != string(l) {
  82. t.Fatalf("Expected line %s, got %s", expected[i], l)
  83. }
  84. }
  85. }
  86. func TestTailEmptyFile(t *testing.T) {
  87. f, err := ioutil.TempFile("", "tail-test")
  88. if err != nil {
  89. t.Fatal(err)
  90. }
  91. defer f.Close()
  92. defer os.RemoveAll(f.Name())
  93. res, err := TailFile(f, 10000)
  94. if err != nil {
  95. t.Fatal(err)
  96. }
  97. if len(res) != 0 {
  98. t.Fatal("Must be empty slice from empty file")
  99. }
  100. }
  101. func TestTailNegativeN(t *testing.T) {
  102. f, err := ioutil.TempFile("", "tail-test")
  103. if err != nil {
  104. t.Fatal(err)
  105. }
  106. defer f.Close()
  107. defer os.RemoveAll(f.Name())
  108. testFile := []byte(`first line
  109. second line
  110. truncated line`)
  111. if _, err := f.Write(testFile); err != nil {
  112. t.Fatal(err)
  113. }
  114. if _, err := f.Seek(0, os.SEEK_SET); err != nil {
  115. t.Fatal(err)
  116. }
  117. if _, err := TailFile(f, -1); err != ErrNonPositiveLinesNumber {
  118. t.Fatalf("Expected ErrNonPositiveLinesNumber, got %s", err)
  119. }
  120. if _, err := TailFile(f, 0); err != ErrNonPositiveLinesNumber {
  121. t.Fatalf("Expected ErrNonPositiveLinesNumber, got %s", err)
  122. }
  123. }
  124. func BenchmarkTail(b *testing.B) {
  125. f, err := ioutil.TempFile("", "tail-test")
  126. if err != nil {
  127. b.Fatal(err)
  128. }
  129. defer f.Close()
  130. defer os.RemoveAll(f.Name())
  131. for i := 0; i < 10000; i++ {
  132. if _, err := f.Write([]byte("tailfile pretty interesting line\n")); err != nil {
  133. b.Fatal(err)
  134. }
  135. }
  136. b.ResetTimer()
  137. for i := 0; i < b.N; i++ {
  138. if _, err := TailFile(f, 1000); err != nil {
  139. b.Fatal(err)
  140. }
  141. }
  142. }