Merge pull request 'Phase 5 (3/4): every test on a bus of its own, at the release the mesh runs (hq ADR 0237)' (#97) from feat/a-suite-that-cannot-flake into main
mesh/delivery delivered

This commit was merged in pull request #97.
This commit is contained in:
2026-10-06 19:19:41 +00:00
627 changed files with 437174 additions and 166 deletions
+4 -7
View File
@@ -2,24 +2,21 @@ package broker
import (
"fmt"
"os"
"testing"
"time"
"github.com/nats-io/nats.go"
"github.com/novox/mesh-controller/internal/testbus"
)
// A consumer that reacts to announcements, made on a stream that keeps a week of them, starts from now:
// made from the start it replays every merge and build of that week (novox/hq issue 248). And a reset
// re-makes a stuck one from now, its configuration otherwise kept, and refuses a work queue.
//
// docker run -d --rm --name t -p 14231:4222 nats:2.10-alpine -js
// MESH_TEST_NATS=nats://127.0.0.1:14231 go test ./internal/broker/ -run TestAConsumerMadeFromNow
// go test ./internal/broker/ -run TestAConsumerMadeFromNow (each test on a bus of its own: internal/testbus)
func TestAConsumerMadeFromNowNeverReplaysTheStreamsHistory(t *testing.T) {
url := os.Getenv("MESH_TEST_NATS")
if url == "" {
t.Skip("MESH_TEST_NATS unset")
}
url := testbus.URL(t)
js, err := Dial(url)
if err != nil {
t.Fatal(err)
+5 -11
View File
@@ -2,12 +2,13 @@ package broker
import (
"fmt"
"os"
"strings"
"testing"
"time"
"github.com/nats-io/nats.go"
"github.com/novox/mesh-controller/internal/testbus"
)
const twoSeconds = 2 * time.Second
@@ -17,13 +18,9 @@ const twoSeconds = 2 * time.Second
// so bringing one to match must replace it — and must not replay what it already acknowledged
// (novox/hq 04-ISSUES/156).
//
// docker run -d --rm --name t -p 14231:4222 nats:2.10-alpine -js
// MESH_TEST_NATS=nats://127.0.0.1:14231 go test ./internal/broker/ -run TestUpgrading
// go test ./internal/broker/ -run TestUpgrading (each test on a bus of its own: internal/testbus)
func TestUpgradingAConsumerWhoseDeliverySubjectMoved(t *testing.T) {
url := os.Getenv("MESH_TEST_NATS")
if url == "" {
t.Skip("MESH_TEST_NATS unset")
}
url := testbus.URL(t)
js, err := Dial(url)
if err != nil {
t.Fatal(err)
@@ -133,10 +130,7 @@ func TestUpgradingAConsumerWhoseDeliverySubjectMoved(t *testing.T) {
// not undo. The controller's own two consumers are in exactly this position: it asserts them before
// it subscribes.
func TestAConsumerNothingIsBoundToDoesMove(t *testing.T) {
url := os.Getenv("MESH_TEST_NATS")
if url == "" {
t.Skip("MESH_TEST_NATS unset")
}
url := testbus.URL(t)
js, err := Dial(url)
if err != nil {
t.Fatal(err)
+4 -7
View File
@@ -1,8 +1,9 @@
package broker
import (
"os"
"testing"
"github.com/novox/mesh-controller/internal/testbus"
)
// Against a real server, because the questions here are all "does the server accept this" —
@@ -10,13 +11,9 @@ import (
//
// Skipped unless MESH_TEST_NATS names one, so the ordinary suite stays fast and offline:
//
// docker run -d --rm --name t -p 14222:4222 nats:2.10-alpine -js
// MESH_TEST_NATS=nats://127.0.0.1:14222 go test ./internal/broker/ -run TestAgainstARealServer
// go test ./internal/broker/ -run TestAgainstARealServer (each test on a bus of its own: internal/testbus)
func TestAgainstARealServer(t *testing.T) {
url := os.Getenv("MESH_TEST_NATS")
if url == "" {
t.Skip("MESH_TEST_NATS unset")
}
url := testbus.URL(t)
js, err := Dial(url)
if err != nil {
t.Fatal(err)
+4 -7
View File
@@ -1,10 +1,11 @@
package broker
import (
"os"
"testing"
"github.com/nats-io/nats.go"
"github.com/novox/mesh-controller/internal/testbus"
)
// Raising the bus's objects against a real server.
@@ -14,15 +15,11 @@ import (
// could answer: that asserting twice changes nothing, and that a consumer really is bound to the one
// subject its node is allowed to read.
//
// docker run -d --rm --name t -p 14227:4222 nats:2.10-alpine -js
// MESH_TEST_NATS=nats://127.0.0.1:14227 go test ./internal/broker/ -run TestRaising
// go test ./internal/broker/ -run TestRaising (each test on a bus of its own: internal/testbus)
func aLiveBus(t *testing.T) *JetStream {
t.Helper()
url := os.Getenv("MESH_TEST_NATS")
if url == "" {
t.Skip("MESH_TEST_NATS unset")
}
url := testbus.URL(t)
js, err := Dial(url)
if err != nil {
t.Fatal(err)
+5 -11
View File
@@ -1,11 +1,12 @@
package broker
import (
"os"
"testing"
"time"
"github.com/nats-io/nats.go"
"github.com/novox/mesh-controller/internal/testbus"
)
// A seat's worker that changed from push to pull delivery strands a holder built for the new shape
@@ -14,13 +15,9 @@ import (
// shape, type included: on a work queue it re-makes one of the wrong type, losing nothing, and a
// pull subscription then binds and takes what was pending.
//
// docker run -d --rm --name t -p 14231:4222 nats:2.10-alpine -js
// MESH_TEST_NATS=nats://127.0.0.1:14231 go test ./internal/broker/ -run TestAWorker
// go test ./internal/broker/ -run TestAWorker (each test on a bus of its own: internal/testbus)
func TestAWorkerOfTheWrongTypeIsRemadeOnAWorkQueueAndAPullThenBinds(t *testing.T) {
url := os.Getenv("MESH_TEST_NATS")
if url == "" {
t.Skip("MESH_TEST_NATS unset")
}
url := testbus.URL(t)
js, err := Dial(url)
if err != nil {
t.Fatal(err)
@@ -112,10 +109,7 @@ func TestAWorkerOfTheWrongTypeIsRemadeOnAWorkQueueAndAPullThenBinds(t *testing.T
// re-making it from the start would replay what it acknowledged (novox/hq issue 156), and leaving it
// for a hand re-made it exactly that way on 2026-10-03 (issue 207).
func TestAWorkerOfTheWrongTypeOnAHistoryStreamIsRemadeFromNowOn(t *testing.T) {
url := os.Getenv("MESH_TEST_NATS")
if url == "" {
t.Skip("MESH_TEST_NATS unset")
}
url := testbus.URL(t)
js, err := Dial(url)
if err != nil {
t.Fatal(err)