package nats_test import ( "context" "testing" "time" natsio "github.com/nats-io/nats.go" localnats "anchorage/internal/pkg/nats" ) func TestEmbeddedServerPubSub(t *testing.T) { dir := t.TempDir() ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) defer cancel() srv, err := localnats.Start(ctx, localnats.ServerConfig{ ServerName: "test-node-1", DataDir: dir, ClientHost: "127.0.0.1", ClientPort: -1, JSReplicas: 1, }) if err != nil { t.Fatalf("Start: %v", err) } defer srv.Close() if !srv.NC.IsConnected() { t.Fatal("client not connected") } recv := make(chan string, 1) sub, err := srv.NC.Subscribe("test.subject", func(m *natsio.Msg) { recv <- string(m.Data) }) if err != nil { t.Fatalf("Subscribe: %v", err) } defer func() { _ = sub.Unsubscribe() }() if err := srv.NC.Publish("test.subject", []byte("hello")); err != nil { t.Fatalf("Publish: %v", err) } if err := srv.NC.Flush(); err != nil { t.Fatalf("Flush: %v", err) } select { case got := <-recv: if got != "hello" { t.Errorf("got %q, want hello", got) } case <-time.After(2 * time.Second): t.Fatal("timeout waiting for message") } }