mesh/merge-gate head ee1d7e5cae12 merged into trunk 56d6313262e8 — pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every …
mesh/repo-check head ee1d7e5cae12 merged into trunk 56d6313262e8 — pass: its merge-check.sh passed
mesh/delivery delivered
The forge clips a status to 140 characters, so the long sentence pushed the verdict's own words out; and a paused holder's hand-back or a bus delay also count as a delivery, so the cause is not claimed (novox/hq issue 594).
57 lines
2.7 KiB
Go
57 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/novox/mesh-controller/internal/link"
|
|
)
|
|
|
|
// **A check that ran again says so on the pull request** (novox/hq issue 594): a build agent replaced
|
|
// mid-check leaves the ask to be handed out again, and the verdict that finally comes is from a second
|
|
// run. Each layer's summary — what the forge shows as the check's line — names the restart.
|
|
func TestARestartedCheckSaysSoOnEveryLayer(t *testing.T) {
|
|
asked := &link.CheckRequest{Owner: "novox", Repo: "mesh-controller", Number: 279}
|
|
gate := &link.CheckLayer{Verdict: "pass", Summary: "every node composes"}
|
|
repo := &link.CheckLayer{Verdict: "pass", Summary: "merge-check.sh passed"}
|
|
c := checkedOf(link.BuildResult{ID: "b", Ref: "abc", On: "shanks", Checked: asked, Delivery: 2,
|
|
Check: &link.CheckOutcome{Verdict: "pass", Summary: "every node composes", Gate: gate, RepoCheck: repo}})
|
|
for name, said := range map[string]string{"summary": c.Summary, "gate": c.Gate.Summary,
|
|
"repository check": c.RepoCheck.Summary} {
|
|
// The verdict's own words first, then the marker: the forge clips a status to a few words.
|
|
if !strings.HasSuffix(said, " (run 2)") || strings.HasPrefix(said, "(run") {
|
|
t.Errorf("the %s says %q: a check run twice reads as run once, or its marker pushes its words out", name, said)
|
|
}
|
|
}
|
|
if !strings.HasPrefix(c.Report, "restarted: handed out 2 times") {
|
|
t.Errorf("the report does not open with the restart: %q", c.Report)
|
|
}
|
|
if gate.Summary != "every node composes" {
|
|
t.Errorf("the build's own outcome was changed under it: %q", gate.Summary)
|
|
}
|
|
|
|
// Taken once, nothing is added.
|
|
once := checkedOf(link.BuildResult{ID: "b", Ref: "abc", Checked: asked, Delivery: 1,
|
|
Check: &link.CheckOutcome{Verdict: "pass", Summary: "every node composes"}})
|
|
if strings.Contains(once.Summary, "(run") || strings.Contains(once.Report, "restarted") {
|
|
t.Errorf("a check run once says %q", once.Summary)
|
|
}
|
|
}
|
|
|
|
// And the queue says it of the ask in flight.
|
|
func TestTheQueueSaysAnAskInFlightRestarted(t *testing.T) {
|
|
now := time.Date(2026, 10, 13, 0, 16, 0, 0, time.UTC)
|
|
q := link.Queue{Seat: link.TheBuildMachine, Delivered: 1, AckPending: 1, MaxDeliver: 5, Asks: []link.QueuedAsk{
|
|
{Seq: 1, ID: "build-279", Repository: "ssh://forge/novox/mesh-controller", AskedAt: now.Add(-7 * time.Minute),
|
|
State: link.AskInFlight, On: "shanks", Started: now.Add(-time.Minute), Delivery: 2},
|
|
}}
|
|
text := queueText(q, now)
|
|
if !strings.Contains(text, "handed out 2 times") {
|
|
t.Fatalf("the queue does not say the ask was handed out again:\n%s", text)
|
|
}
|
|
if a := queueAnswerOf(q, now).Asks[0]; a.Delivery != 2 {
|
|
t.Errorf("the queue's data says delivery %d, want 2", a.Delivery)
|
|
}
|
|
}
|