...
1 package datastore
2
3 import (
4 "testing"
5
6 "github.com/stretchr/testify/assert"
7
8 "github.com/launchdarkly/go-sdk-common/v3/ldlog"
9 "github.com/launchdarkly/go-server-sdk-evaluation/v2/ldbuilders"
10 "github.com/launchdarkly/go-server-sdk/v6/internal/datakinds"
11 "github.com/launchdarkly/go-server-sdk/v6/subsystems/ldstoretypes"
12 )
13
14 func TestDataStoreEvalFeatures(t *testing.T) {
15 store := fakeStoreForDataStoreProvider{}
16 flag := ldbuilders.NewFlagBuilder("flagkey").Build()
17 store.data = map[ldstoretypes.DataKind]map[string]ldstoretypes.ItemDescriptor{
18 datakinds.Features: map[string]ldstoretypes.ItemDescriptor{
19 flag.Key: {Version: flag.Version, Item: &flag},
20 "deleted-key": {Version: 9, Item: nil},
21 "wrong-type": {Version: 1, Item: "not a flag"},
22 },
23 }
24
25 provider := NewDataStoreEvaluatorDataProviderImpl(store, ldlog.NewDisabledLoggers())
26
27 assert.Equal(t, &flag, provider.GetFeatureFlag(flag.Key))
28 assert.Nil(t, provider.GetFeatureFlag("unknown-key"))
29 assert.Nil(t, provider.GetFeatureFlag("deleted-key"))
30 assert.Nil(t, provider.GetFeatureFlag("wrong-type"))
31 }
32
33 func TestDataStoreEvalSegments(t *testing.T) {
34 store := fakeStoreForDataStoreProvider{}
35 segment := ldbuilders.NewSegmentBuilder("segmentkey").Build()
36 store.data = map[ldstoretypes.DataKind]map[string]ldstoretypes.ItemDescriptor{
37 datakinds.Segments: map[string]ldstoretypes.ItemDescriptor{
38 segment.Key: {Version: segment.Version, Item: &segment},
39 "deleted-key": {Version: 9, Item: nil},
40 "wrong-type": {Version: 1, Item: "not a segment"},
41 },
42 }
43
44 provider := NewDataStoreEvaluatorDataProviderImpl(store, ldlog.NewDisabledLoggers())
45
46 assert.Equal(t, &segment, provider.GetSegment(segment.Key))
47 assert.Nil(t, provider.GetSegment("unknown-key"))
48 assert.Nil(t, provider.GetSegment("deleted-key"))
49 assert.Nil(t, provider.GetSegment("wrong-type"))
50 }
51
52 type fakeStoreForDataStoreProvider struct {
53 data map[ldstoretypes.DataKind]map[string]ldstoretypes.ItemDescriptor
54 fakeError error
55 }
56
57 func (f fakeStoreForDataStoreProvider) Init(allData []ldstoretypes.Collection) error {
58 return nil
59 }
60
61 func (f fakeStoreForDataStoreProvider) Get(kind ldstoretypes.DataKind, key string) (ldstoretypes.ItemDescriptor, error) {
62 if f.fakeError != nil {
63 return ldstoretypes.ItemDescriptor{}, f.fakeError
64 }
65 return f.data[kind][key], nil
66 }
67
68 func (f fakeStoreForDataStoreProvider) GetAll(kind ldstoretypes.DataKind) ([]ldstoretypes.KeyedItemDescriptor, error) {
69 return nil, nil
70 }
71
72 func (f fakeStoreForDataStoreProvider) Upsert(kind ldstoretypes.DataKind, key string, item ldstoretypes.ItemDescriptor) (bool, error) {
73 return false, nil
74 }
75
76 func (f fakeStoreForDataStoreProvider) IsInitialized() bool {
77 return false
78 }
79
80 func (f fakeStoreForDataStoreProvider) IsStatusMonitoringEnabled() bool {
81 return false
82 }
83
84 func (f fakeStoreForDataStoreProvider) Close() error {
85 return nil
86 }
87
View as plain text