-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmockbroker.go
45 lines (37 loc) · 1.18 KB
/
mockbroker.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package alice
import (
"github.com/streadway/amqp"
)
// MockBroker implements the Broker interface (mock)
type MockBroker struct {
exchanges map[*Exchange][]*Queue // The exchanges bound to this broker, with their bound queues
Messages map[*Queue]chan amqp.Delivery // The messages sent in a queue
}
// CreateMockBroker creates a new MockBroker (mock)
func CreateMockBroker() Broker {
return &MockBroker{
exchanges: make(map[*Exchange][]*Queue),
Messages: make(map[*Queue]chan amqp.Delivery),
}
}
// CreateConsumer creates a new consumer (mock)
func (b *MockBroker) CreateConsumer(queue *Queue, bindingKey string, consumerTag string) (Consumer, error) {
queue.bindingKey = bindingKey
c := &MockConsumer{
queue: queue,
broker: b,
ReceivedMessages: make([]amqp.Delivery, 0),
}
// Add this queue to this exchange
b.exchanges[queue.exchange] = append(b.exchanges[queue.exchange], queue)
b.Messages[queue] = make(chan amqp.Delivery, 0)
return c, nil
}
// CreateProducer creates a new producer (mock)
func (b *MockBroker) CreateProducer(exchange *Exchange) (Producer, error) {
p := &MockProducer{
exchange: exchange,
broker: b,
}
return p, nil
}