Skip to content

Commit 578974b

Browse files
authored
[FSSDK-9087]: Adds valid project config check to sendOdpEvent. (#371)
* Adding project config checks for sendOdpEvent.
1 parent 99d0bcf commit 578974b

File tree

2 files changed

+42
-9
lines changed

2 files changed

+42
-9
lines changed

pkg/client/client.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/****************************************************************************
2-
* Copyright 2019-2022, Optimizely, Inc. and contributors *
2+
* Copyright 2019-2023, Optimizely, Inc. and contributors *
33
* *
44
* Licensed under the Apache License, Version 2.0 (the "License"); *
55
* you may not use this file except in compliance with the License. *
@@ -305,6 +305,11 @@ func (o *OptimizelyClient) SendOdpEvent(eventType, action string, identifiers ma
305305
}
306306
}()
307307

308+
if _, err = o.getProjectConfig(); err != nil {
309+
o.logger.Error("SendOdpEvent failed with error:", decide.GetDecideError(decide.SDKNotReady))
310+
return err
311+
}
312+
308313
// the event type (default = "fullstack").
309314
if eventType == "" {
310315
eventType = pkgOdpUtils.OdpEventType

pkg/client/client_test.go

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/****************************************************************************
2-
* Copyright 2019-2020,2022 Optimizely, Inc. and contributors *
2+
* Copyright 2019-2020,2022-2023 Optimizely, Inc. and contributors *
33
* *
44
* Licensed under the Apache License, Version 2.0 (the "License"); *
55
* you may not use this file except in compliance with the License. *
@@ -205,12 +205,29 @@ func (m *MockODPManager) Update(apiKey, apiHost string, segmentsToCheck []string
205205
m.Called(apiKey, apiHost, segmentsToCheck)
206206
}
207207

208+
func TestSendODPEventWhenSDKNotReady(t *testing.T) {
209+
factory := OptimizelyFactory{SDKKey: "121"}
210+
client, _ := factory.Client()
211+
err := client.SendOdpEvent("123", "456", map[string]string{
212+
"abc": "123",
213+
}, map[string]interface{}{
214+
"abc": nil,
215+
"idempotence_id": 234,
216+
"data_source_type": "456",
217+
"data_source": true,
218+
"data_source_version": 6.78,
219+
})
220+
assert.Error(t, err)
221+
}
222+
208223
func TestSendODPEventWhenODPDisabled(t *testing.T) {
209224
factory := OptimizelyFactory{SDKKey: "1212"}
210225
var segmentsCacheSize = 1
211226
var segmentsCacheTimeout = 1 * time.Second
212227
var disableOdp = true
213228
optimizelyClient, err := factory.Client(WithSegmentsCacheSize(segmentsCacheSize), WithSegmentsCacheTimeout(segmentsCacheTimeout), WithOdpDisabled(disableOdp))
229+
optimizelyClient.ConfigManager = getMockConfigManager()
230+
214231
assert.NoError(t, err)
215232
err = optimizelyClient.SendOdpEvent("123", "456", map[string]string{
216233
"abc": "123",
@@ -221,7 +238,7 @@ func TestSendODPEventWhenODPDisabled(t *testing.T) {
221238
"data_source": true,
222239
"data_source_version": 6.78,
223240
})
224-
assert.Error(t, err)
241+
assert.Equal(t, errors.New(pkgOdpUtils.OdpNotEnabled), err)
225242
}
226243

227244
func TestSendODPEventEmptyType(t *testing.T) {
@@ -240,7 +257,8 @@ func TestSendODPEventEmptyType(t *testing.T) {
240257
mockOdpManager := &MockODPManager{}
241258
mockOdpManager.On("SendOdpEvent", eventType, action, identifiers, data).Return(nil)
242259
optimizelyClient := OptimizelyClient{
243-
OdpManager: mockOdpManager,
260+
OdpManager: mockOdpManager,
261+
ConfigManager: getMockConfigManager(),
244262
}
245263
err := optimizelyClient.SendOdpEvent("", action, identifiers, data)
246264
assert.NoError(t, err)
@@ -258,10 +276,11 @@ func TestSendODPEventEmptyIdentifiers(t *testing.T) {
258276
"data_source_version": 6.78,
259277
}
260278
optimizelyClient := OptimizelyClient{
261-
logger: logging.GetLogger("", ""),
279+
logger: logging.GetLogger("", ""),
280+
ConfigManager: getMockConfigManager(),
262281
}
263282
err := optimizelyClient.SendOdpEvent("", action, identifiers, data)
264-
assert.Error(t, err)
283+
assert.Equal(t, errors.New("ODP events must have at least one key-value pair in identifiers"), err)
265284
}
266285

267286
func TestSendODPEventNilIdentifiers(t *testing.T) {
@@ -274,17 +293,19 @@ func TestSendODPEventNilIdentifiers(t *testing.T) {
274293
"data_source_version": 6.78,
275294
}
276295
optimizelyClient := OptimizelyClient{
277-
logger: logging.GetLogger("", ""),
296+
logger: logging.GetLogger("", ""),
297+
ConfigManager: getMockConfigManager(),
278298
}
279299
err := optimizelyClient.SendOdpEvent("", action, nil, data)
280-
assert.Error(t, err)
300+
assert.Equal(t, errors.New("ODP events must have at least one key-value pair in identifiers"), err)
281301
}
282302

283303
func TestSendODPEvent(t *testing.T) {
284304
mockOdpManager := &MockODPManager{}
285305
mockOdpManager.On("SendOdpEvent", "123", "", map[string]string{"identifier": "123"}, mock.Anything).Return(nil)
286306
optimizelyClient := OptimizelyClient{
287-
OdpManager: mockOdpManager,
307+
OdpManager: mockOdpManager,
308+
ConfigManager: getMockConfigManager(),
288309
}
289310
err := optimizelyClient.SendOdpEvent("123", "", map[string]string{"identifier": "123"}, nil)
290311
assert.NoError(t, err)
@@ -2124,6 +2145,13 @@ func getMockConfig(featureKey string, variableKey string, feature entities.Featu
21242145
return mockConfig
21252146
}
21262147

2148+
func getMockConfigManager() *MockProjectConfigManager {
2149+
mockConfig := new(MockProjectConfig)
2150+
mockConfigManager := new(MockProjectConfigManager)
2151+
mockConfigManager.On("GetConfig").Return(mockConfig, nil)
2152+
return mockConfigManager
2153+
}
2154+
21272155
func getTestFeature(featureKey string, experiment entities.Experiment) entities.Feature {
21282156
return entities.Feature{
21292157
ID: "22222",

0 commit comments

Comments
 (0)