servicebus/servicebus_fake.go (54 lines of code) (raw):
package servicebus
import (
"context"
"errors"
"sync"
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus"
)
// TODO(mheberling): In the future, support for multiple queues of messages might also be required.
type FakeServiceBusClient struct {
messages [][]byte
mu sync.Mutex
}
func NewFakeServiceBusClient() *FakeServiceBusClient {
return &FakeServiceBusClient{
messages: make([][]byte, 0),
}
}
func (f *FakeServiceBusClient) NewServiceBusReceiver(_ context.Context, _ string, _ *azservicebus.ReceiverOptions) (ReceiverInterface, error) {
return &FakeReceiver{
client: f,
}, nil
}
func (f *FakeServiceBusClient) NewServiceBusSender(_ context.Context, _ string, _ *azservicebus.NewSenderOptions) (SenderInterface, error) {
return &FakeSender{
client: f,
}, nil
}
type FakeSender struct {
client *FakeServiceBusClient
}
func (s *FakeSender) SendMessage(_ context.Context, message []byte) error {
s.client.mu.Lock()
defer s.client.mu.Unlock()
// Append message to the slice (acting as a queue).
s.client.messages = append(s.client.messages, message)
return nil
}
func (s *FakeSender) GetAzureSender() (*azservicebus.Sender, error) {
return nil, nil
}
type FakeReceiver struct {
client *FakeServiceBusClient
}
func (r *FakeReceiver) ReceiveMessage(_ context.Context) ([]byte, error) {
r.client.mu.Lock()
defer r.client.mu.Unlock()
if len(r.client.messages) == 0 {
return nil, errors.New("No messages available.")
}
message := r.client.messages[0]
r.client.messages = r.client.messages[1:]
return message, nil
}
func (s *FakeReceiver) GetAzureReceiver() (*azservicebus.Receiver, error) {
return nil, nil
}