Skip to content

Commit 5089b4d

Browse files
fix: don't return error when there is a good projectConfig in polling manager (#179)
fix: don't return error when there is a good projectConfig in polling manager
1 parent 0c62964 commit 5089b4d

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

pkg/config/polling_manager.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,10 @@ func (cm *PollingProjectConfigManager) SyncConfig(datafile []byte) {
9494

9595
if e != nil {
9696
cmLogger.Error(fmt.Sprintf("request returned with http code=%d", code), e)
97-
cm.err = e
97+
cm.err = nil
98+
if cm.projectConfig == nil {
99+
cm.err = e
100+
}
98101
return
99102
}
100103
}
@@ -103,7 +106,10 @@ func (cm *PollingProjectConfigManager) SyncConfig(datafile []byte) {
103106

104107
cm.configLock.Lock()
105108
closeMutex := func() {
106-
cm.err = err
109+
cm.err = nil
110+
if cm.projectConfig == nil {
111+
cm.err = err
112+
}
107113
cm.configLock.Unlock()
108114
}
109115
if err != nil {

pkg/config/polling_manager_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,39 @@ func TestNewPollingProjectConfigManagerWithDifferentDatafileRevisions(t *testing
127127
assert.Equal(t, projectConfig2, actual)
128128
}
129129

130+
func TestNewPollingProjectConfigManagerWithErrorHandling(t *testing.T) {
131+
mockDatafile1 := []byte("NOT-VALID")
132+
mockDatafile2 := []byte(`{"revision":"43","botFiltering":false}`)
133+
134+
projectConfig1, _ := datafileprojectconfig.NewDatafileProjectConfig(mockDatafile1)
135+
projectConfig2, _ := datafileprojectconfig.NewDatafileProjectConfig(mockDatafile2)
136+
mockRequester := new(MockRequester)
137+
mockRequester.On("Get", []utils.Header(nil)).Return(mockDatafile1, 200, nil)
138+
139+
// Test we fetch using requester
140+
sdkKey := "test_sdk_key"
141+
142+
exeCtx := utils.NewCancelableExecutionCtx()
143+
configManager := NewPollingProjectConfigManager(sdkKey, Requester(mockRequester))
144+
configManager.Start(exeCtx)
145+
mockRequester.AssertExpectations(t)
146+
147+
actual, err := configManager.GetConfig() // polling for bad file
148+
assert.NotNil(t, err)
149+
assert.Nil(t, actual)
150+
assert.Nil(t, projectConfig1)
151+
152+
configManager.SyncConfig(mockDatafile2) // polling for good file
153+
actual, err = configManager.GetConfig()
154+
assert.Nil(t, err)
155+
assert.Equal(t, projectConfig2, actual)
156+
157+
configManager.SyncConfig(mockDatafile1) // polling for bad file, error not null but good project
158+
actual, err = configManager.GetConfig()
159+
assert.Nil(t, err)
160+
assert.Equal(t, projectConfig2, actual)
161+
}
162+
130163
func TestNewPollingProjectConfigManagerOnDecision(t *testing.T) {
131164
mockDatafile1 := []byte(`{"revision":"42","botFiltering":true}`)
132165
mockDatafile2 := []byte(`{"revision":"43","botFiltering":false}`)

0 commit comments

Comments
 (0)