mirror of
https://github.com/hanzo-fi/stack.git
synced 2026-10-30 20:34:43 +00:00
104 lines
1.9 KiB
Go
104 lines
1.9 KiB
Go
package circuitbreaker
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/ThreeDotsLabs/watermill/message"
|
|
"github.com/formancehq/stack/libs/go-libs/publish/circuit_breaker/storage"
|
|
)
|
|
|
|
type payload struct {
|
|
Result int `json:"result"`
|
|
}
|
|
|
|
type testMessages struct {
|
|
topic string
|
|
msg *message.Message
|
|
}
|
|
|
|
type mockPublisher struct {
|
|
err error
|
|
|
|
messages chan *testMessages
|
|
}
|
|
|
|
func newMockPublisher(messages chan *testMessages) *mockPublisher {
|
|
return &mockPublisher{
|
|
messages: messages,
|
|
}
|
|
}
|
|
|
|
func (p *mockPublisher) WithPublishError(err error) *mockPublisher {
|
|
p.err = err
|
|
return p
|
|
}
|
|
|
|
func (p *mockPublisher) Publish(topic string, messages ...*message.Message) error {
|
|
if p.err != nil {
|
|
return p.err
|
|
}
|
|
|
|
for _, msg := range messages {
|
|
p.messages <- &testMessages{
|
|
topic: topic,
|
|
msg: msg,
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (p *mockPublisher) Close() error {
|
|
return nil
|
|
}
|
|
|
|
type MockStore struct {
|
|
insertErr error
|
|
|
|
messagesToSend []*storage.CircuitBreakerModel
|
|
}
|
|
|
|
func newMockStore() *MockStore {
|
|
return &MockStore{
|
|
messagesToSend: make([]*storage.CircuitBreakerModel, 0),
|
|
}
|
|
}
|
|
|
|
func (s *MockStore) WithInsertError(err error) *MockStore {
|
|
s.insertErr = err
|
|
return s
|
|
}
|
|
|
|
func (s *MockStore) Insert(ctx context.Context, topic string, data []byte, metadata map[string]string) error {
|
|
if s.insertErr != nil {
|
|
return s.insertErr
|
|
}
|
|
|
|
s.messagesToSend = append(s.messagesToSend, &storage.CircuitBreakerModel{
|
|
CreatedAt: time.Now().UTC(),
|
|
Topic: topic,
|
|
Data: data,
|
|
Metadata: metadata,
|
|
})
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *MockStore) List(ctx context.Context) ([]*storage.CircuitBreakerModel, error) {
|
|
return s.messagesToSend, nil
|
|
}
|
|
|
|
func (s *MockStore) Delete(ctx context.Context, ids []uint64) error {
|
|
for _, id := range ids {
|
|
for i, msg := range s.messagesToSend {
|
|
if msg.ID == id {
|
|
s.messagesToSend = append(s.messagesToSend[:i], s.messagesToSend[i+1:]...)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|