149 lines
3.4 KiB
Go
149 lines
3.4 KiB
Go
package honeybee
|
|
|
|
import (
|
|
"git.wisehodl.dev/jay/go-honeybee/honeybeetest"
|
|
"git.wisehodl.dev/jay/go-honeybee/transport"
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestNewPoolConfig(t *testing.T) {
|
|
conf, err := NewPoolConfig()
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, conf, &PoolConfig{
|
|
InboxBufferSize: 256,
|
|
EventsBufferSize: 10,
|
|
ConnectionConfig: *transport.GetDefaultConnectionConfig(),
|
|
WorkerConfig: *GetDefaultWorkerConfig(),
|
|
WorkerFactory: nil,
|
|
})
|
|
}
|
|
|
|
func TestDefaultPoolConfig(t *testing.T) {
|
|
conf := GetDefaultPoolConfig()
|
|
|
|
assert.Equal(t, conf, &PoolConfig{
|
|
InboxBufferSize: 256,
|
|
EventsBufferSize: 10,
|
|
ConnectionConfig: *transport.GetDefaultConnectionConfig(),
|
|
WorkerConfig: *GetDefaultWorkerConfig(),
|
|
WorkerFactory: nil,
|
|
})
|
|
}
|
|
|
|
func TestApplyPoolOptions(t *testing.T) {
|
|
conf := &PoolConfig{}
|
|
err := applyPoolOptions(
|
|
conf,
|
|
WithConnectionConfig(transport.ConnectionConfig{
|
|
Retry: transport.RetryConfig{Disabled: true},
|
|
}),
|
|
)
|
|
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 0*time.Second, conf.ConnectionConfig.WriteTimeout)
|
|
}
|
|
|
|
func TestWithBufferSizes(t *testing.T) {
|
|
conf := &PoolConfig{}
|
|
|
|
err := applyPoolOptions(conf,
|
|
WithInboxBufferSize(100),
|
|
WithEventsBufferSize(20),
|
|
)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 100, conf.InboxBufferSize)
|
|
assert.Equal(t, 20, conf.EventsBufferSize)
|
|
}
|
|
|
|
func TestWithConnectionConfig(t *testing.T) {
|
|
conf := &PoolConfig{}
|
|
opt := WithConnectionConfig(transport.ConnectionConfig{
|
|
WriteTimeout: 1 * time.Second,
|
|
Retry: transport.RetryConfig{Disabled: true},
|
|
})
|
|
err := applyPoolOptions(conf, opt)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 1*time.Second, conf.ConnectionConfig.WriteTimeout)
|
|
|
|
// invalid config is rejected
|
|
conf = &PoolConfig{}
|
|
opt = WithConnectionConfig(
|
|
transport.ConnectionConfig{
|
|
WriteTimeout: -1 * time.Second,
|
|
Retry: transport.RetryConfig{Disabled: true},
|
|
})
|
|
err = applyPoolOptions(conf, opt)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestValidatePoolConfig(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
conf PoolConfig
|
|
wantErr error
|
|
wantErrText string
|
|
}{
|
|
{
|
|
name: "valid empty (retry disabled)",
|
|
conf: PoolConfig{
|
|
ConnectionConfig: transport.ConnectionConfig{
|
|
Retry: transport.RetryConfig{Disabled: true},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "valid defaults",
|
|
conf: *GetDefaultPoolConfig(),
|
|
},
|
|
{
|
|
name: "valid complete",
|
|
conf: PoolConfig{
|
|
ConnectionConfig: transport.ConnectionConfig{
|
|
Retry: transport.RetryConfig{Disabled: true},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "invalid connection config",
|
|
conf: PoolConfig{
|
|
ConnectionConfig: transport.ConnectionConfig{
|
|
Retry: transport.RetryConfig{
|
|
InitialDelay: 10 * time.Second,
|
|
MaxDelay: 1 * time.Second,
|
|
},
|
|
},
|
|
},
|
|
wantErrText: "initial delay may not exceed maximum delay",
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
err := ValidatePoolConfig(&tc.conf)
|
|
|
|
if tc.wantErr != nil || tc.wantErrText != "" {
|
|
if tc.wantErr != nil {
|
|
assert.ErrorIs(t, err, tc.wantErr)
|
|
}
|
|
|
|
if tc.wantErrText != "" {
|
|
assert.ErrorContains(t, err, tc.wantErrText)
|
|
}
|
|
return
|
|
}
|
|
|
|
assert.NoError(t, err)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestWithPoolDialer(t *testing.T) {
|
|
mock := &honeybeetest.MockDialer{}
|
|
conf, err := NewPoolConfig(WithPoolDialer(mock))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, mock, conf.Dialer)
|
|
}
|