57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
//go:build integration
|
|
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/nats-io/nats.go"
|
|
"github.com/novox/mesh-controller/internal/broker"
|
|
"github.com/novox/mesh-controller/internal/link"
|
|
"github.com/novox/mesh-controller/internal/testbus"
|
|
)
|
|
|
|
func TestACheckStoppedByItsKeyIsAnnouncedAsNoVerdict(t *testing.T) {
|
|
js, err := broker.Dial(testbus.URL(t))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Cleanup(js.Close)
|
|
if err := broker.AssertMeshStreams(js); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
legacy, err := js.Conn().JetStream()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
was := checkEvents
|
|
checkEvents = link.OverNATS{Conn: js.Conn(), JS: legacy}
|
|
t.Cleanup(func() { checkEvents = was })
|
|
heard := make(chan *nats.Msg, 4)
|
|
sub, err := js.Conn().ChanSubscribe(link.SeatEventSubject(link.MeshControllerSeat, link.KeyChecked), heard)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() { _ = sub.Unsubscribe() }()
|
|
asked := &link.CheckRequest{Owner: "novox", Repo: "mesh-catalog", Number: 3}
|
|
checked(t.Context(), link.BuildResult{ID: "stopped", Ref: "abc", Checked: asked, Failed: link.SupersededByKey})
|
|
checked(t.Context(), link.BuildResult{ID: "broken", Ref: "abc", Checked: asked, Failed: "the facts snapshot cannot be read"})
|
|
select {
|
|
case m := <-heard:
|
|
var c link.Checked
|
|
_ = json.Unmarshal(m.Data, &c)
|
|
if c.ID != "broken" || c.Verdict != "error" {
|
|
t.Fatalf("the first verdict said is %+v; want only the broken check's error", c)
|
|
}
|
|
case <-time.After(5 * time.Second):
|
|
t.Fatal("nothing was said")
|
|
}
|
|
select {
|
|
case m := <-heard:
|
|
t.Fatalf("a second verdict was said: %s", m.Data)
|
|
case <-time.After(300 * time.Millisecond):
|
|
}
|
|
}
|