mesh/delivery checking
mesh/delivery-group group feat/335-a-busy-container-is-replaced-when-idle rejected: its order contradicts itself: novox/mesh-catalog@190608193764, novox/mesh-c…
mesh/merge-gate out of date: judged against trunk 56d6313262e8, the trunk is now cbac703e817d; judged again on a recheck or when it is merged
mesh/repo-check out of date: judged against trunk 56d6313262e8, the trunk is now cbac703e817d; judged again on a recheck or when it is merged
A merge into mesh-controller replaced every build agent and threw away the checks in flight (issue 594). The manifest's container busy is checked and sent only to an engine that reads it; a report's busy waits are kept, the gate starts at the report that says the container replaced, and the wait is a phase of the delivery time. mesh-builder busy drains the agent and answers while a build is in hand (novox/hq ADR 0335).
46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// **The genesis path writes its result to stdout and nothing else there.** The installer captures
|
|
// stdout alone and parses it as JSON; one stray log line makes that fail with "invalid character"
|
|
// — exactly what a builder fmt.Printf caused, breaking a build that had worked. This keeps
|
|
// diagnostics on stderr so a future print cannot repeat it silently.
|
|
func TestBuilderDiagnosticsStayOffStdout(t *testing.T) {
|
|
allowed := map[string]bool{
|
|
"string(body)": true, // once.go: the result JSON, which IS stdout
|
|
"version)": true, // --version
|
|
`"stopping")`: true, // the loop.s shutdown line
|
|
"usage)": true, // --help text, for a human
|
|
"said)": true, // busy: the answer its node-engine reads (novox/hq ADR 0335)
|
|
}
|
|
for _, file := range []string{"once.go", "main.go"} {
|
|
src, err := os.ReadFile(file)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for i, raw := range strings.Split(string(src), "\n") {
|
|
line := strings.TrimSpace(raw)
|
|
if !strings.HasPrefix(line, "fmt.Printf(") &&
|
|
!strings.HasPrefix(line, "fmt.Println(") &&
|
|
!strings.HasPrefix(line, "fmt.Print(") {
|
|
continue
|
|
}
|
|
ok := false
|
|
for token := range allowed {
|
|
if strings.Contains(line, token) {
|
|
ok = true
|
|
}
|
|
}
|
|
if !ok {
|
|
t.Errorf("%s:%d writes a diagnostic to stdout, which the installer parses as JSON:\n %s",
|
|
file, i+1, line)
|
|
}
|
|
}
|
|
}
|
|
}
|