diff options
Diffstat (limited to 'internal/notify')
| -rw-r--r-- | internal/notify/files.go | 15 | ||||
| -rw-r--r-- | internal/notify/store_test.go | 7 |
2 files changed, 19 insertions, 3 deletions
diff --git a/internal/notify/files.go b/internal/notify/files.go index 22e0ea9..53e7f3f 100644 --- a/internal/notify/files.go +++ b/internal/notify/files.go @@ -54,14 +54,23 @@ func writeJSON(path string, v any) error { if err != nil { return err } + tmpName := tmp.Name() + renamed := false + defer func() { + if !renamed { + os.Remove(tmpName) + } + }() if _, err := tmp.Write(data); err != nil { tmp.Close() - os.Remove(tmp.Name()) return err } if err := tmp.Close(); err != nil { - os.Remove(tmp.Name()) return err } - return os.Rename(tmp.Name(), path) + if err := os.Rename(tmpName, path); err != nil { + return err + } + renamed = true + return nil } diff --git a/internal/notify/store_test.go b/internal/notify/store_test.go index 4e4dd79..1fb8bdc 100644 --- a/internal/notify/store_test.go +++ b/internal/notify/store_test.go @@ -112,6 +112,13 @@ func TestQueueCapEvictsToHistory(t *testing.T) { if len(*emitted) == 0 { t.Fatal("eviction emitted nothing") } + history := s.historySnapshot() + if len(history) != 1 { + t.Fatalf("history length = %d, want 1", len(history)) + } + if !history[0].Closed { + t.Error("evicted entry not marked closed in history") + } } func TestHistoryRingCapsAtTwenty(t *testing.T) { |
