58 lines
1.8 KiB
Go
58 lines
1.8 KiB
Go
//go:build integration
|
|
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/novox/mesh-controller/internal/broker"
|
|
"github.com/novox/mesh-controller/internal/link"
|
|
"github.com/novox/mesh-controller/internal/testbus"
|
|
)
|
|
|
|
func TestNatsAMembershipIssuedWithoutItsVerifiedSenderIsIssuedAgainWhenTheJudgementPasses(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)
|
|
}
|
|
bus := link.OverNATS{Conn: js.Conn(), JS: js.Context()}
|
|
|
|
failed, router := verifiedSenderRecords(nil)
|
|
body, err := json.Marshal(broker.MembershipFor("novox", router, broker.PlacementsOf(failed, nil)))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := bus.PublishMembership(t.Context(), "novox", "messenger", body); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
issued := func() []byte {
|
|
m, err := js.Context().GetLastMsg(broker.AssignmentsStream, broker.MembershipSubject("novox", "messenger"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return m.Data
|
|
}
|
|
if hasVerified(t, issued()) {
|
|
t.Fatal("issued with a failed judgement, and the verified sender is kept: the test proves nothing")
|
|
}
|
|
if n := reissueVerifiedSendersOn(t.Context(), bus, failed, broker.PlacementsOf(failed, nil)); n != 0 {
|
|
t.Fatalf("issued %d memberships while the judgement still fails", n)
|
|
}
|
|
passing, _ := verifiedSenderRecords(map[string]bool{"novox": true})
|
|
where := broker.PlacementsOf(passing, nil)
|
|
if n := reissueVerifiedSendersOn(t.Context(), bus, passing, where); n != 1 {
|
|
t.Fatalf("issued %d memberships after the judgement passed, want 1", n)
|
|
}
|
|
if !hasVerified(t, issued()) {
|
|
t.Fatal("the membership on the bus lacks the verified sender after the judgement passed")
|
|
}
|
|
if n := reissueVerifiedSendersOn(t.Context(), bus, passing, where); n != 0 {
|
|
t.Fatalf("a second pass issued %d memberships", n)
|
|
}
|
|
}
|