Files
backrest/internal/rotatinglog/rotatinglog_test.go
2024-02-04 03:36:53 -08:00

99 lines
2.2 KiB
Go

package rotatinglog
import (
"fmt"
"strings"
"testing"
"time"
)
func TestRotatingLog(t *testing.T) {
log := NewRotatingLog(t.TempDir()+"/rotatinglog", 10)
name, err := log.Write([]byte("test"))
if err != nil {
t.Fatalf("Write failed: %v", err)
}
data, err := log.Read(name)
if err != nil {
t.Fatalf("Read failed: %v", err)
}
if string(data) != "test" {
t.Fatalf("Read failed: expected test, got %s", string(data))
}
}
func TestRotatingLogMultipleEntries(t *testing.T) {
log := NewRotatingLog(t.TempDir()+"/rotatinglog", 10)
refs := make([]string, 10)
for i := 0; i < 10; i++ {
name, err := log.Write([]byte(fmt.Sprintf("%d", i)))
if err != nil {
t.Fatalf("Write failed: %v", err)
}
data, err := log.Read(name)
if err != nil {
t.Fatalf("Read failed: %v", err)
}
if fmt.Sprintf("%d", i) != string(data) {
t.Fatalf("Read failed: expected %d, got %s", i, string(data))
}
refs[i] = name
}
for i := 0; i < 10; i++ {
data, err := log.Read(refs[i])
if err != nil {
t.Fatalf("Read failed: %v", err)
}
if fmt.Sprintf("%d", i) != string(data) {
t.Fatalf("Read failed: expected %d, got %s", i, string(data))
}
}
}
func TestBigEntries(t *testing.T) {
log := NewRotatingLog(t.TempDir()+"/rotatinglog", 10)
for size := range []int{10, 100, 1234, 5938, 1023, 1025} {
data := genstr(size)
name, err := log.Write([]byte(data))
if err != nil {
t.Fatalf("Write failed: %v", err)
}
read, err := log.Read(name)
if err != nil {
t.Fatalf("Read failed: %v", err)
}
if string(read) != data {
t.Fatalf("Read failed: expected %s, got %s", data, string(read))
}
}
}
func TestLogRotate(t *testing.T) {
curTime := time.Unix(0, 0)
curTime = curTime.Add(time.Hour * 24)
log := NewRotatingLog(t.TempDir()+"/rotatinglog", 3)
log.now = func() time.Time { return curTime }
for i := 0; i < 10; i++ {
_, err := log.Write([]byte(fmt.Sprintf("%d", i)))
if err != nil {
t.Fatalf("Write failed: %v", err)
}
curTime = curTime.Add(time.Hour * 24)
}
files, err := log.files()
if err != nil {
t.Fatalf("files failed: %v", err)
}
if len(files) != 3 {
t.Fatalf("files failed: expected 3, got %d", len(files))
}
}
func genstr(size int) string {
return strings.Repeat("a", size)
}