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 }