Skip to content

Commit aad671c

Browse files
Added checks for API server errors
1 parent 118cac5 commit aad671c

File tree

3 files changed

+38
-5
lines changed

3 files changed

+38
-5
lines changed

pkg/canary/config_tracker.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -208,18 +208,17 @@ func (ct *ConfigTracker) GetTargetConfigs(cd *flaggerv1.Canary) (map[string]Conf
208208
for configMapName := range configMapNames {
209209
config, err := ct.getRefFromConfigMap(configMapName, cd.Namespace)
210210
if err != nil {
211-
ct.Logger.Errorf("getRefFromConfigMap failed: %v", err)
212-
continue
211+
return nil, fmt.Errorf("configmap %s.%s get query error: %w", configMapName, cd.Namespace, err)
213212
}
214213
if config != nil {
215214
res[config.GetName()] = *config
216215
}
217216
}
217+
218218
for secretName := range secretNames {
219219
secret, err := ct.getRefFromSecret(secretName, cd.Namespace)
220220
if err != nil {
221-
ct.Logger.Errorf("getRefFromSecret failed: %v", err)
222-
continue
221+
return nil, fmt.Errorf("secret %s.%s get query error: %w", secretName, cd.Namespace, err)
223222
}
224223
if secret != nil {
225224
res[secret.GetName()] = *secret

pkg/canary/config_tracker_test.go

+29
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@ package canary
1818

1919
import (
2020
"context"
21+
"errors"
2122
"testing"
2223

2324
"github.com/stretchr/testify/assert"
2425
"github.com/stretchr/testify/require"
2526

2627
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28+
"k8s.io/apimachinery/pkg/runtime"
29+
k8sTesting "k8s.io/client-go/testing"
2730
)
2831

2932
func TestConfigIsDisabled(t *testing.T) {
@@ -303,3 +306,29 @@ func TestConfigTracker_Secrets(t *testing.T) {
303306
assert.True(t, originalVolPresent, "Volume for original secret with disabled tracking should be present")
304307
})
305308
}
309+
310+
func TestConfigTracker_HasConfigChanged_ShouldReturnErrorWhenAPIServerIsDown(t *testing.T) {
311+
t.Run("secret", func(t *testing.T) {
312+
dc := deploymentConfigs{name: "podinfo", label: "name", labelValue: "podinfo"}
313+
mocks, kubeClient := newCustomizableFixture(dc)
314+
315+
kubeClient.PrependReactor("get", "secrets", func(action k8sTesting.Action) (bool, runtime.Object, error) {
316+
return true, nil, errors.New("server error")
317+
})
318+
319+
_, err := mocks.controller.configTracker.HasConfigChanged(mocks.canary)
320+
assert.Error(t, err)
321+
})
322+
323+
t.Run("configmap", func(t *testing.T) {
324+
dc := deploymentConfigs{name: "podinfo", label: "name", labelValue: "podinfo"}
325+
mocks, kubeClient := newCustomizableFixture(dc)
326+
327+
kubeClient.PrependReactor("get", "configmaps", func(action k8sTesting.Action) (bool, runtime.Object, error) {
328+
return true, nil, errors.New("server error")
329+
})
330+
331+
_, err := mocks.controller.configTracker.HasConfigChanged(mocks.canary)
332+
assert.Error(t, err)
333+
})
334+
}

pkg/canary/deployment_fixture_test.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ func (d deploymentControllerFixture) initializeCanary(t *testing.T) {
7878
}
7979

8080
func newDeploymentFixture(dc deploymentConfigs) deploymentControllerFixture {
81+
fixture, _ := newCustomizableFixture(dc)
82+
return fixture
83+
}
84+
85+
func newCustomizableFixture(dc deploymentConfigs) (deploymentControllerFixture, *fake.Clientset) {
8186
// init canary
8287
cc := canaryConfigs{targetName: dc.name}
8388
canary := newDeploymentControllerTestCanary(cc)
@@ -121,7 +126,7 @@ func newDeploymentFixture(dc deploymentConfigs) deploymentControllerFixture {
121126
logger: logger,
122127
flaggerClient: flaggerClient,
123128
kubeClient: kubeClient,
124-
}
129+
}, kubeClient
125130
}
126131

127132
func newDeploymentControllerTestConfigMap() *corev1.ConfigMap {

0 commit comments

Comments
 (0)