96 lines
2.4 KiB
Go
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)
|
|
}
|
|
}
|