Skip to content
quarry Artifact [c0661ec2ab]
Login

Artifact [c0661ec2ab]

Artifact c0661ec2ab0fe9de3d26d1e8b2e60d534193fd7405bb6f3de7264fc630a22e21:


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")
}