package oltp
import (
"path/filepath"
"testing"
)
// The seen set is unprimed until marked, primed by an empty mark, holds
// each key once however often it is marked, and goes with the repository.
func TestCITagsSeenRoundTrip(t *testing.T) {
db, err := Open(filepath.Join(t.TempDir(), "oltp.db"))
if err != nil {
t.Fatal(err)
}
defer db.Close()
if _, primed, err := db.CITagsSeen("r"); err != nil || primed {
t.Fatalf("FAIL: a repository never looked at is primed (%v)", err)
}
if err := db.MarkCITagsSeen("r"); err != nil {
t.Fatal(err)
}
if seen, primed, err := db.CITagsSeen("r"); err != nil || !primed || len(seen) != 0 {
t.Fatalf("FAIL: an empty mark read back as %v, primed %v, %v; want an empty primed set", seen, primed, err)
}
k := CITagKey{Src: "s1", Checkin: "c1", Name: "version-0.2.0"}
for range 2 {
if err := db.MarkCITagsSeen("r", k); err != nil {
t.Fatal(err)
}
}
if seen, _, err := db.CITagsSeen("r"); err != nil || len(seen) != 1 || !seen[k] {
t.Fatalf("FAIL: the set read back as %v, %v; want the one key", seen, err)
}
if err := db.PurgeRepo("r"); err != nil {
t.Fatal(err)
}
if _, primed, _ := db.CITagsSeen("r"); primed {
t.Fatal("FAIL: the seen set outlived its repository")
}
t.Log("ok: the seen set primes, holds each key once, and is purged with its repository")
}