github.com/etecs-ru/gnomock@v0.13.2/preset/kafka/readme.md (about)

     1  # Gnomock Kafka
     2  
     3  Gnomock Kafka is a [Gnomock](https://github.com/orlangure/gnomock) preset for running tests against a real Kafka event
     4  streaming platform, without mocks.
     5  
     6  ```go
     7  package kafka_test
     8  
     9  import (
    10  	"context"
    11  	"os"
    12  	"testing"
    13  	"time"
    14  
    15  	"github.com/orlangure/gnomock"
    16  	"github.com/orlangure/gnomock/preset/kafka"
    17  	kafkaclient "github.com/segmentio/kafka-go"
    18  	"github.com/stretchr/testify/require"
    19  )
    20  
    21  // nolint:funlen
    22  func TestPreset(t *testing.T) {
    23  	t.Parallel()
    24  
    25  	messages := []kafka.Message{
    26  		{
    27  			Topic: "events",
    28  			Key:   "order",
    29  			Value: "1",
    30  			Time:  time.Now().UnixNano(),
    31  		},
    32  		{
    33  			Topic: "alerts",
    34  			Key:   "CPU",
    35  			Value: "92",
    36  			Time:  time.Now().UnixNano(),
    37  		},
    38  	}
    39  
    40  	p := kafka.Preset(
    41  		kafka.WithTopics("topic-1", "topic-2"),
    42  		kafka.WithMessages(messages...),
    43  	)
    44  
    45  	container, err := gnomock.Start(
    46  		p,
    47  		gnomock.WithDebugMode(), gnomock.WithLogWriter(os.Stdout),
    48  		gnomock.WithContainerName("kafka"),
    49  	)
    50  	require.NoError(t, err)
    51  
    52  	defer func() { require.NoError(t, gnomock.Stop(container)) }()
    53  
    54  	ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
    55  	defer cancel()
    56  
    57  	alertsReader := kafkaclient.NewReader(kafkaclient.ReaderConfig{
    58  		Brokers: []string{container.Address(kafka.BrokerPort)},
    59  		Topic:   "alerts",
    60  	})
    61  
    62  	m, err := alertsReader.ReadMessage(ctx)
    63  	require.NoError(t, err)
    64  	require.NoError(t, alertsReader.Close())
    65  
    66  	require.Equal(t, "CPU", string(m.Key))
    67  	require.Equal(t, "92", string(m.Value))
    68  
    69  	eventsReader := kafkaclient.NewReader(kafkaclient.ReaderConfig{
    70  		Brokers: []string{container.Address(kafka.BrokerPort)},
    71  		Topic:   "events",
    72  	})
    73  
    74  	m, err = eventsReader.ReadMessage(ctx)
    75  	require.NoError(t, err)
    76  	require.NoError(t, eventsReader.Close())
    77  
    78  	require.Equal(t, "order", string(m.Key))
    79  	require.Equal(t, "1", string(m.Value))
    80  
    81  	c, err := kafkaclient.Dial("tcp", container.Address(kafka.BrokerPort))
    82  	require.NoError(t, err)
    83  
    84  	require.NoError(t, c.DeleteTopics("topic-1", "topic-2"))
    85  	require.Error(t, c.DeleteTopics("unknown-topic"))
    86  
    87  	require.NoError(t, c.Close())
    88  }
    89  ```