76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
|
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestDailyWriterRotatesBySize(t *testing.T) {
|
||
|
|
dir := t.TempDir()
|
||
|
|
w, err := newDailyWriter(dir, "service-test", 30, 64, 1024)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
defer w.Close()
|
||
|
|
|
||
|
|
if _, err = w.Write([]byte(strings.Repeat("a", 48))); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if _, err = w.Write([]byte(strings.Repeat("b", 48))); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
files, err := filepath.Glob(filepath.Join(dir, "service-test-*.log"))
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if len(files) != 2 {
|
||
|
|
t.Fatalf("expected 2 log parts, got %d: %v", len(files), files)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestDailyWriterEnforcesTotalSize(t *testing.T) {
|
||
|
|
dir := t.TempDir()
|
||
|
|
oldPath := filepath.Join(dir, "service-old-2020-01-01.log")
|
||
|
|
if err := os.WriteFile(oldPath, []byte(strings.Repeat("x", 90)), 0o644); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
oldTime := time.Now().AddDate(0, 0, -2)
|
||
|
|
if err := os.Chtimes(oldPath, oldTime, oldTime); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
|
||
|
|
w, err := newDailyWriter(dir, "service-test", 30, 64, 100)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
defer w.Close()
|
||
|
|
if _, err = w.Write([]byte(strings.Repeat("a", 64))); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if _, err = w.Write([]byte(strings.Repeat("b", 64))); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if _, err = os.Stat(oldPath); !os.IsNotExist(err) {
|
||
|
|
t.Fatalf("oldest log should be removed, stat error: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
entries, err := os.ReadDir(dir)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
var total int64
|
||
|
|
for _, entry := range entries {
|
||
|
|
info, infoErr := entry.Info()
|
||
|
|
if infoErr != nil {
|
||
|
|
t.Fatal(infoErr)
|
||
|
|
}
|
||
|
|
total += info.Size()
|
||
|
|
}
|
||
|
|
if total > 128 { // 当前打开分卷允许最多超出一个 64 字节分卷。
|
||
|
|
t.Fatalf("log directory grew unexpectedly: %d bytes", total)
|
||
|
|
}
|
||
|
|
}
|