Files
sift/internal/auth/auth_test.go
T
kyle 16a7d678d3 p2.1: honcho-embed, wayback http/204, memento, keys owner
Embed requests send dixie.embed_model (default honcho-embed).
Wayback accepts http://web.archive.org, rewrites to https, skips
non-200 closest.status. Memento-Datetime is parsed as an HTTP date
and future/garbage values become empty snapshot_at. keys add writes
via temp+fchown/chmod/rename so root does not clobber keys.toml.
Digest fallback is capped at the 6k-token budget.
2026-09-23 02:41:46 -07:00

72 lines
1.5 KiB
Go

package auth
import (
"os"
"path/filepath"
"testing"
)
func TestAddLookupRevoke(t *testing.T) {
dir := t.TempDir()
keys := filepath.Join(dir, "keys.toml")
out := filepath.Join(dir, "k")
if err := Add(keys, "talos", "hermes-fleet", out); err != nil {
t.Fatal(err)
}
st, err := os.Stat(out)
if err != nil {
t.Fatal(err)
}
if st.Mode().Perm()&0o077 != 0 {
t.Fatalf("perms %v", st.Mode())
}
b, _ := os.ReadFile(out)
key := string(b)
if key[len(key)-1] == '\n' {
key = key[:len(key)-1]
}
s, err := Load(keys)
if err != nil {
t.Fatal(err)
}
if s.LookupBearer(key) == nil || s.LookupBearer(key).Name != "talos" {
t.Fatal("lookup failed")
}
if s.LookupBearer("nope") != nil {
t.Fatal("unknown accepted")
}
if err := Add(keys, "x", "y", out); err == nil {
t.Fatal("overwrite allowed")
}
cs, err := List(keys)
if err != nil || len(cs) != 1 || cs[0].Name != "talos" {
t.Fatalf("%v %v", cs, err)
}
if err := Revoke(keys, "talos"); err != nil {
t.Fatal(err)
}
s, _ = Load(keys)
if s.LookupBearer(key) != nil {
t.Fatal("revoked still valid")
}
}
func TestAddPreservesKeysMode(t *testing.T) {
dir := t.TempDir()
keys := filepath.Join(dir, "keys.toml")
if err := os.WriteFile(keys, []byte(""), 0o600); err != nil {
t.Fatal(err)
}
out := filepath.Join(dir, "k")
if err := Add(keys, "talos", "hermes-fleet", out); err != nil {
t.Fatal(err)
}
st, err := os.Stat(keys)
if err != nil {
t.Fatal(err)
}
if st.Mode().Perm() != 0o600 {
t.Fatalf("mode %o", st.Mode().Perm())
}
}