2024-09-11 20:42:05 +08:00
|
|
|
package rabbitmq_amqp
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
|
|
|
. "github.com/onsi/gomega"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var _ = Describe("AMQP Bindings test ", func() {
|
2025-01-16 22:26:12 +08:00
|
|
|
var connection *AmqpConnection
|
|
|
|
|
var management *AmqpManagement
|
2024-09-11 20:42:05 +08:00
|
|
|
BeforeEach(func() {
|
2025-01-16 22:26:12 +08:00
|
|
|
conn, err := Dial(context.TODO(), []string{"amqp://"}, nil)
|
2024-09-11 20:42:05 +08:00
|
|
|
Expect(err).To(BeNil())
|
2024-11-21 17:34:08 +08:00
|
|
|
connection = conn
|
2024-09-11 20:42:05 +08:00
|
|
|
management = connection.Management()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
AfterEach(func() {
|
|
|
|
|
Expect(connection.Close(context.Background())).To(BeNil())
|
|
|
|
|
})
|
|
|
|
|
|
2024-09-18 00:59:33 +08:00
|
|
|
It("AMQP Bindings between Exchange and Queue Should succeed", func() {
|
|
|
|
|
const exchangeName = "Exchange_AMQP Bindings between Exchange and Queue should uccess"
|
|
|
|
|
const queueName = "Queue_AMQP Bindings between Exchange and Queue should succeed"
|
2025-01-30 18:29:44 +08:00
|
|
|
exchangeInfo, err := management.DeclareExchange(context.TODO(), &TopicExchangeSpecification{
|
2024-11-15 15:37:28 +08:00
|
|
|
Name: exchangeName,
|
|
|
|
|
})
|
2024-09-11 20:42:05 +08:00
|
|
|
Expect(err).To(BeNil())
|
|
|
|
|
Expect(exchangeInfo).NotTo(BeNil())
|
2024-11-15 15:37:28 +08:00
|
|
|
Expect(exchangeInfo.Name()).To(Equal(exchangeName))
|
2024-09-11 20:42:05 +08:00
|
|
|
|
2025-01-30 18:29:44 +08:00
|
|
|
queueInfo, err := management.DeclareQueue(context.TODO(), &QuorumQueueSpecification{
|
2024-11-15 15:37:28 +08:00
|
|
|
Name: queueName,
|
|
|
|
|
})
|
2024-09-11 20:42:05 +08:00
|
|
|
Expect(err).To(BeNil())
|
|
|
|
|
Expect(queueInfo).NotTo(BeNil())
|
2024-11-15 15:37:28 +08:00
|
|
|
Expect(queueInfo.Name()).To(Equal(queueName))
|
2025-01-30 18:29:44 +08:00
|
|
|
bindingPath, err := management.Bind(context.TODO(), &ExchangeToQueueBindingSpecification{
|
2024-11-15 15:37:28 +08:00
|
|
|
SourceExchange: exchangeName,
|
|
|
|
|
DestinationQueue: queueName,
|
|
|
|
|
BindingKey: "routing-key",
|
|
|
|
|
})
|
2024-09-11 20:42:05 +08:00
|
|
|
Expect(err).To(BeNil())
|
2024-11-15 15:37:28 +08:00
|
|
|
err = management.Unbind(context.TODO(), bindingPath)
|
2024-09-11 20:42:05 +08:00
|
|
|
Expect(err).To(BeNil())
|
2024-11-15 15:37:28 +08:00
|
|
|
err = management.DeleteExchange(context.TODO(), exchangeName)
|
2024-09-11 20:42:05 +08:00
|
|
|
Expect(err).To(BeNil())
|
2024-11-15 15:37:28 +08:00
|
|
|
err = management.DeleteQueue(context.TODO(), queueName)
|
2024-09-11 20:42:05 +08:00
|
|
|
Expect(err).To(BeNil())
|
|
|
|
|
})
|
2025-01-30 18:29:44 +08:00
|
|
|
|
|
|
|
|
It("AMQP Bindings between Exchange and Exchange Should succeed", func() {
|
|
|
|
|
var exchangeName = generateName("Exchange_AMQP Bindings between Exchange and Exchange should succeed")
|
|
|
|
|
var exchangeName2 = generateName("Exchange_AMQP Bindings between Exchange and Exchange should succeed 2")
|
|
|
|
|
exchangeInfo, err := management.DeclareExchange(context.TODO(), &TopicExchangeSpecification{
|
|
|
|
|
Name: exchangeName,
|
|
|
|
|
})
|
|
|
|
|
Expect(err).To(BeNil())
|
|
|
|
|
Expect(exchangeInfo).NotTo(BeNil())
|
|
|
|
|
Expect(exchangeInfo.Name()).To(Equal(exchangeName))
|
|
|
|
|
|
|
|
|
|
exchangeInfo2, err := management.DeclareExchange(context.TODO(), &TopicExchangeSpecification{
|
|
|
|
|
Name: exchangeName2})
|
|
|
|
|
Expect(err).To(BeNil())
|
|
|
|
|
Expect(exchangeInfo2).NotTo(BeNil())
|
|
|
|
|
Expect(exchangeInfo2.Name()).To(Equal(exchangeName2))
|
|
|
|
|
|
|
|
|
|
bindingPath, err := management.Bind(context.TODO(), &ExchangeToExchangeBindingSpecification{
|
|
|
|
|
SourceExchange: exchangeName,
|
|
|
|
|
DestinationExchange: exchangeName2,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
Expect(err).To(BeNil())
|
|
|
|
|
Expect(management.Unbind(context.TODO(), bindingPath)).To(BeNil())
|
|
|
|
|
Expect(management.DeleteExchange(context.TODO(), exchangeName)).To(BeNil())
|
|
|
|
|
Expect(management.DeleteExchange(context.TODO(), exchangeName2)).To(BeNil())
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
It("AMQP Bindings should fail if source or destinations are empty", func() {
|
|
|
|
|
|
|
|
|
|
_, err := management.Bind(context.TODO(), &ExchangeToExchangeBindingSpecification{
|
|
|
|
|
SourceExchange: "",
|
|
|
|
|
DestinationExchange: "destination",
|
|
|
|
|
})
|
|
|
|
|
Expect(err).NotTo(BeNil())
|
|
|
|
|
Expect(err.Error()).To(ContainSubstring("source and destination names are required"))
|
|
|
|
|
|
|
|
|
|
_, err = management.Bind(context.TODO(), &ExchangeToExchangeBindingSpecification{
|
|
|
|
|
SourceExchange: "source",
|
|
|
|
|
DestinationExchange: "",
|
|
|
|
|
})
|
|
|
|
|
Expect(err).NotTo(BeNil())
|
|
|
|
|
Expect(err.Error()).To(ContainSubstring("source and destination names are required"))
|
|
|
|
|
|
|
|
|
|
_, err = management.Bind(context.TODO(), &ExchangeToQueueBindingSpecification{
|
|
|
|
|
SourceExchange: "",
|
|
|
|
|
DestinationQueue: "destination",
|
|
|
|
|
})
|
|
|
|
|
Expect(err).NotTo(BeNil())
|
|
|
|
|
Expect(err.Error()).To(ContainSubstring("source and destination names are required"))
|
|
|
|
|
|
|
|
|
|
_, err = management.Bind(context.TODO(), &ExchangeToQueueBindingSpecification{
|
|
|
|
|
SourceExchange: "source",
|
|
|
|
|
DestinationQueue: "",
|
|
|
|
|
})
|
|
|
|
|
Expect(err).NotTo(BeNil())
|
|
|
|
|
Expect(err.Error()).To(ContainSubstring("source and destination names are required"))
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
It("AMQP Bindings should fail specification is nil", func() {
|
|
|
|
|
_, err := management.Bind(context.TODO(), nil)
|
|
|
|
|
Expect(err).NotTo(BeNil())
|
|
|
|
|
Expect(err.Error()).To(ContainSubstring("binding specification cannot be nil"))
|
|
|
|
|
})
|
2024-09-11 20:42:05 +08:00
|
|
|
})
|