Files
go-honeybee/honeybeetest/mocks.go
T
Jay b44a46ed2f Migrate logging to go-mana-component; delete logging/ package
Replaces the flat key-value logging scheme with component-based structured
logging via go-mana-component. Each layer (pool, worker, connection) builds
its own component identity and derives a *slog.Logger from a caller-supplied
slog.Handler.

- Delete logging/ package (logging.go, logging_test.go)
- Strip LoggingEnabled and LogLevel from ConnectionConfig, PoolConfig,
 WorkerConfig; remove associated option funcs
- Change NewConnection and NewConnectionFromSocket to accept ctx and
 slog.Handler instead of *slog.Logger; constructors build component
 identity via MustNew/MustExtend internally
- Change WorkerFactory, NewWorker, connect, and RunDialer to carry
 slog.Handler; remove PoolPlugin.Handler
- Change NewPool to establish pool component identity via MustNew;
 remove pool_id field, PoolPlugin.ID, and ErrInvalidPoolID
- Fix data race in MockSlogHandler: WithAttrs now shares parent mutex
 pointer rather than allocating a new one per child
- Run go fix
2026-05-20 13:04:58 -04:00

152 lines
3.6 KiB
Go

package honeybeetest
import (
"context"
"git.wisehodl.dev/jay/go-honeybee/types"
"log/slog"
"net/http"
"sync"
"time"
)
// Re-exported types for consumer convenience
type Socket = types.Socket
type Dialer = types.Dialer
// Dialer Mocks
type MockDialer struct {
DialContextFunc func(
context.Context, string, http.Header,
) (types.Socket, *http.Response, error)
}
func (m *MockDialer) DialContext(
ctx context.Context, url string, h http.Header,
) (types.Socket, *http.Response, error) {
return m.DialContextFunc(ctx, url, h)
}
// Socket Mocks
type MockSocket struct {
WriteMessageFunc func(int, []byte) error
WriteControlFunc func(int, []byte, time.Time) error
SetReadDeadlineFunc func(t time.Time) error
SetWriteDeadlineFunc func(t time.Time) error
ReadMessageFunc func() (int, []byte, error)
CloseFunc func() error
SetCloseHandlerFunc func(func(int, string) error)
SetPongHandlerFunc func(func(string) error)
Closed chan struct{}
Once sync.Once
Mu sync.Mutex
}
func NewMockSocket() *MockSocket {
return &MockSocket{
WriteMessageFunc: func(int, []byte) error { return nil },
WriteControlFunc: func(int, []byte, time.Time) error { return nil },
ReadMessageFunc: func() (int, []byte, error) { return 0, []byte("message"), nil },
CloseFunc: func() error { return nil },
SetReadDeadlineFunc: func(time.Time) error { return nil },
SetWriteDeadlineFunc: func(time.Time) error { return nil },
SetCloseHandlerFunc: func(func(int, string) error) {},
SetPongHandlerFunc: func(func(string) error) {},
Closed: make(chan struct{}),
}
}
func (m *MockSocket) WriteMessage(t int, d []byte) error {
return m.WriteMessageFunc(t, d)
}
func (m *MockSocket) WriteControl(t int, d []byte, dl time.Time) error {
return m.WriteControlFunc(t, d, dl)
}
func (m *MockSocket) ReadMessage() (int, []byte, error) {
return m.ReadMessageFunc()
}
func (m *MockSocket) Close() error {
return m.CloseFunc()
}
func (m *MockSocket) SetReadDeadline(t time.Time) error {
return m.SetReadDeadlineFunc(t)
}
func (m *MockSocket) SetWriteDeadline(t time.Time) error {
return m.SetWriteDeadlineFunc(t)
}
func (m *MockSocket) SetCloseHandler(h func(code int, text string) error) {
m.SetCloseHandlerFunc(h)
}
func (m *MockSocket) SetPongHandler(h func(s string) error) {
m.SetPongHandlerFunc(h)
}
// Logging mocks
type MockSlogHandler struct {
records *[]slog.Record
attrs []slog.Attr
mu *sync.RWMutex
}
func NewMockSlogHandler() *MockSlogHandler {
records := make([]slog.Record, 0)
return &MockSlogHandler{
records: &records,
attrs: make([]slog.Attr, 0),
mu: &sync.RWMutex{},
}
}
func (m *MockSlogHandler) Handle(ctx context.Context, record slog.Record) error {
m.mu.Lock()
defer m.mu.Unlock()
record.AddAttrs(m.attrs...)
*m.records = append(*m.records, record)
return nil
}
func (m *MockSlogHandler) Enabled(ctx context.Context, level slog.Level) bool {
return true
}
func (m *MockSlogHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
m.mu.RLock()
defer m.mu.RUnlock()
return &MockSlogHandler{
records: m.records, // shared records slice
mu: m.mu, // shared mutex
attrs: append(m.attrs, attrs...),
}
}
func (m *MockSlogHandler) WithGroup(name string) slog.Handler {
return m
}
func (m *MockSlogHandler) GetRecords() []slog.Record {
m.mu.RLock()
defer m.mu.RUnlock()
result := make([]slog.Record, len(*m.records))
copy(result, *m.records)
return result
}
func (m *MockSlogHandler) Clear() {
m.mu.Lock()
defer m.mu.Unlock()
*m.records = make([]slog.Record, 0)
}