mirror of
https://github.com/sablierapp/sablier.git
synced 2025-12-21 13:23:03 +01:00
refactor(storage): add store.Store interface
There is a first implementation with ValKey that will allow to use redis APIs as a backend for Sablier with Hight Availability
This commit is contained in:
@@ -96,15 +96,10 @@ func sessionStateToRenderOptionsInstanceState(sessionState *sessions.SessionStat
|
||||
log.Warnf("sessionStateToRenderOptionsInstanceState: sessionState is nil")
|
||||
return
|
||||
}
|
||||
sessionState.Instances.Range(func(key, value any) bool {
|
||||
if value != nil {
|
||||
instances = append(instances, instanceStateToRenderOptionsRequestState(value.(sessions.InstanceState).Instance))
|
||||
} else {
|
||||
log.Warnf("sessionStateToRenderOptionsInstanceState: sessionState instance is nil, key: %v", key)
|
||||
}
|
||||
|
||||
return true
|
||||
})
|
||||
for _, v := range sessionState.Instances {
|
||||
instances = append(instances, instanceStateToRenderOptionsRequestState(v.Instance))
|
||||
}
|
||||
|
||||
sort.SliceStable(instances, func(i, j int) bool {
|
||||
return strings.Compare(instances[i].Name, instances[j].Name) == -1
|
||||
|
||||
@@ -2,6 +2,7 @@ package api
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/sablierapp/sablier/app/instance"
|
||||
"github.com/sablierapp/sablier/app/sessions"
|
||||
"github.com/tniswong/go.rfcx/rfc7807"
|
||||
"go.uber.org/mock/gomock"
|
||||
@@ -10,6 +11,23 @@ import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func session() *sessions.SessionState {
|
||||
state := instance.ReadyInstanceState("test", 1)
|
||||
state2 := instance.ReadyInstanceState("test2", 1)
|
||||
return &sessions.SessionState{
|
||||
Instances: map[string]sessions.InstanceState{
|
||||
"test": {
|
||||
Instance: &state,
|
||||
Error: nil,
|
||||
},
|
||||
"test2": {
|
||||
Instance: &state2,
|
||||
Error: nil,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func TestStartDynamic(t *testing.T) {
|
||||
t.Run("StartDynamicInvalidBind", func(t *testing.T) {
|
||||
app, router, strategy, _ := NewApiTest(t)
|
||||
@@ -35,7 +53,7 @@ func TestStartDynamic(t *testing.T) {
|
||||
t.Run("StartDynamicThemeNotFound", func(t *testing.T) {
|
||||
app, router, strategy, m := NewApiTest(t)
|
||||
StartDynamic(router, strategy)
|
||||
m.EXPECT().RequestSessionGroup("test", gomock.Any()).Return(&sessions.SessionState{}, nil)
|
||||
m.EXPECT().RequestSessionGroup("test", gomock.Any()).Return(session(), nil)
|
||||
r := PerformRequest(app, "GET", "/api/strategies/dynamic?group=test&theme=invalid")
|
||||
assert.Equal(t, http.StatusNotFound, r.Code)
|
||||
assert.Equal(t, rfc7807.JSONMediaType, r.Header().Get("Content-Type"))
|
||||
@@ -43,7 +61,7 @@ func TestStartDynamic(t *testing.T) {
|
||||
t.Run("StartDynamicByNames", func(t *testing.T) {
|
||||
app, router, strategy, m := NewApiTest(t)
|
||||
StartDynamic(router, strategy)
|
||||
m.EXPECT().RequestSession([]string{"test"}, gomock.Any()).Return(&sessions.SessionState{}, nil)
|
||||
m.EXPECT().RequestSession([]string{"test"}, gomock.Any()).Return(session(), nil)
|
||||
r := PerformRequest(app, "GET", "/api/strategies/dynamic?names=test")
|
||||
assert.Equal(t, http.StatusOK, r.Code)
|
||||
assert.Equal(t, SablierStatusReady, r.Header().Get(SablierStatusHeader))
|
||||
@@ -51,7 +69,7 @@ func TestStartDynamic(t *testing.T) {
|
||||
t.Run("StartDynamicByGroup", func(t *testing.T) {
|
||||
app, router, strategy, m := NewApiTest(t)
|
||||
StartDynamic(router, strategy)
|
||||
m.EXPECT().RequestSessionGroup("test", gomock.Any()).Return(&sessions.SessionState{}, nil)
|
||||
m.EXPECT().RequestSessionGroup("test", gomock.Any()).Return(session(), nil)
|
||||
r := PerformRequest(app, "GET", "/api/strategies/dynamic?group=test")
|
||||
assert.Equal(t, http.StatusOK, r.Code)
|
||||
assert.Equal(t, SablierStatusReady, r.Header().Get(SablierStatusHeader))
|
||||
|
||||
Reference in New Issue
Block a user