ajhahn.de
← eeco
Go 71 lines
package cockpit

import (
	"strings"
	"testing"
)

func TestSelfConsistency_CleanCursor(t *testing.T) {
	pb := loadHandover(t)
	res, err := CheckSelfConsistency(pb, "cursor")
	if err != nil {
		t.Fatal(err)
	}
	if !res.OK {
		t.Errorf("clean cursor render should pass self-consistency: %v", res.Notes)
	}
}

func TestSelfConsistency_CleanAggregate(t *testing.T) {
	res, err := CheckSelfConsistencyAll(twoPlaybooks(t), "agents")
	if err != nil {
		t.Fatal(err)
	}
	if !res.OK {
		t.Errorf("clean aggregate render should pass: %v", res.Notes)
	}
}

// TestSelfConsistency_FailsOnStrippedForbidden: removing the Forbidden block
// lines (the `git <verb>` bullets) makes a denylisted verb disappear, which
// self-consistency must catch.
func TestSelfConsistency_FailsOnStrippedForbidden(t *testing.T) {
	pb := loadHandover(t)
	out, err := cursorRenderer{}.Render(pb)
	if err != nil {
		t.Fatal(err)
	}
	var kept []string
	for _, line := range strings.Split(string(out), "\n") {
		if strings.Contains(line, "`git ") { // drop the Forbidden-block verb bullets
			continue
		}
		kept = append(kept, line)
	}
	tampered := []byte(strings.Join(kept, "\n"))
	res := checkSelfConsistencyBytes(tampered, []Playbook{pb})
	if res.OK {
		t.Error("self-consistency passed bytes with the Forbidden block stripped")
	}
}

// TestSelfConsistency_FailsOnLeakedWriteVerb: injecting a write-git verb into
// an Allowed block must fail the defense-in-depth scan.
func TestSelfConsistency_FailsOnLeakedWriteVerb(t *testing.T) {
	pb := loadHandover(t)
	out, err := cursorRenderer{}.Render(pb)
	if err != nil {
		t.Fatal(err)
	}
	marker := "## " + headingAllowed + "\n"
	idx := strings.Index(string(out), marker)
	if idx < 0 {
		t.Fatal("Allowed heading not found")
	}
	injected := string(out[:idx+len(marker)]) + "- Bash(git commit:*)\n" + string(out[idx+len(marker):])
	res := checkSelfConsistencyBytes([]byte(injected), []Playbook{pb})
	if res.OK {
		t.Error("self-consistency passed a leaked write-git verb in the Allowed block")
	}
}