项目文件夹

文件
Asim Aslam ee9f3afe37 GenAI interface (#2790)
* genai interface

* x

* x

* text to speech

* Re-add events package (#2761)

* Re-add events package

* run redis as a dep

* remove redis events

* fix: data race on event subscriber

* fix: data race in tests

* fix: store errors

* fix: lint issues

* feat: default stream

* Update file.go

---------

Co-authored-by: Brian Ketelsen <bketelsen@gmail.com>

* .

* copilot couldn't make it compile so I did

* copilot couldn't make it compile so I did

* x

---------

Co-authored-by: Brian Ketelsen <bketelsen@gmail.com>
2025-06-20 10:24:31 +01:00

113 行
2.1 KiB
Go

package natsjs_test
import (
"context"
"encoding/json"
"strconv"
"strings"
"testing"
"time"
nserver "github.com/nats-io/nats-server/v2/server"
"github.com/stretchr/testify/assert"
"github.com/test-go/testify/require"
"go-micro.dev/v5/events"
"go-micro.dev/v5/events/natsjs"
)
type Payload struct {
ID string `json:"id"`
Name string `json:"name"`
}
func TestSingleEvent(t *testing.T) {
ctx, cancel := context.WithCancel(context.TODO())
defer cancel()
// variables
demoPayload := Payload{
ID: "123",
Name: "Hello World",
}
topic := "foobar"
clusterName := "test-cluster"
natsAddr := getFreeLocalhostAddress()
natsPort, _ := strconv.Atoi(strings.Split(natsAddr, ":")[1])
// start the NATS with JetStream server
go natsServer(ctx,
t,
&nserver.Options{
Host: strings.Split(natsAddr, ":")[0],
Port: natsPort,
Cluster: nserver.ClusterOpts{
Name: clusterName,
},
},
)
time.Sleep(1 * time.Second)
// consumer
consumerClient, err := natsjs.NewStream(
natsjs.Address(natsAddr),
natsjs.ClusterID(clusterName),
)
require.NoError(t, err)
if err != nil {
return
}
consumer := func(_ context.Context, t *testing.T, client events.Stream, cancel context.CancelFunc) {
t.Helper()
defer cancel()
foobarEvents, err := client.Consume(topic)
require.Nil(t, err)
if err != nil {
return
}
// wait for the event
event := <-foobarEvents
p := Payload{}
err = json.Unmarshal(event.Payload, &p)
require.NoError(t, err)
if err != nil {
return
}
assert.Equal(t, demoPayload.ID, p.ID)
assert.Equal(t, demoPayload.Name, p.Name)
}
go consumer(ctx, t, consumerClient, cancel)
// publisher
time.Sleep(1 * time.Second)
publisherClient, err := natsjs.NewStream(
natsjs.Address(natsAddr),
natsjs.ClusterID(clusterName),
)
require.NoError(t, err)
if err != nil {
return
}
publisher := func(_ context.Context, t *testing.T, client events.Stream) {
t.Helper()
err := client.Publish(topic, demoPayload)
require.NoError(t, err)
}
go publisher(ctx, t, publisherClient)
// wait until consumer received the event
<-ctx.Done()
}