Files
Agent-System-Backend/internal/store/durability_test.go
agent-exec-transport 7b379d28e7
governance / governance (pull_request) Successful in 17s
ci / vet-and-test (pull_request) Successful in 1m6s
agent-exec transport d2c63b4a83821a5716997a28174233b1/d6e403e1e778
2026-10-18 09:20:03 +00:00

96 lines
2.4 KiB
Go

package store
import (
"os"
"path/filepath"
"strings"
"testing"
core "agent-system-core"
)
func TestDurabilityRefusal(t *testing.T) {
ok := map[string]string{
"fsync": "on", "full_page_writes": "on", "synchronous_commit": "local",
}
if err := DurabilityRefusal(ok); err != nil {
t.Fatal(err)
}
for _, key := range []string{"fsync", "full_page_writes", "synchronous_commit"} {
bad := map[string]string{
"fsync": "on", "full_page_writes": "on", "synchronous_commit": "on",
}
bad[key] = "off"
if err := DurabilityRefusal(bad); err == nil {
t.Fatalf("%s off should refuse", key)
}
delete(bad, key)
if err := DurabilityRefusal(bad); err == nil {
t.Fatalf("missing %s should refuse", key)
}
}
}
func TestSQLitePragmaReadback(t *testing.T) {
st, err := OpenSQLite(filepath.Join(t.TempDir(), "agent-system.db"))
if err != nil {
t.Fatal(err)
}
defer st.Close()
var journal string
if err := st.db.QueryRow(`PRAGMA journal_mode`).Scan(&journal); err != nil {
t.Fatal(err)
}
var syncLevel int64
if err := st.db.QueryRow(`PRAGMA synchronous`).Scan(&syncLevel); err != nil {
t.Fatal(err)
}
if !strings.EqualFold(journal, "wal") || syncLevel != 2 {
t.Fatalf("journal=%s synchronous=%d", journal, syncLevel)
}
marker, ok, err := st.LoadInstanceGuard()
if err != nil || ok || marker.InstanceID != "" {
t.Fatalf("fresh db has no guard row: ok=%v err=%v", ok, err)
}
}
func TestOpenExistingDoesNotCreateMissingParent(t *testing.T) {
missing := filepath.Join(t.TempDir(), "absent", "agent-system.db")
if _, err := OpenExistingSQLite(missing); err == nil {
t.Fatal("missing file opened")
}
if _, err := os.Stat(filepath.Dir(missing)); !os.IsNotExist(err) {
t.Fatalf("parent created: %v", err)
}
}
func TestRunSurvivesReopen(t *testing.T) {
path := filepath.Join(t.TempDir(), "agent-system.db")
st, err := OpenSQLite(path)
if err != nil {
t.Fatal(err)
}
run := &core.Run{
ID: "run_keep", ConversationID: "c", ProjectID: "p", Owner: "o",
Kind: core.RunConversation, Status: core.RunWaitingHITL,
}
if err := st.CreateRun(run); err != nil {
t.Fatal(err)
}
if err := st.Close(); err != nil {
t.Fatal(err)
}
st, err = OpenSQLite(path)
if err != nil {
t.Fatal(err)
}
defer st.Close()
got, err := st.GetRunByID("run_keep")
if err != nil {
t.Fatal(err)
}
if got.Status != core.RunWaitingHITL {
t.Fatalf("status %s", got.Status)
}
}