github.com/Goboolean/common@v0.0.0-20231130153141-cb54596b217d/pkg/kafka/producer_test.go (about) 1 package kafka_test 2 3 import ( 4 "context" 5 "os" 6 "testing" 7 "time" 8 9 model_latest "github.com/Goboolean/common/api/kafka/model.latest" 10 "github.com/Goboolean/common/pkg/kafka" 11 "github.com/Goboolean/common/pkg/resolver" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func SetupProducer() *kafka.Producer { 16 p, err := kafka.NewProducer(&resolver.ConfigMap{ 17 "BOOTSTRAP_HOST": os.Getenv("KAFKA_BOOTSTRAP_HOST"), 18 }) 19 if err != nil { 20 panic(err) 21 } 22 return p 23 } 24 25 func SetupProducerWithRegistry() *kafka.Producer { 26 p, err := kafka.NewProducer(&resolver.ConfigMap{ 27 "BOOTSTRAP_HOST": os.Getenv("KAFKA_BOOTSTRAP_HOST"), 28 "REGISTRY_HOST": os.Getenv("KAFKA_REGISTRY_HOST"), 29 }) 30 if err != nil { 31 panic(err) 32 } 33 return p 34 } 35 36 func TeardownProducer(p *kafka.Producer) { 37 mutex.Lock() 38 defer mutex.Unlock() 39 p.Close() 40 } 41 42 func Test_Producer(t *testing.T) { 43 44 p := SetupProducer() 45 defer TeardownProducer(p) 46 47 const topic = "test-producer" 48 var event = &model_latest.Event{ 49 EventUuid: "test-uuid", 50 } 51 52 t.Run("Ping", func(t *testing.T) { 53 ctx, cancel := context.WithTimeout(context.Background(), time.Second) 54 defer cancel() 55 56 err := p.Ping(ctx) 57 assert.NoError(t, err) 58 }) 59 60 t.Run("Register", func(t *testing.T) { 61 _, err := p.Register(topic, &model_latest.Event{}) 62 assert.NoError(t, err) 63 }) 64 65 t.Run("ProduceMessage", func(t *testing.T) { 66 err := p.Produce(topic, event) 67 assert.NoError(t, err) 68 }) 69 70 t.Run("Flush", func(t *testing.T) { 71 ctx, cancel := context.WithTimeout(context.Background(), time.Second) 72 defer cancel() 73 74 count, err := p.Flush(ctx) 75 assert.NoError(t, err) 76 assert.Equal(t, 0, count) 77 }) 78 } 79 80 func Test_ProducerWithRegistry(t *testing.T) { 81 t.Skip("Skip this test because of the registry is not ready.") 82 83 p := SetupProducerWithRegistry() 84 defer TeardownProducer(p) 85 86 const topic = "test-producer-with-registry" 87 var event = &model_latest.Event{ 88 EventUuid: "test-uuid", 89 } 90 91 t.Run("Ping", func(t *testing.T) { 92 ctx, cancel := context.WithTimeout(context.Background(), time.Second) 93 defer cancel() 94 95 err := p.Ping(ctx) 96 assert.NoError(t, err) 97 }) 98 99 t.Run("Register", func(t *testing.T) { 100 _, err := p.Register(topic, &model_latest.Event{}) 101 assert.NoError(t, err) 102 }) 103 104 t.Run("ProduceMessage", func(t *testing.T) { 105 err := p.Produce(topic, event) 106 assert.NoError(t, err) 107 }) 108 109 t.Run("Flush", func(t *testing.T) { 110 ctx, cancel := context.WithTimeout(context.Background(), time.Second) 111 defer cancel() 112 113 count, err := p.Flush(ctx) 114 assert.NoError(t, err) 115 assert.Equal(t, 0, count) 116 }) 117 }