package builder import ( "os" "path/filepath" "testing" ) // ownCheckOf runs a repository's own check whose script prints a captured output and fails, as the build // seat runs it, and answers the layer and every line it said in the build's log. func captured(t *testing.T, name string) string { t.Helper() body, err := os.ReadFile(filepath.Join("testdata", "issue460", name)) if err != nil { t.Fatal(err) } return string(body) } // **novox/hq issue 460**: mesh-controller #218's check failed with "FAIL 268.072s" and no test // name: the package's own logs, printed after its `--- FAIL:` lines, pushed them out of the last 200 lines, // which was all the summary was named from. The first failing test is named, and the others after it, // however much came after them. // One -race run of every package: the first failure is the earliest, not the last within the tail. // A package that does not build is named by its error, not by its bare "[build failed]". // The whole of what the check printed is in the build's log, line by line — where before none of it was. // What failed is kept whole in the verdict: each --- FAIL with its messages, a panic with its first frames, // a data race report from rule to rule — and none of the log lines around them. // A run that fails everywhere is bounded in what it keeps, and what it keeps survives the controller's cut // of a report to its last 60 KiB, said at the report's end. // A passing check says nothing of what failed. func TestAPassingCheckReportsAsBefore(t *testing.T) { if got := withWhatFailed("ok\tx\t1s", &Layer{Verdict: "pass"}); got != "ok\tx\t1s" { t.Errorf("a passing report became %q", got) } if got := withWhatFailed("r", nil); got != "r" { t.Errorf("no repository layer became %q", got) } }