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 }