diff --git a/pkg/controller/controller_test.go b/pkg/controller/controller_test.go index 49c0ef5b..ef3006e5 100644 --- a/pkg/controller/controller_test.go +++ b/pkg/controller/controller_test.go @@ -250,14 +250,26 @@ func newTestCanary() *flaggerv1.Canary { MaxWeight: 50, Metrics: []flaggerv1.CanaryMetric{ { - Name: "istio_requests_total", + Name: "request-success-rate", Threshold: 99, Interval: "1m", }, { - Name: "istio_request_duration_seconds_bucket", - Threshold: 500, - Interval: "1m", + Name: "request-duration", + ThresholdRange: &flaggerv1.CanaryThresholdRange{ + Min: toFloatPtr(0), + Max: toFloatPtr(500000), + }, + Interval: "1m", + }, + { + Name: "custom", + ThresholdRange: &flaggerv1.CanaryThresholdRange{ + Min: toFloatPtr(0), + Max: toFloatPtr(500000), + }, + Interval: "1m", + Query: "fake", }, }, }, @@ -266,6 +278,11 @@ func newTestCanary() *flaggerv1.Canary { return cd } +func toFloatPtr(val int) *float64 { + v := float64(val) + return &v +} + func newTestCanaryMirror() *flaggerv1.Canary { cd := newTestCanary() cd.Spec.CanaryAnalysis.Mirror = true @@ -305,13 +322,16 @@ func newTestCanaryAB() *flaggerv1.Canary { }, Metrics: []flaggerv1.CanaryMetric{ { - Name: "istio_requests_total", - Threshold: 99, - Interval: "1m", + Name: "request-success-rate", + ThresholdRange: &flaggerv1.CanaryThresholdRange{ + Min: toFloatPtr(99), + Max: toFloatPtr(100), + }, + Interval: "1m", }, { - Name: "istio_request_duration_seconds_bucket", - Threshold: 500, + Name: "request-duration", + Threshold: 500000, Interval: "1m", }, }, diff --git a/pkg/controller/scheduler_test.go b/pkg/controller/scheduler_test.go index 5d66f641..96ee6d89 100644 --- a/pkg/controller/scheduler_test.go +++ b/pkg/controller/scheduler_test.go @@ -50,18 +50,48 @@ func TestScheduler_Rollback(t *testing.T) { mocks.ctrl.advanceCanary("podinfo", "default", true) // update failed checks to max - err := mocks.deployer.SyncStatus(mocks.canary, flaggerv1.CanaryStatus{Phase: flaggerv1.CanaryPhaseProgressing, FailedChecks: 11}) + err := mocks.deployer.SyncStatus(mocks.canary, flaggerv1.CanaryStatus{Phase: flaggerv1.CanaryPhaseProgressing, FailedChecks: 10}) if err != nil { t.Fatal(err.Error()) } - // detect changes - mocks.ctrl.advanceCanary("podinfo", "default", true) - + // set a metric check to fail c, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{}) if err != nil { t.Fatal(err.Error()) } + cd := c.DeepCopy() + cd.Spec.CanaryAnalysis.Metrics = append(c.Spec.CanaryAnalysis.Metrics, flaggerv1.CanaryMetric{ + Name: "fail", + Interval: "1m", + ThresholdRange: &flaggerv1.CanaryThresholdRange{ + Min: toFloatPtr(0), + Max: toFloatPtr(50), + }, + Query: "fail", + }) + _, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Update(cd) + if err != nil { + t.Fatal(err.Error()) + } + + // run metric checks + mocks.ctrl.advanceCanary("podinfo", "default", true) + if err != nil { + t.Fatal(err.Error()) + } + + // finalise analysis + mocks.ctrl.advanceCanary("podinfo", "default", true) + if err != nil { + t.Fatal(err.Error()) + } + + // check status + c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{}) + if err != nil { + t.Fatal(err.Error()) + } if c.Status.Phase != flaggerv1.CanaryPhaseFailed { t.Errorf("Got canary state %v wanted %v", c.Status.Phase, flaggerv1.CanaryPhaseFailed) diff --git a/pkg/metrics/providers/prometheus.go b/pkg/metrics/providers/prometheus.go index 9823cb61..8fe215d8 100644 --- a/pkg/metrics/providers/prometheus.go +++ b/pkg/metrics/providers/prometheus.go @@ -67,7 +67,7 @@ func NewPrometheusProvider(provider flaggerv1.MetricTemplateProvider, credential // RunQuery executes the promQL query and returns the the first result as float64 func (p *PrometheusProvider) RunQuery(query string) (float64, error) { - if p.url.Host == "fake" { + if p.url.String() == "fake" { return 100, nil }