github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/publisher/rabbitmq/main_test.go (about)

     1  package rabbitmq
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/angryronald/go-kit/test/docker/rabbitmq"
    10  	_ "github.com/lib/pq"
    11  	amqp "github.com/rabbitmq/amqp091-go"
    12  	"github.com/sirupsen/logrus"
    13  )
    14  
    15  var rabbitmqClientConsumer *amqp.Connection
    16  var rabbitmqClientPublisher *amqp.Connection
    17  var topicName string = "CONTOH.TOPIC"
    18  
    19  // Using docker command
    20  func TestMain(m *testing.M) {
    21  	var err error
    22  
    23  	port := rabbitmq.StartRabbitMQ()
    24  
    25  	// port := "5672"
    26  	time.Sleep(10 * time.Second)
    27  
    28  	if rabbitmqClientPublisher, err = amqp.Dial(fmt.Sprintf(
    29  		"amqp://user:password@localhost:%s/",
    30  		port,
    31  	)); err != nil {
    32  		logrus.Fatalf("Could not connect to RabbitMQ: %s", err)
    33  	}
    34  
    35  	if rabbitmqClientConsumer, err = amqp.Dial(fmt.Sprintf(
    36  		"amqp://user:password@localhost:%s/",
    37  		port,
    38  	)); err != nil {
    39  		logrus.Fatalf("Could not connect to RabbitMQ: %s", err)
    40  	}
    41  
    42  	chPublisher, err := rabbitmqClientPublisher.Channel()
    43  	if err != nil {
    44  		logrus.Fatalf("Could not open a channel: %s", err)
    45  	}
    46  
    47  	chConsumer, err := rabbitmqClientConsumer.Channel()
    48  	if err != nil {
    49  		logrus.Fatalf("Could not open a channel: %s", err)
    50  	}
    51  
    52  	err = chConsumer.ExchangeDeclare(
    53  		topicName,
    54  		"fanout",
    55  		true,  // Durable (exchange survives server restarts)
    56  		false, // Auto-deleted (exchange is deleted when no longer in use)
    57  		false, // Internal (used by other exchanges but not clients)
    58  		false, // No-wait (do not wait for a server response)
    59  		nil,   // Arguments (optional)
    60  	)
    61  	if err != nil {
    62  		logrus.Fatalf("Could not declare the queue: %s", err)
    63  	}
    64  
    65  	_, err = chConsumer.QueueDeclare(
    66  		topicName,
    67  		true,  // durable
    68  		false, // delete when unused
    69  		false, // exclusive
    70  		false, // no-wait
    71  		nil,   // arguments
    72  	)
    73  	if err != nil {
    74  		logrus.Fatalf("Could not declare the queue: %s", err)
    75  	}
    76  
    77  	err = chPublisher.ExchangeDeclare(
    78  		topicName,
    79  		"fanout",
    80  		true,  // Durable (exchange survives server restarts)
    81  		false, // Auto-deleted (exchange is deleted when no longer in use)
    82  		false, // Internal (used by other exchanges but not clients)
    83  		false, // No-wait (do not wait for a server response)
    84  		nil,   // Arguments (optional)
    85  	)
    86  	if err != nil {
    87  		logrus.Fatalf("Could not declare the queue: %s", err)
    88  	}
    89  
    90  	err = chConsumer.QueueBind(
    91  		topicName,
    92  		"event",
    93  		topicName,
    94  		false,
    95  		nil,
    96  	)
    97  	if err != nil {
    98  		logrus.Fatalf("Could not declare the queue: %s", err)
    99  	}
   100  
   101  	code := m.Run() // execute all the tests
   102  
   103  	defer os.Exit(code)
   104  	defer rabbitmq.StopRabbitMQ()
   105  	defer chPublisher.Close()
   106  	defer chConsumer.Close()
   107  }