| Index: go/src/infra/monitoring/analyzer/analyzer_test.go
|
| diff --git a/go/src/infra/monitoring/analyzer/analyzer_test.go b/go/src/infra/monitoring/analyzer/analyzer_test.go
|
| index bea8fa2f640ac4224b7e578cd07146415c5ac030..c0e919d480f289c617587eadf29cd80ad3a4165b 100644
|
| --- a/go/src/infra/monitoring/analyzer/analyzer_test.go
|
| +++ b/go/src/infra/monitoring/analyzer/analyzer_test.go
|
| @@ -101,7 +101,7 @@ func TestMasterAlerts(t *testing.T) {
|
| },
|
| }
|
|
|
| - a := New(&mockClient{}, 10)
|
| + a := New(&mockClient{}, 0, 10)
|
|
|
| for _, test := range tests {
|
| a.now = fakeNow(test.t)
|
| @@ -124,12 +124,13 @@ func TestBuilderAlerts(t *testing.T) {
|
| }{
|
| {
|
| name: "Empty",
|
| + url: "https://build.chromium.org/p/fake.master/json",
|
| wantBuilders: []messages.Alert{},
|
| wantMasters: []messages.Alert{},
|
| },
|
| {
|
| name: "No Alerts",
|
| - url: "http://fake.master",
|
| + url: "https://build.chromium.org/p/fake.master/json",
|
| be: messages.BuildExtract{
|
| CreatedTimestamp: messages.EpochTime(100),
|
| },
|
| @@ -139,7 +140,7 @@ func TestBuilderAlerts(t *testing.T) {
|
| },
|
| }
|
|
|
| - a := New(&mockClient{}, 10)
|
| + a := New(&mockClient{}, 0, 10)
|
|
|
| for _, test := range tests {
|
| a.now = fakeNow(test.t)
|
| @@ -213,10 +214,11 @@ func TestLittleBBuilderAlerts(t *testing.T) {
|
| time: time.Unix(0, 0).Add(4 * time.Hour),
|
| wantAlerts: []messages.Alert{
|
| {
|
| - Key: "fake.master.fake.builder.hung",
|
| - Title: "fake.master.fake.builder is hung in step fake_step.",
|
| - Time: messages.TimeToEpochTime(time.Unix(0, 0).Add(4 * time.Hour)),
|
| - Body: "fake.master.fake.builder has been building for 3h59m50s (last step update 1970-01-01 00:00:10 +0000 UTC), past the alerting threshold of 3h0m0s",
|
| + Key: "fake.master.fake.builder.hung",
|
| + Title: "fake.master.fake.builder is hung in step fake_step.",
|
| + Time: messages.TimeToEpochTime(time.Unix(0, 0).Add(4 * time.Hour)),
|
| + Body: "fake.master.fake.builder has been building for 3h59m50s (last step update 1970-01-01 00:00:10 +0000 UTC), past the alerting threshold of 3h0m0s",
|
| + Severity: 1,
|
| Links: []messages.Link{
|
| {Title: "Builder", Href: "https://build.chromium.org/p/fake.master/builders/fake.builder"},
|
| {Title: "Last build", Href: "https://build.chromium.org/p/fake.master/builders/fake.builder/builds/3"},
|
| @@ -228,7 +230,7 @@ func TestLittleBBuilderAlerts(t *testing.T) {
|
| },
|
| }
|
|
|
| - a := New(nil, 10)
|
| + a := New(nil, 0, 10)
|
|
|
| for _, test := range tests {
|
| a.now = fakeNow(test.time)
|
| @@ -302,10 +304,10 @@ func TestReasonsForFailure(t *testing.T) {
|
| },
|
| },
|
| testResults: &messages.TestResults{
|
| - Tests: map[string]messages.TestResult{
|
| - "test a": messages.TestResult{
|
| - Expected: "PASS",
|
| - Actual: "FAIL",
|
| + Tests: map[string]interface{}{
|
| + "test a": map[string]interface{}{
|
| + "expected": "PASS",
|
| + "actual": "FAIL",
|
| },
|
| },
|
| },
|
| @@ -314,7 +316,7 @@ func TestReasonsForFailure(t *testing.T) {
|
| }
|
|
|
| mc := &mockClient{}
|
| - a := New(mc, 10)
|
| + a := New(mc, 0, 10)
|
|
|
| for _, test := range tests {
|
| mc.testResults = test.testResults
|
| @@ -390,7 +392,7 @@ func TestStepFailures(t *testing.T) {
|
| }
|
|
|
| mc := &mockClient{}
|
| - a := New(mc, 10)
|
| + a := New(mc, 0, 10)
|
|
|
| for _, test := range tests {
|
| mc.build = test.b
|
| @@ -405,6 +407,79 @@ func TestStepFailures(t *testing.T) {
|
| }
|
| }
|
|
|
| +func TestStepFailureAlerts(t *testing.T) {
|
| + tests := []struct {
|
| + name string
|
| + failures []stepFailure
|
| + testResults messages.TestResults
|
| + alerts []messages.Alert
|
| + err error
|
| + }{
|
| + {
|
| + name: "empty",
|
| + alerts: []messages.Alert{},
|
| + },
|
| + {
|
| + name: "single failure",
|
| + failures: []stepFailure{
|
| + {
|
| + masterName: "fake.master",
|
| + builderName: "fake.builder",
|
| + build: messages.Builds{
|
| + Number: 2,
|
| + },
|
| + step: messages.Steps{
|
| + Name: "steps",
|
| + },
|
| + },
|
| + {
|
| + masterName: "fake.master",
|
| + builderName: "fake.builder",
|
| + build: messages.Builds{
|
| + Number: 42,
|
| + },
|
| + step: messages.Steps{
|
| + Name: "fake_tests",
|
| + },
|
| + },
|
| + },
|
| + testResults: messages.TestResults{},
|
| + alerts: []messages.Alert{
|
| + {
|
| + Key: "fake.master.fake.builder.fake_tests.",
|
| + Title: "Builder step failure: fake.master.fake.builder",
|
| + Type: "buildfailure",
|
| + Extension: messages.BuildFailure{
|
| + Builders: []messages.AlertedBuilder{
|
| + {
|
| + Name: "fake.builder",
|
| + URL: "https://build.chromium.org/p/fake.master/builders/fake.builder",
|
| + FirstFailure: 42,
|
| + LatestFailure: 42,
|
| + },
|
| + },
|
| + },
|
| + },
|
| + },
|
| + },
|
| + }
|
| +
|
| + mc := &mockClient{}
|
| + a := New(mc, 0, 10)
|
| + a.now = fakeNow(time.Unix(0, 0))
|
| +
|
| + for _, test := range tests {
|
| + mc.testResults = &test.testResults
|
| + alerts, err := a.stepFailureAlerts(test.failures)
|
| + if !reflect.DeepEqual(alerts, test.alerts) {
|
| + t.Errorf("%s failed. Got:\n\t%+v, want:\n\t%+v", test.name, alerts, test.alerts)
|
| + }
|
| + if !reflect.DeepEqual(err, test.err) {
|
| + t.Errorf("%s failed. Got %+v, want %+v", test.name, err, test.err)
|
| + }
|
| + }
|
| +}
|
| +
|
| func TestLatestBuildStep(t *testing.T) {
|
| tests := []struct {
|
| name string
|
| @@ -524,7 +599,7 @@ func TestLatestBuildStep(t *testing.T) {
|
| },
|
| }
|
|
|
| - a := New(&mockClient{}, 10)
|
| + a := New(&mockClient{}, 0, 10)
|
| a.now = fakeNow(time.Unix(0, 0))
|
| for _, test := range tests {
|
| gotStep, gotUpdate, gotErr := a.latestBuildStep(&test.b)
|
|
|