The operator's question (how much are the build nodes used, is ace eligible) took six calls over four tools. build_usage reads it from the bus's states: seats held (have), capacity (mesh-config resolved), pauses, the build modules' steps by kind with left-running keys, the last hour and day with total and median time and time at capacity, the running tries, and the backlog the view program reads from the seats' streams. A try now names the asks it put, and the checker announces its tries readable, so the view tells a try's asks from a check's.
57 lines
1.7 KiB
Go
57 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"sort"
|
|
"testing"
|
|
)
|
|
|
|
// The checker says on the bus which states it keeps and which others may read (novox/hq ADR 0495 clauses 2 and 3): a
|
|
// reader is granted from that announcement. owed is read by the forge module, which writes mesh/check from it (ADR 0521,
|
|
// R4e round 2 finding R2-1), and by the forge bridge; previews by the indexer; verdicts by the gate. The list names every
|
|
// state of the manifest, so no state is refused at the call for want of being announced (clause 5).
|
|
func TestTheCheckerAnnouncesEveryStateItKeepsAndOwedReadable(t *testing.T) { // R2-1, ADR 0495 §2-§3, ADR 0521
|
|
raw, err := os.ReadFile("../../module.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var m struct {
|
|
State []struct{ Name string } `json:"state"`
|
|
}
|
|
if err := json.Unmarshal(raw, &m); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var manifest, announced, readable []string
|
|
for _, s := range m.State {
|
|
manifest = append(manifest, s.Name)
|
|
}
|
|
for _, s := range keptStates {
|
|
announced = append(announced, s.Name)
|
|
if s.Readable {
|
|
readable = append(readable, s.Name)
|
|
}
|
|
}
|
|
sort.Strings(manifest)
|
|
sort.Strings(announced)
|
|
if !equal(manifest, announced) {
|
|
t.Errorf("announced %v, the manifest keeps %v", announced, manifest)
|
|
}
|
|
// kept is read by the Go build module for a check ask (issue 1887 design limit 1); tries by the delivery view (build_usage).
|
|
if want := []string{"kept", "owed", "previews", "tries", "verdicts"}; !equal(readable, want) {
|
|
t.Errorf("readable %v, want %v", readable, want)
|
|
}
|
|
}
|
|
|
|
func equal(a, b []string) bool {
|
|
if len(a) != len(b) {
|
|
return false
|
|
}
|
|
for i := range a {
|
|
if a[i] != b[i] {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|