blob: e10812bced0146a1f2468206626745e67a9ac194 [file] [log] [blame]
package notify
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"go.skia.org/infra/go/query"
"go.skia.org/infra/perf/go/alerts"
"go.skia.org/infra/perf/go/chromeperf"
mocks "go.skia.org/infra/perf/go/chromeperf/mock"
"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 TestInvalidQuery(t *testing.T) {
paramset := map[string]string{
"master": "m",
"somethingElse": "invalid",
}
testNotifierFunctions_InvalidParams_ReturnsError(paramset, t)
}
func TestMissingParamInQuery(t *testing.T) {
paramset := map[string]string{
"master": "m",
"benchmark": "b",
"subtest_1": "s1",
}
testNotifierFunctions_InvalidParams_ReturnsError(paramset, t)
}
func TestValidRegression_Success(t *testing.T) {
paramset := map[string]string{
"master": "m",
"bot": "testBot",
"benchmark": "b",
"test": "t",
"subtest_1": "s",
"improvement_direction": "down",
}
ctx := context.Background()
mockChromeperfClient := mocks.NewAnomalyApiClient(t)
startCommit := provider.Commit{
CommitNumber: 1,
}
endCommit := provider.Commit{
CommitNumber: 10,
}
chromePerfResponse := &chromeperf.ReportRegressionResponse{AnomalyId: "123", AlertGroupId: "567"}
mockChromeperfClient.On("ReportRegression", ctx, "m/testBot/b/t/s", int32(startCommit.CommitNumber), int32(endCommit.CommitNumber), "chromium", false, "testBot", true, mock.Anything, mock.Anything).Return(chromePerfResponse, nil)
notifier, _ := NewChromePerfNotifier(ctx, mockChromeperfClient)
key, _ := query.MakeKey(paramset)
frame := &frame.FrameResponse{}
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, Status: stepfit.HIGH},
}
anomalyId, err := notifier.RegressionFound(ctx, endCommit, startCommit, alerts.NewConfig(), cl, frame, "")
assert.Nil(t, err, "No error expected")
assert.Equal(t, chromePerfResponse.AnomalyId, anomalyId)
}
func TestValidRegressionMissing_Success(t *testing.T) {
paramset := map[string]string{
"master": "m",
"bot": "testBot",
"benchmark": "b",
"test": "t",
"subtest_1": "s",
"improvement_direction": "down",
}
ctx := context.Background()
mockChromeperfClient := mocks.NewAnomalyApiClient(t)
startCommit := provider.Commit{
CommitNumber: 1,
}
endCommit := provider.Commit{
CommitNumber: 10,
}
chromePerfResponse := &chromeperf.ReportRegressionResponse{AnomalyId: "123", AlertGroupId: "567"}
mockChromeperfClient.On("ReportRegression", ctx, "m/testBot/b/t/s", int32(startCommit.CommitNumber), int32(endCommit.CommitNumber), "chromium", true, "testBot", true, mock.Anything, mock.Anything).Return(chromePerfResponse, nil)
notifier, _ := NewChromePerfNotifier(ctx, mockChromeperfClient)
key, _ := query.MakeKey(paramset)
frame := &frame.FrameResponse{}
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, Status: stepfit.LOW},
}
err := notifier.RegressionMissing(ctx, endCommit, startCommit, alerts.NewConfig(), cl, frame, "ref")
assert.Nil(t, err, "No error expected")
}
func testNotifierFunctions_InvalidParams_ReturnsError(paramset map[string]string, t *testing.T) {
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},
}
notifier, _ := NewChromePerfNotifier(ctx, mocks.NewAnomalyApiClient(t))
_, err := notifier.RegressionFound(ctx, provider.Commit{}, provider.Commit{}, alert, cl, frame, "")
assert.NotNil(t, err, "Error expected due to invalid query")
err = notifier.RegressionMissing(ctx, provider.Commit{}, provider.Commit{}, alert, cl, frame, "")
assert.NotNil(t, err, "Error expected due to invalid query")
}