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  }