Skip to content
quarry Artifact [99e8bfeecb]
Login

Artifact [99e8bfeecb]

Artifact 99e8bfeecb1a6814802f955bf6b0304e58e6a479a2fd6cff56f7bc832e640645:


package oltp

import (
	"path/filepath"
	"testing"
)

func TestGateBypassRoundTrip(t *testing.T) {
	db, err := Open(filepath.Join(t.TempDir(), "o.db"))
	if err != nil {
		t.Fatal(err)
	}
	defer db.Close()
	if err := db.RecordForgeAccept("alpha", "m1"); err != nil {
		t.Fatal(err)
	}
	if ok, _ := db.ForgeAccepted("alpha", "m1"); !ok {
		t.Fatal("a forge accept was forgotten")
	}
	if ok, _ := db.ForgeAccepted("alpha", "rogue"); ok {
		t.Fatal("a rogue check-in read as forge-accepted")
	}
	if _, ok := db.GateWatch("alpha", "trunk"); ok {
		t.Fatal("a watch existed before anyone set it")
	}
	if err := db.SetGateWatch("alpha", "trunk", "t1"); err != nil {
		t.Fatal(err)
	}
	if tip, ok := db.GateWatch("alpha", "trunk"); !ok || tip != "t1" {
		t.Fatalf("watch = %q, %v", tip, ok)
	}
	if err := db.AddGateBypass("alpha", "trunk", "rogue", "eve"); err != nil {
		t.Fatal(err)
	}
	if err := db.AddGateBypass("alpha", "trunk", "rogue", "eve"); err != nil {
		t.Fatal(err) // twice is one finding
	}
	got, err := db.GateBypasses("alpha", 10)
	if err != nil || len(got) != 1 || got[0].Checkin != "rogue" {
		t.Fatalf("bypasses = %v, %v", got, err)
	}
}

// A tripwire needs a reset and a history. Acknowledging hides a finding
// from the strip and never deletes it; the history pages everything,
// open or not, and says how many there are in all.
func TestGateBypassAckAndHistory(t *testing.T) {
	db, err := Open(filepath.Join(t.TempDir(), "o.db"))
	if err != nil {
		t.Fatal(err)
	}
	defer db.Close()
	for _, c := range []string{"c1", "c2", "c3"} {
		if err := db.AddGateBypass("alpha", "trunk", c, "dan"); err != nil {
			t.Fatal(err)
		}
	}
	open, err := db.GateBypasses("alpha", 10)
	if err != nil || len(open) != 3 {
		t.Fatalf("open = %d, %v; want 3", len(open), err)
	}
	if open[0].Who != "dan" {
		t.Errorf("the finding does not name who committed: %+v", open[0])
	}
	if err := db.AckGateBypass("alpha", "c2"); err != nil {
		t.Fatal(err)
	}
	open, _ = db.GateBypasses("alpha", 10)
	if len(open) != 2 {
		t.Fatalf("after one ack the strip shows %d, want 2", len(open))
	}
	rows, total, err := db.GateBypassHistory("alpha", 0, 2)
	if err != nil || total != 3 || len(rows) != 2 {
		t.Fatalf("history page 1 = %d of %d, %v; want 2 of 3", len(rows), total, err)
	}
	rows, _, _ = db.GateBypassHistory("alpha", 2, 2)
	if len(rows) != 1 {
		t.Fatalf("history page 2 = %d rows, want 1", len(rows))
	}
	n, err := db.AckAllGateBypasses("alpha")
	if err != nil || n != 2 {
		t.Fatalf("ack all = %d, %v; want 2", n, err)
	}
	if open, _ = db.GateBypasses("alpha", 10); len(open) != 0 {
		t.Errorf("the strip still shows %d after ack all", len(open))
	}
	if _, total, _ = db.GateBypassHistory("alpha", 0, 10); total != 3 {
		t.Errorf("acknowledging deleted history: total %d, want 3", total)
	}
}