bsc/log/async_file_writer_test.go

91 lines
2.0 KiB
Go

package log
import (
"os"
"strconv"
"strings"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestWriterHourly(t *testing.T) {
w := NewAsyncFileWriter("./hello.log", 100, 1, 1)
w.Start()
w.Write([]byte("hello\n"))
w.Write([]byte("world\n"))
w.Stop()
files, _ := os.ReadDir("./")
for _, f := range files {
fn := f.Name()
if strings.HasPrefix(fn, "hello") {
t.Log(fn)
content, _ := os.ReadFile(fn)
t.Log(content)
os.Remove(fn)
}
}
}
func TestGetNextRotationHour(t *testing.T) {
tcs := []struct {
now time.Time
delta uint
expectedHour int
}{
{
now: time.Date(1980, 1, 6, 15, 34, 0, 0, time.UTC),
delta: 3,
expectedHour: 18,
},
{
now: time.Date(1980, 1, 6, 23, 59, 0, 0, time.UTC),
delta: 1,
expectedHour: 0,
},
{
now: time.Date(1980, 1, 6, 22, 15, 0, 0, time.UTC),
delta: 2,
expectedHour: 0,
},
{
now: time.Date(1980, 1, 6, 0, 0, 0, 0, time.UTC),
delta: 1,
expectedHour: 1,
},
}
test := func(now time.Time, delta uint, expectedHour int) func(*testing.T) {
return func(t *testing.T) {
got := getNextRotationHour(now, delta)
if got != expectedHour {
t.Fatalf("Expected %d, found: %d\n", expectedHour, got)
}
}
}
for i, tc := range tcs {
t.Run("TestGetNextRotationHour_"+strconv.Itoa(i), test(tc.now, tc.delta, tc.expectedHour))
}
}
func TestClearBackups(t *testing.T) {
dir := "./test"
os.Mkdir(dir, 0700)
w := NewAsyncFileWriter("./test/bsc.log", 100, 1, 1)
defer os.RemoveAll(dir)
fakeCurrentTime := time.Now()
name := ""
data := []byte("data")
for i := 0; i < 5; i++ {
name = w.filePath + "." + fakeCurrentTime.Format(backupTimeFormat)
_ = os.WriteFile(name, data, 0700)
fakeCurrentTime = fakeCurrentTime.Add(-time.Hour * 1)
}
oldFile := w.getExpiredFile(w.filePath, w.maxBackups, w.rotateHours)
w.removeExpiredFile()
_, err := os.Stat(oldFile)
assert.True(t, os.IsNotExist(err))
}