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 ```