Skip to content

Commit dfea323

Browse files
committed
Added tests cases
1 parent 514a95c commit dfea323

3 files changed

Lines changed: 228 additions & 1 deletion

File tree

splitio/commitversion.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ This file is created automatically, please do not edit
55
*/
66

77
// CommitVersion is the version of the last commit previous to release
8-
const CommitVersion = "1fbc498"
8+
const CommitVersion = "514a95c"
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package storage
2+
3+
import (
4+
"testing"
5+
6+
"github.com/splitio/go-split-commons/v8/dtos"
7+
"github.com/splitio/go-toolkit/v5/logging"
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestRBSChangesSince(t *testing.T) {
12+
logger := logging.NewLogger(nil)
13+
14+
// Initialize storage with some test data
15+
pss := NewProxyRuleBasedSegmentsStorage(logger)
16+
17+
// Test case 1: since == -1
18+
{
19+
initialRuleBaseds := []dtos.RuleBasedSegmentDTO{
20+
{Name: "rbs1", ChangeNumber: 10, Status: "ACTIVE", TrafficTypeName: "user"},
21+
{Name: "rbs2", ChangeNumber: 10, Status: "ACTIVE", TrafficTypeName: "user"},
22+
}
23+
pss.Update(initialRuleBaseds, nil, 10)
24+
25+
changes, err := pss.ChangesSince(-1)
26+
assert.Nil(t, err)
27+
assert.Equal(t, int64(-1), changes.Since)
28+
assert.Equal(t, int64(10), changes.Till)
29+
assert.ElementsMatch(t, initialRuleBaseds, changes.RuleBasedSegments)
30+
}
31+
32+
// Test case 2: Error when since is too old
33+
{
34+
// The storage was initialized with CN 10, so requesting CN 5 should fail
35+
changes, err := pss.ChangesSince(5)
36+
assert.Equal(t, ErrSinceParamTooOld, err)
37+
assert.Nil(t, changes)
38+
}
39+
40+
// Test case 3: Active and archived rule-based segment
41+
{
42+
// Add a new rule-based segment and archive an existing one
43+
toAdd := []dtos.RuleBasedSegmentDTO{{Name: "rbs3", ChangeNumber: 15, Status: "ACTIVE", TrafficTypeName: "user"}}
44+
toRemove := []dtos.RuleBasedSegmentDTO{
45+
{
46+
Name: "rbs2",
47+
ChangeNumber: 15,
48+
Status: "ARCHIVED",
49+
TrafficTypeName: "user",
50+
Conditions: []dtos.RuleBasedConditionDTO{},
51+
},
52+
}
53+
54+
pss.Update(toAdd, toRemove, 15)
55+
56+
changes, err := pss.ChangesSince(10)
57+
assert.Nil(t, err)
58+
assert.Equal(t, int64(10), changes.Since)
59+
assert.Equal(t, int64(15), changes.Till)
60+
61+
// Should include both the new active rule-based segment and the archived one
62+
expectedRBSs := []dtos.RuleBasedSegmentDTO{
63+
{
64+
Name: "rbs2",
65+
ChangeNumber: 15,
66+
Status: "ARCHIVED",
67+
// Note: Archived segments have minimal fields set by archivedRBDTOForView
68+
},
69+
{
70+
Name: "rbs3",
71+
ChangeNumber: 15,
72+
Status: "ACTIVE",
73+
TrafficTypeName: "user",
74+
Excluded: dtos.ExcludedDTO{
75+
Keys: nil,
76+
Segments: nil,
77+
},
78+
Conditions: nil,
79+
},
80+
}
81+
assert.ElementsMatch(t, expectedRBSs, changes.RuleBasedSegments)
82+
}
83+
84+
// Test case 4: Proper till calculation with multiple changes
85+
{
86+
// Add changes with different change numbers
87+
changes1 := []dtos.RuleBasedSegmentDTO{{Name: "rbs6", ChangeNumber: 25, Status: "ACTIVE", TrafficTypeName: "user"}}
88+
changes2 := []dtos.RuleBasedSegmentDTO{{Name: "rbs7", ChangeNumber: 30, Status: "ACTIVE", TrafficTypeName: "user"}}
89+
90+
pss.Update(changes1, nil, 25)
91+
pss.Update(changes2, nil, 30)
92+
93+
changes, err := pss.ChangesSince(20)
94+
assert.Nil(t, err)
95+
assert.Equal(t, int64(20), changes.Since)
96+
assert.Equal(t, int64(30), changes.Till)
97+
expectedChanges := []dtos.RuleBasedSegmentDTO{
98+
{Name: "rbs6", ChangeNumber: 25, Status: "ACTIVE", TrafficTypeName: "user"},
99+
{Name: "rbs7", ChangeNumber: 30, Status: "ACTIVE", TrafficTypeName: "user"},
100+
}
101+
assert.ElementsMatch(t, expectedChanges, changes.RuleBasedSegments)
102+
}
103+
}

splitio/proxy/storage/splits_test.go

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,130 @@ func TestGetNamesByFlagSets(t *testing.T) {
220220
}
221221
}
222222

223+
func TestChangesSince(t *testing.T) {
224+
dbw, err := persistent.NewBoltWrapper(persistent.BoltInMemoryMode, nil)
225+
assert.Nil(t, err)
226+
logger := logging.NewLogger(nil)
227+
228+
// Initialize storage with some test data
229+
pss := NewProxySplitStorage(dbw, logger, flagsets.NewFlagSetFilter(nil), true)
230+
231+
// Test case 1: since == -1 and no flagSets
232+
{
233+
initialSplits := []dtos.SplitDTO{
234+
{Name: "split1", ChangeNumber: 10, Status: "ACTIVE", TrafficTypeName: "user"},
235+
{Name: "split2", ChangeNumber: 10, Status: "ACTIVE", TrafficTypeName: "user"},
236+
}
237+
pss.Update(initialSplits, nil, 10)
238+
239+
changes, err := pss.ChangesSince(-1, nil)
240+
assert.Nil(t, err)
241+
assert.Equal(t, int64(-1), changes.Since)
242+
assert.Equal(t, int64(10), changes.Till)
243+
assert.ElementsMatch(t, initialSplits, changes.Splits)
244+
}
245+
246+
// Test case 2: Error when since is too old
247+
{
248+
// The storage was initialized with CN 10, so requesting CN 5 should fail
249+
changes, err := pss.ChangesSince(5, nil)
250+
assert.Equal(t, ErrSinceParamTooOld, err)
251+
assert.Nil(t, changes)
252+
}
253+
254+
// Test case 3: Active and archived splits
255+
{
256+
// Add a new split and archive an existing one
257+
toAdd := []dtos.SplitDTO{{Name: "split3", ChangeNumber: 15, Status: "ACTIVE", TrafficTypeName: "user"}}
258+
toRemove := []dtos.SplitDTO{
259+
{
260+
Name: "split2",
261+
ChangeNumber: 15,
262+
Status: "ARCHIVED",
263+
TrafficTypeName: "user",
264+
TrafficAllocation: 100,
265+
Algo: 1,
266+
DefaultTreatment: "off",
267+
Conditions: []dtos.ConditionDTO{},
268+
Sets: []string{},
269+
},
270+
}
271+
272+
pss.Update(toAdd, toRemove, 15)
273+
274+
changes, err := pss.ChangesSince(10, nil)
275+
assert.Nil(t, err)
276+
assert.Equal(t, int64(10), changes.Since)
277+
assert.Equal(t, int64(15), changes.Till)
278+
279+
// Should include both the new active split and the archived one
280+
expectedSplits := []dtos.SplitDTO{
281+
{
282+
Name: "split3",
283+
ChangeNumber: 15,
284+
Status: "ACTIVE",
285+
TrafficTypeName: "user",
286+
TrafficAllocation: 0,
287+
Algo: 0,
288+
Conditions: nil,
289+
Sets: nil,
290+
},
291+
{
292+
Name: "split2",
293+
ChangeNumber: 15,
294+
Status: "ARCHIVED",
295+
TrafficTypeName: "user",
296+
TrafficAllocation: 100,
297+
Algo: 1,
298+
DefaultTreatment: "off",
299+
Conditions: []dtos.ConditionDTO{},
300+
Sets: []string{},
301+
},
302+
}
303+
assert.ElementsMatch(t, expectedSplits, changes.Splits)
304+
}
305+
306+
// Test case 4: FlagSets filtering
307+
{
308+
// Add splits with flag sets
309+
flagSetSplits := []dtos.SplitDTO{
310+
{Name: "split4", ChangeNumber: 20, Status: "ACTIVE", Sets: []string{"set1"}, TrafficTypeName: "user"},
311+
{Name: "split5", ChangeNumber: 20, Status: "ACTIVE", Sets: []string{"set2"}, TrafficTypeName: "user"},
312+
}
313+
pss.Update(flagSetSplits, nil, 20)
314+
315+
// Test filtering by set1
316+
changes, err := pss.ChangesSince(15, []string{"set1"})
317+
assert.Nil(t, err)
318+
assert.Equal(t, int64(15), changes.Since)
319+
assert.Equal(t, int64(20), changes.Till)
320+
expectedSet1 := []dtos.SplitDTO{
321+
{Name: "split4", ChangeNumber: 20, Status: "ACTIVE", Sets: []string{"set1"}, TrafficTypeName: "user"},
322+
}
323+
assert.ElementsMatch(t, expectedSet1, changes.Splits)
324+
}
325+
326+
// Test case 5: Proper till calculation with multiple changes
327+
{
328+
// Add changes with different change numbers
329+
changes1 := []dtos.SplitDTO{{Name: "split6", ChangeNumber: 25, Status: "ACTIVE", TrafficTypeName: "user"}}
330+
changes2 := []dtos.SplitDTO{{Name: "split7", ChangeNumber: 30, Status: "ACTIVE", TrafficTypeName: "user"}}
331+
332+
pss.Update(changes1, nil, 25)
333+
pss.Update(changes2, nil, 30)
334+
335+
changes, err := pss.ChangesSince(20, nil)
336+
assert.Nil(t, err)
337+
assert.Equal(t, int64(20), changes.Since)
338+
assert.Equal(t, int64(30), changes.Till)
339+
expectedChanges := []dtos.SplitDTO{
340+
{Name: "split6", ChangeNumber: 25, Status: "ACTIVE", TrafficTypeName: "user"},
341+
{Name: "split7", ChangeNumber: 30, Status: "ACTIVE", TrafficTypeName: "user"},
342+
}
343+
assert.ElementsMatch(t, expectedChanges, changes.Splits)
344+
}
345+
}
346+
223347
func TestGetAllFlagSetNames(t *testing.T) {
224348
dbw, err := persistent.NewBoltWrapper(persistent.BoltInMemoryMode, nil)
225349
if err != nil {

0 commit comments

Comments
 (0)