blob: e62aeca20bb356ce52a85e313ccb5c91e7d45376 [file] [log] [blame]
package notifier
import (
"context"
"errors"
"testing"
"github.com/stretchr/testify/assert"
"go.skia.org/infra/go/query"
"go.skia.org/infra/perf/go/alerts"
ag_mock "go.skia.org/infra/perf/go/anomalygroup/utils/mocks"
"go.skia.org/infra/perf/go/clustering2"
"go.skia.org/infra/perf/go/dataframe"
"go.skia.org/infra/perf/go/git/provider"
"go.skia.org/infra/perf/go/stepfit"
"go.skia.org/infra/perf/go/types"
"go.skia.org/infra/perf/go/ui/frame"
)
func Setup(paramset map[string]string) (context.Context, *alerts.Alert, frame.FrameResponse, clustering2.ClusterSummary) {
ctx := context.Background()
alert := alerts.NewConfig()
frame := &frame.FrameResponse{}
key, _ := query.MakeKey(paramset)
frame.DataFrame = &dataframe.DataFrame{
TraceSet: types.TraceSet{
key: []float32{1.0, 2.0},
},
}
cl := &clustering2.ClusterSummary{
Centroid: []float32{1.0, 2.0},
StepFit: &stepfit.StepFit{TurningPoint: 1},
}
return ctx, alert, *frame, *cl
}
func TestSuccess(t *testing.T) {
paramset := map[string]string{
"master": "m",
"bot": "b",
"benchmark": "be",
"test": "me",
"subtest_1": "t",
}
ctx, alert, frame, cl := Setup(paramset)
mockAnomalyGrouper := ag_mock.NewAnomalyGrouper(t)
ag_notifier := NewAnomalyGroupNotifier(ctx, mockAnomalyGrouper)
regression_id := "550c78a3-ff99-4f28-8a46-106f81a34840"
mockAnomalyGrouper.On("ProcessRegressionInGroup",
ctx, alert, regression_id, int64(100), int64(200), "m/b/be/me/t", paramset).Return("", nil)
_, err := ag_notifier.RegressionFound(ctx, provider.Commit{CommitNumber: 200}, provider.Commit{CommitNumber: 100}, alert, &cl, &frame, regression_id)
assert.NoError(t, err)
}
func TestInvalidParamSet(t *testing.T) {
paramset := map[string]string{
"master": "mAsTeR",
"bot": "bOt",
"test": "tEsT",
}
ctx, alert, frame, cl := Setup(paramset)
mockAnomalyGrouper := ag_mock.NewAnomalyGrouper(t)
ag_notifier := NewAnomalyGroupNotifier(ctx, mockAnomalyGrouper)
_, err := ag_notifier.RegressionFound(ctx, provider.Commit{}, provider.Commit{}, alert, &cl, &frame, "")
assert.Error(t, err)
assert.Contains(t, err.Error(), "Invalid paramset")
}
func TestFailedProcess(t *testing.T) {
paramset := map[string]string{
"master": "m",
"bot": "b",
"benchmark": "be",
"test": "me",
"subtest_1": "t",
}
ctx, alert, frame, cl := Setup(paramset)
mockAnomalyGrouper := ag_mock.NewAnomalyGrouper(t)
ag_notifier := NewAnomalyGroupNotifier(ctx, mockAnomalyGrouper)
regression_id := "550c78a3-ff99-4f28-8a46-106f81a34840"
mockAnomalyGrouper.On("ProcessRegressionInGroup",
ctx, alert, regression_id, int64(100), int64(200), "m/b/be/me/t", paramset).Return("", errors.New(("oops")))
_, err := ag_notifier.RegressionFound(ctx, provider.Commit{CommitNumber: 200}, provider.Commit{CommitNumber: 100}, alert, &cl, &frame, regression_id)
assert.Error(t, err)
assert.Contains(t, err.Error(), "error processing regression")
}