123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- package tailfile
- import (
- "io/ioutil"
- "os"
- "testing"
- )
- func TestTailFile(t *testing.T) {
- f, err := ioutil.TempFile("", "tail-test")
- if err != nil {
- t.Fatal(err)
- }
- defer f.Close()
- defer os.RemoveAll(f.Name())
- testFile := []byte(`first line
- second line
- third line
- fourth line
- fifth line
- next first line
- next second line
- next third line
- next fourth line
- next fifth line
- last first line
- next first line
- next second line
- next third line
- next fourth line
- next fifth line
- next first line
- next second line
- next third line
- next fourth line
- next fifth line
- last second line
- last third line
- last fourth line
- last fifth line
- truncated line`)
- if _, err := f.Write(testFile); err != nil {
- t.Fatal(err)
- }
- if _, err := f.Seek(0, os.SEEK_SET); err != nil {
- t.Fatal(err)
- }
- expected := []string{"last fourth line", "last fifth line"}
- res, err := TailFile(f, 2)
- if err != nil {
- t.Fatal(err)
- }
- for i, l := range res {
- t.Logf("%s", l)
- if expected[i] != string(l) {
- t.Fatalf("Expected line %s, got %s", expected[i], l)
- }
- }
- }
- func TestTailFileManyLines(t *testing.T) {
- f, err := ioutil.TempFile("", "tail-test")
- if err != nil {
- t.Fatal(err)
- }
- defer f.Close()
- defer os.RemoveAll(f.Name())
- testFile := []byte(`first line
- second line
- truncated line`)
- if _, err := f.Write(testFile); err != nil {
- t.Fatal(err)
- }
- if _, err := f.Seek(0, os.SEEK_SET); err != nil {
- t.Fatal(err)
- }
- expected := []string{"first line", "second line"}
- res, err := TailFile(f, 10000)
- if err != nil {
- t.Fatal(err)
- }
- for i, l := range res {
- t.Logf("%s", l)
- if expected[i] != string(l) {
- t.Fatalf("Expected line %s, got %s", expected[i], l)
- }
- }
- }
- func TestTailEmptyFile(t *testing.T) {
- f, err := ioutil.TempFile("", "tail-test")
- if err != nil {
- t.Fatal(err)
- }
- defer f.Close()
- defer os.RemoveAll(f.Name())
- res, err := TailFile(f, 10000)
- if err != nil {
- t.Fatal(err)
- }
- if len(res) != 0 {
- t.Fatal("Must be empty slice from empty file")
- }
- }
- func TestTailNegativeN(t *testing.T) {
- f, err := ioutil.TempFile("", "tail-test")
- if err != nil {
- t.Fatal(err)
- }
- defer f.Close()
- defer os.RemoveAll(f.Name())
- testFile := []byte(`first line
- second line
- truncated line`)
- if _, err := f.Write(testFile); err != nil {
- t.Fatal(err)
- }
- if _, err := f.Seek(0, os.SEEK_SET); err != nil {
- t.Fatal(err)
- }
- if _, err := TailFile(f, -1); err != ErrNonPositiveLinesNumber {
- t.Fatalf("Expected ErrNonPositiveLinesNumber, got %s", err)
- }
- if _, err := TailFile(f, 0); err != ErrNonPositiveLinesNumber {
- t.Fatalf("Expected ErrNonPositiveLinesNumber, got %s", err)
- }
- }
- func BenchmarkTail(b *testing.B) {
- f, err := ioutil.TempFile("", "tail-test")
- if err != nil {
- b.Fatal(err)
- }
- defer f.Close()
- defer os.RemoveAll(f.Name())
- for i := 0; i < 10000; i++ {
- if _, err := f.Write([]byte("tailfile pretty interesting line\n")); err != nil {
- b.Fatal(err)
- }
- }
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- if _, err := TailFile(f, 1000); err != nil {
- b.Fatal(err)
- }
- }
- }
|