Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ require (
github.com/gin-gonic/gin v1.10.1
github.com/google/uuid v1.3.0
github.com/splitio/gincache v1.0.1
github.com/splitio/go-split-commons/v8 v8.0.0-20251028203151-2b6d18a2f657
github.com/splitio/go-split-commons/v8 v8.0.0-20251029203719-4fdb9d7a1ff2
github.com/splitio/go-toolkit/v5 v5.4.1
github.com/stretchr/testify v1.11.1
go.etcd.io/bbolt v1.3.6
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUA
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/splitio/gincache v1.0.1 h1:dLYdANY/BqH4KcUMCe/LluLyV5WtuE/LEdQWRE06IXU=
github.com/splitio/gincache v1.0.1/go.mod h1:CcgJDSM9Af75kyBH0724v55URVwMBuSj5x1eCWIOECY=
github.com/splitio/go-split-commons/v8 v8.0.0-20251028203151-2b6d18a2f657 h1:FYT0P+uFnXzALLgWOTIAJS6P4J1NpMGNi+rWsv2ZIkU=
github.com/splitio/go-split-commons/v8 v8.0.0-20251028203151-2b6d18a2f657/go.mod h1:vgRGPn0s4RC9/zp1nIn4KeeIEj/K3iXE2fxYQbCk/WI=
github.com/splitio/go-split-commons/v8 v8.0.0-20251029203719-4fdb9d7a1ff2 h1:M2+G0qWJhi5UC4yfQ8MePtDMmfCPlMXbL7+oJPKjGL8=
github.com/splitio/go-split-commons/v8 v8.0.0-20251029203719-4fdb9d7a1ff2/go.mod h1:vgRGPn0s4RC9/zp1nIn4KeeIEj/K3iXE2fxYQbCk/WI=
github.com/splitio/go-toolkit/v5 v5.4.1 h1:srTyvDBJZMUcJ/KiiQDMyjCuELVgTBh2TGRVn0sOXEE=
github.com/splitio/go-toolkit/v5 v5.4.1/go.mod h1:SifzysrOVDbzMcOE8zjX02+FG5az4FrR3Us/i5SeStw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
Expand Down
2 changes: 1 addition & 1 deletion splitio/commitversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ This file is created automatically, please do not edit
*/

// CommitVersion is the version of the last commit previous to release
const CommitVersion = "1807589"
const CommitVersion = "f8ab000"
12 changes: 12 additions & 0 deletions splitio/proxy/caching/workers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"github.com/splitio/split-synchronizer/v5/splitio/proxy/caching/mocks"

"github.com/splitio/go-split-commons/v8/dtos"
commons "github.com/splitio/go-split-commons/v8/storage/mocks"
"github.com/splitio/go-split-commons/v8/synchronizer/worker/segment"
"github.com/splitio/go-split-commons/v8/synchronizer/worker/split"
"github.com/splitio/go-toolkit/v5/datastructures/set"
Expand All @@ -19,9 +20,12 @@ func TestCacheAwareSplitSyncNoChanges(t *testing.T) {
var cacheFlusherMock mocks.CacheFlusherMock
var storageMock mocks.SplitStorageMock
storageMock.On("ChangeNumber").Return(int64(-1), error(nil))
var rbsStorage commons.MockRuleBasedSegmentStorage
rbsStorage.On("ChangeNumber").Return(int64(-1), error(nil))

css := CacheAwareSplitSynchronizer{
splitStorage: &storageMock,
rbStorage: &rbsStorage,
wrapped: &splitSyncMock,
cacheFlusher: &cacheFlusherMock,
}
Expand All @@ -39,6 +43,9 @@ func TestCacheAwareSplitSyncChanges(t *testing.T) {
var splitSyncMock mocks.SplitUpdaterMock
splitSyncMock.On("SynchronizeSplits", (*int64)(nil)).Return((*split.UpdateResult)(nil), error(nil)).Times(2)

var rbsStorage commons.MockRuleBasedSegmentStorage
rbsStorage.On("ChangeNumber").Return(int64(-1), error(nil))

var cacheFlusherMock mocks.CacheFlusherMock
cacheFlusherMock.On("EvictBySurrogate", SplitSurrogate).Times(3)

Expand All @@ -49,6 +56,7 @@ func TestCacheAwareSplitSyncChanges(t *testing.T) {
css := CacheAwareSplitSynchronizer{
splitStorage: &storageMock,
wrapped: &splitSyncMock,
rbStorage: &rbsStorage,
cacheFlusher: &cacheFlusherMock,
}

Expand Down Expand Up @@ -78,6 +86,9 @@ func TestCacheAwareSplitSyncChangesNewMethod(t *testing.T) {
var splitSyncMock mocks.SplitUpdaterMock
splitSyncMock.On("SynchronizeFeatureFlags", (*dtos.SplitChangeUpdate)(nil)).Return((*split.UpdateResult)(nil), error(nil)).Times(2)

var rbsStorage commons.MockRuleBasedSegmentStorage
rbsStorage.On("ChangeNumber").Return(int64(-1), error(nil))

var cacheFlusherMock mocks.CacheFlusherMock
cacheFlusherMock.On("EvictBySurrogate", SplitSurrogate).Times(2)

Expand All @@ -87,6 +98,7 @@ func TestCacheAwareSplitSyncChangesNewMethod(t *testing.T) {

css := CacheAwareSplitSynchronizer{
splitStorage: &storageMock,
rbStorage: &rbsStorage,
wrapped: &splitSyncMock,
cacheFlusher: &cacheFlusherMock,
}
Expand Down
68 changes: 52 additions & 16 deletions splitio/proxy/controllers/sdk_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ func TestSplitChangesImpressionsDisabled(t *testing.T) {
splitStorage.On("ChangesSince", int64(-1), []string(nil)).
Return(&dtos.SplitChangesDTO{Since: -1, Till: 1, Splits: []dtos.SplitDTO{{Name: "s1", Status: "ACTIVE", ImpressionsDisabled: true}, {Name: "s2", Status: "ACTIVE"}}}, nil).
Once()
var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

splitFetcher := &mocks.MockSplitFetcher{}
var largeSegmentStorageMock largeSegmentStorageMock
Expand All @@ -48,7 +50,7 @@ func TestSplitChangesImpressionsDisabled(t *testing.T) {
splitFetcher,
&splitStorage,
nil,
nil,
&rbsStorage,
flagsets.NewMatcher(false, nil),
&largeSegmentStorageMock,
specs.FLAG_V1_2,
Expand Down Expand Up @@ -88,6 +90,9 @@ func TestSplitChangesRecentSince(t *testing.T) {
Return(&dtos.SplitChangesDTO{Since: -1, Till: 1, Splits: []dtos.SplitDTO{{Name: "s1", Status: "ACTIVE"}, {Name: "s2", Status: "ACTIVE"}}}, nil).
Once()

var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

splitFetcher := &mocks.MockSplitFetcher{}
var largeSegmentStorageMock largeSegmentStorageMock

Expand All @@ -100,7 +105,7 @@ func TestSplitChangesRecentSince(t *testing.T) {
splitFetcher,
&splitStorage,
nil,
nil,
&rbsStorage,
flagsets.NewMatcher(false, nil),
&largeSegmentStorageMock,
specs.FLAG_V1_2,
Expand Down Expand Up @@ -137,9 +142,11 @@ func TestSplitChangesOlderSince(t *testing.T) {
splitStorage.On("ChangesSince", int64(-1), []string(nil)).
Return((*dtos.SplitChangesDTO)(nil), storage.ErrSinceParamTooOld).
Once()
var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

splitFetcher := &mocks.MockSplitFetcher{}
splitFetcher.On("Fetch", ref(*service.MakeFlagRequestParams().WithChangeNumber(-1).WithSpecVersion(common.StringRef(specs.FLAG_V1_2)))).Return(
splitFetcher.On("Fetch", ref(*service.MakeFlagRequestParams().WithChangeNumber(-1).WithChangeNumberRB(-1).WithSpecVersion(common.StringRef(specs.FLAG_V1_2)))).Return(
&dtos.FFResponseLegacy{
SplitChanges: dtos.SplitChangesDTO{
Since: -1, Till: 1, Splits: []dtos.SplitDTO{{Name: "s1", Status: "ACTIVE"}, {Name: "s2", Status: "ACTIVE"}},
Expand All @@ -159,7 +166,7 @@ func TestSplitChangesOlderSince(t *testing.T) {
splitFetcher,
&splitStorage,
nil,
nil,
&rbsStorage,
flagsets.NewMatcher(false, nil),
&largeSegmentStorageMock,
specs.FLAG_V1_2,
Expand Down Expand Up @@ -197,8 +204,11 @@ func TestSplitChangesOlderSinceFetchFails(t *testing.T) {
Return((*dtos.SplitChangesDTO)(nil), storage.ErrSinceParamTooOld).
Once()

var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

splitFetcher := &mocks.MockSplitFetcher{}
splitFetcher.On("Fetch", ref(*service.MakeFlagRequestParams().WithChangeNumber(-1).WithSpecVersion(common.StringRef(specs.FLAG_V1_2)))).
splitFetcher.On("Fetch", ref(*service.MakeFlagRequestParams().WithChangeNumber(-1).WithChangeNumberRB(-1).WithSpecVersion(common.StringRef(specs.FLAG_V1_2)))).
Return(nil, errors.New("something")).
Once()

Expand All @@ -215,7 +225,7 @@ func TestSplitChangesOlderSinceFetchFails(t *testing.T) {
splitFetcher,
&splitStorage,
nil,
nil,
&rbsStorage,
flagsets.NewMatcher(false, nil),
&largeSegmentStorageMock,
specs.FLAG_V1_2,
Expand Down Expand Up @@ -243,6 +253,9 @@ func TestSplitChangesWithFlagSets(t *testing.T) {
Return(&dtos.SplitChangesDTO{Since: -1, Till: 1, Splits: []dtos.SplitDTO{{Name: "s1", Status: "ACTIVE"}, {Name: "s2", Status: "ACTIVE"}}}, nil).
Once()

var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

splitFetcher := &mocks.MockSplitFetcher{}
var largeSegmentStorageMock largeSegmentStorageMock

Expand All @@ -257,7 +270,7 @@ func TestSplitChangesWithFlagSets(t *testing.T) {
splitFetcher,
&splitStorage,
nil,
nil,
&rbsStorage,
flagsets.NewMatcher(false, nil),
&largeSegmentStorageMock,
specs.FLAG_V1_2,
Expand Down Expand Up @@ -294,6 +307,9 @@ func TestSplitChangesWithFlagSetsStrict(t *testing.T) {
Return(&dtos.SplitChangesDTO{Since: -1, Till: 1, Splits: []dtos.SplitDTO{{Name: "s1", Status: "ACTIVE"}, {Name: "s2", Status: "ACTIVE"}}}, nil).
Once()

var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

splitFetcher := &mocks.MockSplitFetcher{}
var largeSegmentStorageMock largeSegmentStorageMock

Expand All @@ -308,7 +324,7 @@ func TestSplitChangesWithFlagSetsStrict(t *testing.T) {
splitFetcher,
&splitStorage,
nil,
nil,
&rbsStorage,
flagsets.NewMatcher(true, []string{"a", "c"}),
&largeSegmentStorageMock,
specs.FLAG_V1_2,
Expand Down Expand Up @@ -365,6 +381,9 @@ func TestSplitChangesNewMatcherOldSpec(t *testing.T) {
}, nil).
Once()

var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

splitFetcher := &mocks.MockSplitFetcher{}
var largeSegmentStorageMock largeSegmentStorageMock

Expand All @@ -377,7 +396,7 @@ func TestSplitChangesNewMatcherOldSpec(t *testing.T) {
splitFetcher,
&splitStorage,
nil,
nil,
&rbsStorage,
flagsets.NewMatcher(false, nil),
&largeSegmentStorageMock,
specs.FLAG_V1_2,
Expand Down Expand Up @@ -436,6 +455,8 @@ func TestSplitChangesNewMatcherNewSpec(t *testing.T) {
},
}, nil).
Once()
var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

splitFetcher := &mocks.MockSplitFetcher{}
var largeSegmentStorageMock largeSegmentStorageMock
Expand All @@ -449,7 +470,7 @@ func TestSplitChangesNewMatcherNewSpec(t *testing.T) {
splitFetcher,
&splitStorage,
nil,
nil,
&rbsStorage,
flagsets.NewMatcher(false, nil),
&largeSegmentStorageMock,
specs.FLAG_V1_2,
Expand Down Expand Up @@ -497,6 +518,9 @@ func TestSegmentChanges(t *testing.T) {
Return(&dtos.SegmentChangesDTO{Name: "someSegment", Added: []string{"k1", "k2"}, Removed: []string{}, Since: -1, Till: 1}, nil).
Once()

var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

var largeSegmentStorageMock largeSegmentStorageMock

resp := httptest.NewRecorder()
Expand All @@ -505,7 +529,7 @@ func TestSegmentChanges(t *testing.T) {
logger := logging.NewLogger(nil)

group := router.Group("/api")
controller := NewSdkServerController(logger, splitFetcher, &splitStorage, &segmentStorage, nil, flagsets.NewMatcher(false, nil), &largeSegmentStorageMock, specs.FLAG_V1_2)
controller := NewSdkServerController(logger, splitFetcher, &splitStorage, &segmentStorage, &rbsStorage, flagsets.NewMatcher(false, nil), &largeSegmentStorageMock, specs.FLAG_V1_2)
controller.Register(group)

ctx.Request, _ = http.NewRequest(http.MethodGet, "/api/segmentChanges/someSegment?since=-1", nil)
Expand Down Expand Up @@ -540,6 +564,8 @@ func TestSegmentChangesNotFound(t *testing.T) {
segmentStorage.On("ChangesSince", "someSegment", int64(-1)).
Return((*dtos.SegmentChangesDTO)(nil), storage.ErrSegmentNotFound).
Once()
var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

var largeSegmentStorageMock largeSegmentStorageMock

Expand All @@ -549,7 +575,7 @@ func TestSegmentChangesNotFound(t *testing.T) {
logger := logging.NewLogger(nil)

group := router.Group("/api")
controller := NewSdkServerController(logger, splitFetcher, &splitStorage, &segmentStorage, nil, flagsets.NewMatcher(false, nil), &largeSegmentStorageMock, specs.FLAG_V1_2)
controller := NewSdkServerController(logger, splitFetcher, &splitStorage, &segmentStorage, &rbsStorage, flagsets.NewMatcher(false, nil), &largeSegmentStorageMock, specs.FLAG_V1_2)
controller.Register(group)

ctx.Request, _ = http.NewRequest(http.MethodGet, "/api/segmentChanges/someSegment?since=-1", nil)
Expand All @@ -575,6 +601,9 @@ func TestMySegments(t *testing.T) {
Return([]string{"segment1", "segment2"}, nil).
Once()

var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

var largeSegmentStorageMock largeSegmentStorageMock

resp := httptest.NewRecorder()
Expand All @@ -583,7 +612,7 @@ func TestMySegments(t *testing.T) {
logger := logging.NewLogger(nil)

group := router.Group("/api")
controller := NewSdkServerController(logger, splitFetcher, &splitStorage, &segmentStorage, nil, flagsets.NewMatcher(false, nil), &largeSegmentStorageMock, specs.FLAG_V1_2)
controller := NewSdkServerController(logger, splitFetcher, &splitStorage, &segmentStorage, &rbsStorage, flagsets.NewMatcher(false, nil), &largeSegmentStorageMock, specs.FLAG_V1_2)
controller.Register(group)

ctx.Request, _ = http.NewRequest(http.MethodGet, "/api/mySegments/someKey", nil)
Expand Down Expand Up @@ -618,6 +647,9 @@ func TestMySegmentsError(t *testing.T) {
Return([]string(nil), errors.New("something")).
Once()

var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

var largeSegmentStorageMock largeSegmentStorageMock

resp := httptest.NewRecorder()
Expand All @@ -626,7 +658,7 @@ func TestMySegmentsError(t *testing.T) {
logger := logging.NewLogger(nil)

group := router.Group("/api")
controller := NewSdkServerController(logger, splitFetcher, &splitStorage, &segmentStorage, nil, flagsets.NewMatcher(false, nil), &largeSegmentStorageMock, specs.FLAG_V1_2)
controller := NewSdkServerController(logger, splitFetcher, &splitStorage, &segmentStorage, &rbsStorage, flagsets.NewMatcher(false, nil), &largeSegmentStorageMock, specs.FLAG_V1_2)
controller.Register(group)

ctx.Request, _ = http.NewRequest(http.MethodGet, "/api/mySegments/someKey", nil)
Expand All @@ -651,6 +683,8 @@ func TestMemberships(t *testing.T) {
segmentStorage.On("SegmentsFor", "keyTest").
Return([]string{"segment1", "segment2"}, nil).
Once()
var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

var largeSegmentStorageMock largeSegmentStorageMock
largeSegmentStorageMock.On("LargeSegmentsForUser", "keyTest").
Expand All @@ -663,7 +697,7 @@ func TestMemberships(t *testing.T) {
logger := logging.NewLogger(nil)

group := router.Group("/api")
controller := NewSdkServerController(logger, splitFetcher, &splitStorage, &segmentStorage, nil, flagsets.NewMatcher(false, nil), &largeSegmentStorageMock, specs.FLAG_V1_2)
controller := NewSdkServerController(logger, splitFetcher, &splitStorage, &segmentStorage, &rbsStorage, flagsets.NewMatcher(false, nil), &largeSegmentStorageMock, specs.FLAG_V1_2)
controller.Register(group)

ctx.Request, _ = http.NewRequest(http.MethodGet, "/api/memberships/keyTest", nil)
Expand Down Expand Up @@ -706,14 +740,16 @@ func TestMembershipsError(t *testing.T) {
segmentStorage.On("SegmentsFor", "keyTest").
Return([]string{}, errors.New("error message.")).
Once()
var rbsStorage psmocks.MockProxyRuleBasedSegmentStorage
rbsStorage.On("ChangesSince", int64(-1)).Return(&dtos.RuleBasedSegmentsDTO{}).Once()

resp := httptest.NewRecorder()
ctx, router := gin.CreateTestContext(resp)

logger := logging.NewLogger(nil)

group := router.Group("/api")
controller := NewSdkServerController(logger, splitFetcher, &splitStorage, &segmentStorage, nil, flagsets.NewMatcher(false, nil), &largeSegmentStorageMock, specs.FLAG_V1_2)
controller := NewSdkServerController(logger, splitFetcher, &splitStorage, &segmentStorage, &rbsStorage, flagsets.NewMatcher(false, nil), &largeSegmentStorageMock, specs.FLAG_V1_2)
controller.Register(group)

ctx.Request, _ = http.NewRequest(http.MethodGet, "/api/memberships/keyTest", nil)
Expand Down
Loading