The delivery repository's contracts and SDK live under modules/ as mesh-delivery-contracts and mesh-delivery-sdk, their Go module paths renamed to match the folders (the TypeScript names already did), and every importer in mesh-delivery, mesh-catalog, mesh-host, mesh-tools and mesh-sdk follows in the same group: a design as it should be, one path per module, checked by the group's check building every importer. Builds: design 47 G §427, §88 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
53 lines
1.9 KiB
Go
53 lines
1.9 KiB
Go
//go:build integration
|
|
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/nats-io/nats.go"
|
|
|
|
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds"
|
|
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-contracts/go/seats/meshbuilds"
|
|
)
|
|
|
|
// The runner's build step ask on the seat mesh-builds' accept subject, naming an entry by its fingerprint, is built through the
|
|
// module's one claim and answered as the seat's step-ended.<node> under the ask's id (design 47 G A-97, A-99).
|
|
func TestTheRunnersBuildStepAskIsAnsweredAsStepEnded(t *testing.T) {
|
|
b := startBed(t)
|
|
b.module(t, "netcheck", "catalogue-a67f0196-netcheck.module.json", "modules/netcheck")
|
|
sub, err := nats.Connect(b.srvURL, nats.UserInfo("ctl", "pw"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer sub.Close()
|
|
ended := make(chan *nats.Msg, 4)
|
|
s, err := sub.ChanSubscribe(meshbuilds.SubjectStepEndedAll, ended)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer s.Unsubscribe()
|
|
b.start(t, "n1", nil)
|
|
b.await(t, "netcheck", isState(builds.BuildDone))
|
|
run := meshbuilds.StepRun{Pipeline: "main.1.netcheck", Step: meshbuilds.StepRunStepBuild, Branch: "main", Revision: 1,
|
|
Entries: []meshbuilds.BuildEntry{{Module: "netcheck", Fingerprint: fp}}}
|
|
data, _ := json.Marshal(run)
|
|
msg := nats.NewMsg(meshbuilds.AcceptSubjectStep)
|
|
msg.Data = data
|
|
msg.Header.Set("x-event-id", "ask-1")
|
|
if err := sub.PublishMsg(msg); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
select {
|
|
case m := <-ended:
|
|
var end meshbuilds.StepEnded
|
|
if err := json.Unmarshal(m.Data, &end); err != nil || end.ID != "ask-1" || end.Outcome != meshbuilds.StepEndedOutcomePassed || end.Pipeline != "main.1.netcheck" || m.Subject != meshbuilds.SubjectStepEnded("n1") {
|
|
t.Fatalf("step-ended on %s = %+v, %v; want the ask ask-1 passed on n1", m.Subject, end, err)
|
|
}
|
|
case <-time.After(20 * time.Second):
|
|
t.Fatal("no step-ended within 20 s")
|
|
}
|
|
}
|