109 lines
3.2 KiB
Go
109 lines
3.2 KiB
Go
|
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"math"
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestIntentProvenance(t *testing.T) {
|
||
|
|
for _, status := range []goalStatus{active, paused, "complete", "budgetLimited", "usageLimited", blocked} {
|
||
|
|
got, ok, err := parseIntent(intentLine(status))
|
||
|
|
if err != nil || !ok || got != status {
|
||
|
|
t.Fatalf("status=%s got=%s match=%v error=%v", status, got, ok, err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
line := string(intentLine(active))
|
||
|
|
for _, text := range []string{
|
||
|
|
strings.Replace(line, "user.goal", "user.input", 1),
|
||
|
|
strings.Replace(line, "\"role\":\"user\"", "\"role\":\"assistant\"", 1),
|
||
|
|
strings.Replace(line, "input_text", "output_text", 1),
|
||
|
|
} {
|
||
|
|
if _, ok, err := parseIntent([]byte(text)); err != nil || ok {
|
||
|
|
t.Fatalf("accepted untrusted instruction: match=%v error=%v", ok, err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestIntentTail(t *testing.T) {
|
||
|
|
path := filepath.Join(t.TempDir(), "rollout.jsonl")
|
||
|
|
if err := os.WriteFile(path, intentLine(active), 0600); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
log, err := openIntent(path)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if status, err := log.read(math.MaxInt64); err != nil || status != "" {
|
||
|
|
t.Fatal("replayed historical authorization")
|
||
|
|
}
|
||
|
|
data := intentLine(paused)
|
||
|
|
appendIntent(t, path, data[:len(data)/2])
|
||
|
|
if status, err := log.read(math.MaxInt64); err != nil || status != "" {
|
||
|
|
t.Fatal("accepted partial record")
|
||
|
|
}
|
||
|
|
appendIntent(t, path, data[len(data)/2:])
|
||
|
|
if status, err := log.read(math.MaxInt64); err != nil || status != paused {
|
||
|
|
t.Fatalf("partial completion: %s %v", status, err)
|
||
|
|
}
|
||
|
|
appendIntent(t, path, intentLine(active))
|
||
|
|
if err := log.seal(); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if status, err := log.read(math.MaxInt64); err != nil || status != "" {
|
||
|
|
t.Fatal("replayed pre-cancellation authorization")
|
||
|
|
}
|
||
|
|
appendIntent(t, path, intentLine(active))
|
||
|
|
if status, err := log.read(math.MaxInt64); err != nil || status != active {
|
||
|
|
t.Fatalf("new authorization: %s %v", status, err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestIntentFence(t *testing.T) {
|
||
|
|
path := filepath.Join(t.TempDir(), "rollout.jsonl")
|
||
|
|
if err := os.WriteFile(path, nil, 0600); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
log, err := openIntent(path)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
data := intentLine(active)
|
||
|
|
appendIntent(t, path, data[:len(data)/2])
|
||
|
|
if err := log.seal(); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
appendIntent(t, path, data[len(data)/2:])
|
||
|
|
if status, err := log.read(math.MaxInt64); err != nil || status != "" {
|
||
|
|
t.Fatalf("replayed instruction spanning cancellation: %s %v", status, err)
|
||
|
|
}
|
||
|
|
appendIntent(t, path, intentLine(active))
|
||
|
|
if status, err := log.read(math.MaxInt64); err != nil || status != active {
|
||
|
|
t.Fatalf("new instruction after cancellation: %s %v", status, err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestIntentCut(t *testing.T) {
|
||
|
|
path := filepath.Join(t.TempDir(), "rollout.jsonl")
|
||
|
|
if err := os.WriteFile(path, nil, 0600); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
log, err := openIntent(path)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
appendIntent(t, path, intentLine(paused))
|
||
|
|
end, err := log.end()
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
appendIntent(t, path, intentLine(active))
|
||
|
|
if status, err := log.read(end); err != nil || status != paused {
|
||
|
|
t.Fatalf("read beyond captured input: %s %v", status, err)
|
||
|
|
}
|
||
|
|
if status, err := log.read(math.MaxInt64); err != nil || status != active {
|
||
|
|
t.Fatalf("lost later input: %s %v", status, err)
|
||
|
|
}
|
||
|
|
}
|