Skip to content

Commit 8ade8ef

Browse files
authored
Add custom exchange type and headers (#33)
Signed-off-by: Gabriele Santomaggio <[email protected]>
1 parent db3f233 commit 8ade8ef

File tree

2 files changed

+76
-3
lines changed

2 files changed

+76
-3
lines changed

pkg/rabbitmqamqp/amqp_exchange_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,33 @@ var _ = Describe("AMQP Exchange test ", func() {
5757
Expect(err).To(BeNil())
5858
})
5959

60+
It("AMQP Exchange Declare with Custom Exchange and Delete should succeed", func() {
61+
var exchangeName = generateName("AMQP Exchange Declare with Custom Exchange and Delete should succeed")
62+
63+
exchangeInfo, err := management.DeclareExchange(context.TODO(), &CustomExchangeSpecification{
64+
Name: exchangeName,
65+
ExchangeTypeName: "x-local-random",
66+
})
67+
Expect(err).To(BeNil())
68+
Expect(exchangeInfo).NotTo(BeNil())
69+
Expect(exchangeInfo.Name()).To(Equal(exchangeName))
70+
err = management.DeleteExchange(context.TODO(), exchangeName)
71+
Expect(err).To(BeNil())
72+
})
73+
74+
It("AMQP Exchange Declare with Headers Exchange and Delete should succeed", func() {
75+
var exchangeName = generateName("AMQP Exchange Declare with Headers Exchange and Delete should succeed")
76+
77+
exchangeInfo, err := management.DeclareExchange(context.TODO(), &HeadersExchangeSpecification{
78+
Name: exchangeName,
79+
})
80+
Expect(err).To(BeNil())
81+
Expect(exchangeInfo).NotTo(BeNil())
82+
Expect(exchangeInfo.Name()).To(Equal(exchangeName))
83+
err = management.DeleteExchange(context.TODO(), exchangeName)
84+
Expect(err).To(BeNil())
85+
})
86+
6087
It("AMQP Exchange should fail when specification is nil", func() {
6188
_, err := management.DeclareExchange(context.TODO(), nil)
6289
Expect(err).NotTo(BeNil())

pkg/rabbitmqamqp/entities.go

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -330,9 +330,10 @@ func (s *StreamQueueSpecification) buildArguments() map[string]any {
330330
type TExchangeType string
331331

332332
const (
333-
Direct TExchangeType = "direct"
334-
Topic TExchangeType = "topic"
335-
FanOut TExchangeType = "fanout"
333+
Direct TExchangeType = "direct"
334+
Topic TExchangeType = "topic"
335+
FanOut TExchangeType = "fanout"
336+
Headers TExchangeType = "headers"
336337
)
337338

338339
type ExchangeType struct {
@@ -414,6 +415,51 @@ func (f *FanOutExchangeSpecification) buildArguments() map[string]any {
414415
return map[string]any{}
415416
}
416417

418+
type HeadersExchangeSpecification struct {
419+
Name string
420+
IsAutoDelete bool
421+
}
422+
423+
func (h *HeadersExchangeSpecification) name() string {
424+
return h.Name
425+
}
426+
427+
func (h *HeadersExchangeSpecification) isAutoDelete() bool {
428+
return h.IsAutoDelete
429+
}
430+
431+
func (h *HeadersExchangeSpecification) exchangeType() ExchangeType {
432+
return ExchangeType{Type: Headers}
433+
}
434+
435+
func (h *HeadersExchangeSpecification) buildArguments() map[string]any {
436+
return map[string]any{}
437+
}
438+
439+
type CustomExchangeSpecification struct {
440+
Name string
441+
IsAutoDelete bool
442+
ExchangeTypeName string
443+
}
444+
445+
func (c *CustomExchangeSpecification) name() string {
446+
return c.Name
447+
}
448+
449+
func (c *CustomExchangeSpecification) isAutoDelete() bool {
450+
return c.IsAutoDelete
451+
}
452+
453+
func (c *CustomExchangeSpecification) exchangeType() ExchangeType {
454+
return ExchangeType{Type: TExchangeType(c.ExchangeTypeName)}
455+
}
456+
457+
func (c *CustomExchangeSpecification) buildArguments() map[string]any {
458+
return map[string]any{}
459+
}
460+
461+
// / **** Binding ****
462+
417463
type BindingSpecification interface {
418464
sourceExchange() string
419465
destination() string

0 commit comments

Comments
 (0)