1package logging
2
3import (
4 "os"
5 "path/filepath"
6 "testing"
7)
8
9func TestSessionFileWriter_DropsWritesAfterClose(t *testing.T) {
10 t.Parallel()
11
12 dir := t.TempDir()
13 path := filepath.Join(dir, "session.log")
14
15 file, err := os.Create(path)
16 if err != nil {
17 t.Fatalf("create temp log file: %v", err)
18 }
19
20 writer := newSessionFileWriter(file)
21
22 n, err := writer.Write([]byte("first\n"))
23 if err != nil {
24 t.Fatalf("write before close: %v", err)
25 }
26 if n != len("first\n") {
27 t.Fatalf("write before close returned %d, want %d", n, len("first\n"))
28 }
29
30 if closeErr := writer.Close(); closeErr != nil {
31 t.Fatalf("close writer: %v", closeErr)
32 }
33
34 n, err = writer.Write([]byte("second\n"))
35 if err != nil {
36 t.Fatalf("write after close: %v", err)
37 }
38 if n != len("second\n") {
39 t.Fatalf("write after close returned %d, want %d", n, len("second\n"))
40 }
41
42 data, err := os.ReadFile(path)
43 if err != nil {
44 t.Fatalf("read log file: %v", err)
45 }
46 if got, want := string(data), "first\n"; got != want {
47 t.Fatalf("log file contents = %q, want %q", got, want)
48 }
49}
50
51func TestSessionFileWriter_IgnoresExternallyClosedFile(t *testing.T) {
52 t.Parallel()
53
54 dir := t.TempDir()
55 path := filepath.Join(dir, "session.log")
56
57 file, err := os.Create(path)
58 if err != nil {
59 t.Fatalf("create temp log file: %v", err)
60 }
61
62 writer := newSessionFileWriter(file)
63 if closeErr := file.Close(); closeErr != nil {
64 t.Fatalf("close underlying file: %v", closeErr)
65 }
66
67 n, err := writer.Write([]byte("late\n"))
68 if err != nil {
69 t.Fatalf("write after external close: %v", err)
70 }
71 if n != len("late\n") {
72 t.Fatalf("write after external close returned %d, want %d", n, len("late\n"))
73 }
74}