mirror of
https://github.com/TecharoHQ/anubis.git
synced 2026-04-17 05:44:57 +00:00
feat(store/valkey): add Redis(R) Sentinel support
Signed-off-by: Xe Iaso <me@xeiaso.net>
This commit is contained in:
@@ -2,6 +2,7 @@ package valkey
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
@@ -45,3 +46,86 @@ func TestImpl(t *testing.T) {
|
||||
|
||||
storetest.Common(t, Factory{}, json.RawMessage(data))
|
||||
}
|
||||
|
||||
func TestFactoryValid(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
jsonData string
|
||||
expectError error
|
||||
}{
|
||||
{
|
||||
name: "empty config",
|
||||
jsonData: `{}`,
|
||||
expectError: ErrNoURL,
|
||||
},
|
||||
{
|
||||
name: "valid URL only",
|
||||
jsonData: `{"url": "redis://localhost:6379"}`,
|
||||
expectError: nil,
|
||||
},
|
||||
{
|
||||
name: "invalid URL",
|
||||
jsonData: `{"url": "invalid-url"}`,
|
||||
expectError: ErrBadURL,
|
||||
},
|
||||
{
|
||||
name: "valid sentinel config",
|
||||
jsonData: `{"sentinel": {"masterName": "mymaster", "addr": ["localhost:26379"], "password": "mypass"}}`,
|
||||
expectError: nil,
|
||||
},
|
||||
{
|
||||
name: "sentinel missing masterName",
|
||||
jsonData: `{"sentinel": {"addr": ["localhost:26379"], "password": "mypass"}}`,
|
||||
expectError: ErrSentinelMasterNameRequired,
|
||||
},
|
||||
{
|
||||
name: "sentinel missing addr",
|
||||
jsonData: `{"sentinel": {"masterName": "mymaster", "password": "mypass"}}`,
|
||||
expectError: ErrSentinelAddrRequired,
|
||||
},
|
||||
{
|
||||
name: "sentinel empty addr",
|
||||
jsonData: `{"sentinel": {"masterName": "mymaster", "addr": [""], "password": "mypass"}}`,
|
||||
expectError: ErrSentinelAddrEmpty,
|
||||
},
|
||||
{
|
||||
name: "sentinel missing password",
|
||||
jsonData: `{"sentinel": {"masterName": "mymaster", "addr": ["localhost:26379"]}}`,
|
||||
expectError: ErrSentinelPasswordRequired,
|
||||
},
|
||||
{
|
||||
name: "sentinel with optional fields",
|
||||
jsonData: `{"sentinel": {"masterName": "mymaster", "addr": ["localhost:26379"], "password": "mypass", "clientName": "myclient", "username": "myuser"}}`,
|
||||
expectError: nil,
|
||||
},
|
||||
{
|
||||
name: "sentinel single address (not array)",
|
||||
jsonData: `{"sentinel": {"masterName": "mymaster", "addr": "localhost:26379", "password": "mypass"}}`,
|
||||
expectError: nil,
|
||||
},
|
||||
{
|
||||
name: "sentinel mixed empty and valid addresses",
|
||||
jsonData: `{"sentinel": {"masterName": "mymaster", "addr": ["", "localhost:26379", ""], "password": "mypass"}}`,
|
||||
expectError: nil,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
factory := Factory{}
|
||||
err := factory.Valid(json.RawMessage(tt.jsonData))
|
||||
|
||||
if tt.expectError == nil {
|
||||
if err != nil {
|
||||
t.Errorf("expected no error, got: %v", err)
|
||||
}
|
||||
} else {
|
||||
if err == nil {
|
||||
t.Errorf("expected error %v, got nil", tt.expectError)
|
||||
} else if !errors.Is(err, tt.expectError) {
|
||||
t.Errorf("expected error %v, got: %v", tt.expectError, err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user