Files
spinifex/tests/e2e/harness/jetstream.go
T

45 lines
1.2 KiB
Go

//go:build e2e
package harness
import (
"testing"
"github.com/mulgadc/spinifex/spinifex/utils"
"github.com/nats-io/nats.go/jetstream"
)
// KVReplicaFactors connects to the cluster NATS and returns the configured
// replica factor for each named KV bucket, read from JetStream stream metadata
// (the "KV_" stream prefix is applied internally). The replica count lives in
// cluster-global Raft metadata, so any node's NATS reports the same value.
// Fatals if NATS is unreachable or a bucket's stream cannot be introspected.
func KVReplicaFactors(t *testing.T, env *Env, buckets ...string) map[string]int {
t.Helper()
host, token, ca := natsConn(t, env)
nc, err := utils.ConnectNATS(host, token, ca)
if err != nil {
t.Fatalf("connect NATS %s: %v", host, err)
}
defer nc.Close()
js, err := jetstream.New(nc)
if err != nil {
t.Fatalf("jetstream context: %v", err)
}
out := make(map[string]int, len(buckets))
for _, b := range buckets {
stream, err := js.Stream(t.Context(), "KV_"+b)
if err != nil {
t.Fatalf("open stream for KV bucket %q: %v", b, err)
}
info, err := stream.Info(t.Context())
if err != nil {
t.Fatalf("stream info for KV bucket %q: %v", b, err)
}
out[b] = info.Config.Replicas
}
return out
}