-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathlogging_test.go
More file actions
97 lines (83 loc) · 2.74 KB
/
logging_test.go
File metadata and controls
97 lines (83 loc) · 2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package main
import (
"bytes"
"os"
"path/filepath"
"testing"
"time"
)
func TestCalendarRotatingWriterRotatesByDateAndRemovesExpiredLogs(t *testing.T) {
dir := t.TempDir()
now := time.Date(2026, 5, 21, 10, 0, 0, 0, time.Local)
writeTestFile(t, filepath.Join(dir, "uddns-2026-05-19.log"), "old\n")
writeTestFile(t, filepath.Join(dir, "uddns-2026-05-20.log"), "keep\n")
writeTestFile(t, filepath.Join(dir, "other-2026-05-19.log"), "ignore\n")
writer, err := newCalendarRotatingWriterWithClock(dir, logFilePrefix, 2, func() time.Time {
return now
})
if err != nil {
t.Fatalf("newCalendarRotatingWriterWithClock returned error: %v", err)
}
defer writer.Close()
if _, err := writer.Write([]byte("today\n")); err != nil {
t.Fatalf("write current log: %v", err)
}
assertMissing(t, filepath.Join(dir, "uddns-2026-05-19.log"))
assertExists(t, filepath.Join(dir, "uddns-2026-05-20.log"))
assertExists(t, filepath.Join(dir, "uddns-2026-05-21.log"))
assertExists(t, filepath.Join(dir, "other-2026-05-19.log"))
now = time.Date(2026, 5, 22, 1, 0, 0, 0, time.Local)
if _, err := writer.Write([]byte("tomorrow\n")); err != nil {
t.Fatalf("write rotated log: %v", err)
}
assertMissing(t, filepath.Join(dir, "uddns-2026-05-20.log"))
assertExists(t, filepath.Join(dir, "uddns-2026-05-21.log"))
assertExists(t, filepath.Join(dir, "uddns-2026-05-22.log"))
content, err := os.ReadFile(filepath.Join(dir, "uddns-2026-05-22.log"))
if err != nil {
t.Fatalf("read rotated log: %v", err)
}
if !bytes.Contains(content, []byte("tomorrow\n")) {
t.Fatalf("expected rotated log to contain written content, got %q", string(content))
}
}
func TestParseRotatedLogDate(t *testing.T) {
date, ok := parseRotatedLogDate("uddns-2026-05-21.log", logFilePrefix)
if !ok {
t.Fatal("expected valid rotated log name")
}
if date.Format(logDateLayout) != "2026-05-21" {
t.Fatalf("expected date 2026-05-21, got %s", date.Format(logDateLayout))
}
invalidNames := []string{
"uddns.log",
"uddns-2026-05-21.txt",
"other-2026-05-21.log",
"uddns-not-a-date.log",
}
for _, name := range invalidNames {
t.Run(name, func(t *testing.T) {
if _, ok := parseRotatedLogDate(name, logFilePrefix); ok {
t.Fatalf("expected %q to be ignored", name)
}
})
}
}
func writeTestFile(t *testing.T, path, content string) {
t.Helper()
if err := os.WriteFile(path, []byte(content), 0644); err != nil {
t.Fatalf("write test file %s: %v", path, err)
}
}
func assertExists(t *testing.T, path string) {
t.Helper()
if _, err := os.Stat(path); err != nil {
t.Fatalf("expected %s to exist: %v", path, err)
}
}
func assertMissing(t *testing.T, path string) {
t.Helper()
if _, err := os.Stat(path); !os.IsNotExist(err) {
t.Fatalf("expected %s to be missing, stat err=%v", path, err)
}
}