66 "encoding/json"
77 "net/http"
88 "os"
9+ "path/filepath"
910 "strings"
1011 "testing"
1112 "time"
@@ -23,6 +24,57 @@ func (c *stubHomeRequestLogClient) RPushRequestLog(_ context.Context, payload []
2324 return nil
2425}
2526
27+ func assertFileBodySourceCleaned (t * testing.T , partPaths []string ) {
28+ t .Helper ()
29+
30+ dirs := make (map [string ]struct {}, len (partPaths ))
31+ for _ , path := range partPaths {
32+ if _ , errStat := os .Stat (path ); ! os .IsNotExist (errStat ) {
33+ t .Fatalf ("expected part %s to be removed, stat err=%v" , path , errStat )
34+ }
35+ dirs [filepath .Dir (path )] = struct {}{}
36+ }
37+ for dir := range dirs {
38+ if _ , errStat := os .Stat (dir ); ! os .IsNotExist (errStat ) {
39+ t .Fatalf ("expected part dir %s to be removed, stat err=%v" , dir , errStat )
40+ }
41+ }
42+ }
43+
44+ func TestFileBodySource_RecreatesPartDirAfterManualCleanup (t * testing.T ) {
45+ logsDir := t .TempDir ()
46+ source , errSource := NewFileBodySourceInDir (logsDir , "websocket-timeline-test" )
47+ if errSource != nil {
48+ t .Fatalf ("NewFileBodySourceInDir: %v" , errSource )
49+ }
50+ if errAppend := source .AppendPart ([]byte ("before manual cleanup" )); errAppend != nil {
51+ t .Fatalf ("AppendPart before cleanup: %v" , errAppend )
52+ }
53+ if errRemove := os .RemoveAll (logsDir ); errRemove != nil {
54+ t .Fatalf ("RemoveAll logs dir: %v" , errRemove )
55+ }
56+ if errAppend := source .AppendPart ([]byte ("after manual cleanup" )); errAppend != nil {
57+ t .Fatalf ("AppendPart after cleanup: %v" , errAppend )
58+ }
59+
60+ raw , errBytes := source .Bytes ()
61+ if errBytes != nil {
62+ t .Fatalf ("Bytes after cleanup: %v" , errBytes )
63+ }
64+ if bytes .Contains (raw , []byte ("before manual cleanup" )) {
65+ t .Fatalf ("expected manually removed part to be skipped, got %q" , string (raw ))
66+ }
67+ if ! bytes .Contains (raw , []byte ("after manual cleanup" )) {
68+ t .Fatalf ("expected recreated part content, got %q" , string (raw ))
69+ }
70+
71+ partPaths := source .Paths ()
72+ if errCleanup := source .Cleanup (); errCleanup != nil {
73+ t .Fatalf ("Cleanup: %v" , errCleanup )
74+ }
75+ assertFileBodySourceCleaned (t , partPaths )
76+ }
77+
2678func TestFileRequestLogger_HomeEnabled_ForwardsWhenRequestLogEnabled (t * testing.T ) {
2779 original := currentHomeRequestLogClient
2880 defer func () {
@@ -143,11 +195,7 @@ func TestFileRequestLogger_LogRequestWithSourcesWritesLocalLogAndCleansParts(t *
143195 t .Fatalf ("LogRequestWithOptionsAndSources error: %v" , errLog )
144196 }
145197
146- for _ , path := range partPaths {
147- if _ , errStat := os .Stat (path ); ! os .IsNotExist (errStat ) {
148- t .Fatalf ("expected part %s to be removed, stat err=%v" , path , errStat )
149- }
150- }
198+ assertFileBodySourceCleaned (t , partPaths )
151199
152200 entries , errRead := os .ReadDir (logsDir )
153201 if errRead != nil {
@@ -245,11 +293,7 @@ func TestFileRequestLogger_HomeEnabled_ForwardsSourceLogAndCleansParts(t *testin
245293 if ! strings .Contains (got .RequestLog , "Event: websocket.request" ) {
246294 t .Fatalf ("forwarded request_log missing websocket request: %s" , got .RequestLog )
247295 }
248- for _ , path := range partPaths {
249- if _ , errStat := os .Stat (path ); ! os .IsNotExist (errStat ) {
250- t .Fatalf ("expected part %s to be removed, stat err=%v" , path , errStat )
251- }
252- }
296+ assertFileBodySourceCleaned (t , partPaths )
253297}
254298
255299func TestFileRequestLogger_HomeEnabled_ForwardsStreamingRequestID (t * testing.T ) {
0 commit comments