github.com/Jeffail/benthos/v3@v3.65.0/internal/impl/nats/integration_test.go (about) 1 package nats 2 3 import ( 4 "context" 5 "fmt" 6 "testing" 7 "time" 8 9 "github.com/Jeffail/benthos/v3/internal/integration" 10 "github.com/nats-io/nats.go" 11 "github.com/ory/dockertest/v3" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestIntegrationNats(t *testing.T) { 17 integration.CheckSkip(t) 18 t.Parallel() 19 20 pool, err := dockertest.NewPool("") 21 require.NoError(t, err) 22 23 pool.MaxWait = time.Second * 30 24 resource, err := pool.RunWithOptions(&dockertest.RunOptions{ 25 Repository: "nats", 26 Tag: "latest", 27 Cmd: []string{"--js"}, 28 }) 29 require.NoError(t, err) 30 t.Cleanup(func() { 31 assert.NoError(t, pool.Purge(resource)) 32 }) 33 34 var natsConn *nats.Conn 35 resource.Expire(900) 36 require.NoError(t, pool.Retry(func() error { 37 natsConn, err = nats.Connect(fmt.Sprintf("tcp://localhost:%v", resource.GetPort("4222/tcp"))) 38 return err 39 })) 40 t.Cleanup(func() { 41 natsConn.Close() 42 }) 43 44 template := ` 45 output: 46 nats_jetstream: 47 urls: [ nats://localhost:$PORT ] 48 subject: subject-$ID 49 50 input: 51 nats_jetstream: 52 urls: [ nats://localhost:$PORT ] 53 subject: subject-$ID 54 durable: durable-$ID 55 ` 56 suite := integration.StreamTests( 57 integration.StreamTestOpenClose(), 58 // integration.StreamTestMetadata(), TODO 59 integration.StreamTestSendBatch(10), 60 integration.StreamTestAtLeastOnceDelivery(), // TODO: SubscribeSync doesn't seem to honor durable setting 61 integration.StreamTestStreamParallel(1000), 62 integration.StreamTestStreamSequential(1000), 63 integration.StreamTestStreamParallelLossy(1000), 64 integration.StreamTestStreamParallelLossyThroughReconnect(1000), 65 ) 66 suite.Run( 67 t, template, 68 integration.StreamTestOptPreTest(func(t testing.TB, ctx context.Context, testID string, vars *integration.StreamTestConfigVars) { 69 js, err := natsConn.JetStream() 70 require.NoError(t, err) 71 72 streamName := "stream-" + testID 73 74 _, err = js.AddStream(&nats.StreamConfig{ 75 Name: streamName, 76 Subjects: []string{"subject-" + testID}, 77 }) 78 require.NoError(t, err) 79 }), 80 integration.StreamTestOptSleepAfterInput(100*time.Millisecond), 81 integration.StreamTestOptSleepAfterOutput(100*time.Millisecond), 82 integration.StreamTestOptPort(resource.GetPort("4222/tcp")), 83 ) 84 }