From e0de9d0afa756bf307fccbe6d404e3aadcbbcc9f Mon Sep 17 00:00:00 2001 From: mathetake Date: Sat, 16 May 2020 11:12:45 +0900 Subject: [PATCH] pkg/controller: add unit test for checkMetricProviderAvailability --- pkg/controller/scheduler_metrics_test.go | 53 ++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 pkg/controller/scheduler_metrics_test.go diff --git a/pkg/controller/scheduler_metrics_test.go b/pkg/controller/scheduler_metrics_test.go new file mode 100644 index 00000000..36117ac4 --- /dev/null +++ b/pkg/controller/scheduler_metrics_test.go @@ -0,0 +1,53 @@ +package controller + +import ( + "testing" + + "github.com/stretchr/testify/require" + "go.uber.org/zap" + "k8s.io/client-go/tools/record" + + flaggerv1 "github.com/weaveworks/flagger/pkg/apis/flagger/v1beta1" + "github.com/weaveworks/flagger/pkg/metrics/observers" +) + +func TestController_checkMetricProviderAvailability(t *testing.T) { + t.Run("builtin", func(t *testing.T) { + // ok + analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{Name: "request-success-rate"}}} + canary := &flaggerv1.Canary{Spec: flaggerv1.CanarySpec{Analysis: analysis}} + obs, err := observers.NewFactory(testMetricsServerURL) + require.NoError(t, err) + ctrl := Controller{observerFactory: obs, logger: zap.S(), eventRecorder: &record.FakeRecorder{}} + require.NoError(t, ctrl.checkMetricProviderAvailability(canary)) + + // error + ctrl.observerFactory, err = observers.NewFactory("http://non-exist") + require.NoError(t, err) + require.Error(t, ctrl.checkMetricProviderAvailability(canary)) + + // ok + canary.Spec.MetricsServer = testMetricsServerURL + require.NoError(t, ctrl.checkMetricProviderAvailability(canary)) + }) + + t.Run("templateRef", func(t *testing.T) { + ctrl := newDeploymentFixture(nil).ctrl + + // error (not found) + analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{ + Name: "", TemplateRef: &flaggerv1.CrossNamespaceObjectReference{ + Name: "non-exist", Namespace: "default", + }, + }}} + canary := &flaggerv1.Canary{Spec: flaggerv1.CanarySpec{Analysis: analysis}} + require.Error(t, ctrl.checkMetricProviderAvailability(canary)) + + // ok + canary.Spec.Analysis.Metrics[0].TemplateRef = &flaggerv1.CrossNamespaceObjectReference{ + Name: "envoy", + Namespace: "default", + } + require.NoError(t, ctrl.checkMetricProviderAvailability(canary)) + }) +}