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  }