@@ -516,6 +516,48 @@ func TestFileStore_DeleteOldEntriesUponSaving(t *testing.T) {
516516 assert .EqualError (t , err , ErrNotFound .Error ())
517517}
518518
519+ func TestFileStoreTmpPath_Save_and_Delete (t * testing.T ) {
520+ // Reset global variable affected by other tests to the original
521+ // value used by the library.
522+ SetNow (time .Now )
523+
524+ tempDir := path .Join (t .TempDir (), "custom" )
525+
526+ // Given a file storer
527+ // filePath includes integrationsDir conetant because the call to TmpPath sets that subFolder.
528+ filePath := path .Join (tempDir , integrationsDir , "test.json" )
529+ ttl := 1 * time .Second
530+
531+ storer , err := NewFileStore (TmpPath (tempDir , "test" ), log .NewStdErr (true ), ttl )
532+
533+ // When a valid storer contains keys with timestamp greater than TTL
534+ storer .Set ("expiredKey" , "val" )
535+ time .Sleep (ttl + time .Second )
536+
537+ storer .Set ("recentKey" , "v" )
538+
539+ assert .NoError (t , storer .Save ())
540+
541+ var val interface {}
542+
543+ _ , err = storer .Get ("recentKey" , & val )
544+ assert .NoError (t , err )
545+
546+ // Expired keys are removed from the storer on saving.
547+ _ , err = storer .Get ("expiredKey" , & val )
548+ assert .EqualError (t , err , ErrNotFound .Error ())
549+
550+ storer , err = NewFileStore (filePath , log .NewStdErr (true ), ttl )
551+ assert .NoError (t , err )
552+
553+ _ , err = storer .Get ("recentKey" , & val )
554+ assert .NoError (t , err )
555+
556+ // Expired keys have been removed from the file.
557+ _ , err = storer .Get ("expiredKey" , & val )
558+ assert .EqualError (t , err , ErrNotFound .Error ())
559+ }
560+
519561var data = []byte (`{"Timestamp":1650971736,"Value":["1","2","3","4"]}` )
520562
521563func Benchmark_UnmashalEntireStruct (b * testing.B ) {
0 commit comments