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

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