RedFlag/agent/internal/event/history_test.go
Fimeg 67e26be2d9 projection: begin the exact-path public epoch
The public tree and its history contain only the listed paths. Earlier projection history remains preserved internally.

Source-Sha: 913fde029b935671833254797f0f20f1eb9fabba

Policy-Sha: 913fde029b935671833254797f0f20f1eb9fabba

Tree-Digest: 180ae530c1058a2a5c89837bdce2d323ae83e669e38590ca72e75b8d92b7262f
2026-09-08 21:59:33 -04:00

56 lines
1.7 KiB
Go

package event
import (
"os"
"path/filepath"
"testing"
"github.com/Fimeg/RedFlag/agent/internal/models"
"github.com/gofrs/uuid/v5"
)
func TestLocalHistorySurvivesDeliveryAndRestart(t *testing.T) {
path := filepath.Join(t.TempDir(), "events.json")
buffer := NewBuffer(path)
e := &models.SystemEvent{ID: uuid.Must(uuid.NewV4()), Message: "scan failed", Severity: "error"}
if err := buffer.BufferEvent(e); err != nil {
t.Fatal(err)
}
if err := buffer.Clear(); err != nil {
t.Fatal(err)
}
reopened := NewBuffer(path)
history, err := reopened.ReadHistory()
if err != nil || len(history) != 1 || history[0].ID != e.ID {
t.Fatalf("history=%v error=%v", history, err)
}
if err := reopened.BufferEvent(e); err != nil {
t.Fatal(err)
}
if _, err := reopened.GetBufferedEvents(); err != nil {
t.Fatal(err)
}
history, err = reopened.ReadHistory()
if err != nil || len(history) != 1 {
t.Fatalf("retried event duplicated in history: count=%d error=%v", len(history), err)
}
}
func TestHistoryFailureDoesNotDiscardDeliveryQueue(t *testing.T) {
buffer := NewBuffer(filepath.Join(t.TempDir(), "events.json"))
if err := os.WriteFile(buffer.historyPath(), []byte("damaged history"), 0600); err != nil {
t.Fatal(err)
}
e := &models.SystemEvent{ID: uuid.Must(uuid.NewV4()), Message: "keep this event"}
if err := buffer.BufferEvent(e); err == nil {
t.Fatal("history damage was silent")
}
pending, err := buffer.ReadBufferedEvents()
if err != nil || len(pending) != 1 {
t.Fatalf("delivery queue lost: count=%d error=%v", len(pending), err)
}
data, err := os.ReadFile(buffer.historyPath())
if err != nil || string(data) != "damaged history" {
t.Fatal("damaged history was overwritten")
}
}