| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package analyzer | 5 package analyzer |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "fmt" | 8 "fmt" |
| 9 "infra/libs/testing/ansidiff" | 9 "infra/libs/testing/ansidiff" |
| 10 "infra/monitoring/client" | 10 "infra/monitoring/client" |
| (...skipping 904 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 915 }, | 915 }, |
| 916 step: messages.Step{ | 916 step: messages.Step{ |
| 917 Name: "fake_tests", | 917 Name: "fake_tests", |
| 918 }, | 918 }, |
| 919 }, | 919 }, |
| 920 }, | 920 }, |
| 921 testResults: messages.TestResults{}, | 921 testResults: messages.TestResults{}, |
| 922 alerts: []messages.Alert{ | 922 alerts: []messages.Alert{ |
| 923 { | 923 { |
| 924 Key: "fake.master.fake.builder.fake_te
sts", | 924 Key: "fake.master.fake.builder.fake_te
sts", |
| 925 » » » » » Title: "Builder step failure: fake.maste
r.fake.builder", | 925 » » » » » Title: "fake.builder step failure: fake.
master.fake.builder", |
| 926 » » » » » Body: "fake_tests failing on fake.maste
r/fake.builder", |
| 926 Type: "buildfailure", | 927 Type: "buildfailure", |
| 927 Extension: messages.BuildFailure{ | 928 Extension: messages.BuildFailure{ |
| 928 Builders: []messages.AlertedBuil
der{ | 929 Builders: []messages.AlertedBuil
der{ |
| 929 { | 930 { |
| 930 Name: "
fake.builder", | 931 Name: "
fake.builder", |
| 931 URL: "
https://build.chromium.org/p/fake.master/builders/fake.builder", | 932 URL: "
https://build.chromium.org/p/fake.master/builders/fake.builder", |
| 932 FirstFailure: 4
2, | 933 FirstFailure: 4
2, |
| 933 LatestFailure: 4
2, | 934 LatestFailure: 4
2, |
| 934 }, | 935 }, |
| 935 }, | 936 }, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 947 } | 948 } |
| 948 | 949 |
| 949 mc := &mockReader{} | 950 mc := &mockReader{} |
| 950 a := New(mc, 0, 10) | 951 a := New(mc, 0, 10) |
| 951 a.Now = fakeNow(time.Unix(0, 0)) | 952 a.Now = fakeNow(time.Unix(0, 0)) |
| 952 | 953 |
| 953 for _, test := range tests { | 954 for _, test := range tests { |
| 954 mc.testResults = &test.testResults | 955 mc.testResults = &test.testResults |
| 955 alerts, err := a.stepFailureAlerts(test.failures) | 956 alerts, err := a.stepFailureAlerts(test.failures) |
| 956 if !reflect.DeepEqual(alerts, test.alerts) { | 957 if !reflect.DeepEqual(alerts, test.alerts) { |
| 957 » » » t.Errorf("%s failed. Got:\n\t%+v, want:\n\t%+v", test.na
me, alerts, test.alerts) | 958 » » » t.Errorf("%s failed. Got:\n\t%+v, want:\n\t%+v\nDiff: %s
", test.name, alerts, test.alerts, |
| 959 » » » » ansidiff.Diff(alerts, test.alerts)) |
| 958 } | 960 } |
| 959 if !reflect.DeepEqual(err, test.err) { | 961 if !reflect.DeepEqual(err, test.err) { |
| 960 t.Errorf("%s failed. Got %+v, want %+v", test.name, err,
test.err) | 962 t.Errorf("%s failed. Got %+v, want %+v", test.name, err,
test.err) |
| 961 } | 963 } |
| 962 } | 964 } |
| 963 } | 965 } |
| 964 | 966 |
| 965 func TestLatestBuildStep(t *testing.T) { | 967 func TestLatestBuildStep(t *testing.T) { |
| 966 tests := []struct { | 968 tests := []struct { |
| 967 name string | 969 name string |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1093 } | 1095 } |
| 1094 if gotErr != test.wantErr { | 1096 if gotErr != test.wantErr { |
| 1095 t.Errorf("%s failed. Got %s, want %s.", test.name, gotEr
r, test.wantErr) | 1097 t.Errorf("%s failed. Got %s, want %s.", test.name, gotEr
r, test.wantErr) |
| 1096 } | 1098 } |
| 1097 } | 1099 } |
| 1098 } | 1100 } |
| 1099 | 1101 |
| 1100 func TestExcludeFailure(t *testing.T) { | 1102 func TestExcludeFailure(t *testing.T) { |
| 1101 tests := []struct { | 1103 tests := []struct { |
| 1102 name string | 1104 name string |
| 1103 » » cfgs map[string]messages.MasterConfig | 1105 » » gk messages.GatekeeperConfig |
| 1104 master, builder, step string | 1106 master, builder, step string |
| 1105 want bool | 1107 want bool |
| 1106 }{ | 1108 }{ |
| 1107 { | 1109 { |
| 1108 name: "empty config", | 1110 name: "empty config", |
| 1109 master: "fake.master", | 1111 master: "fake.master", |
| 1110 builder: "fake.builder", | 1112 builder: "fake.builder", |
| 1111 step: "fake_step", | 1113 step: "fake_step", |
| 1112 want: false, | 1114 want: false, |
| 1113 }, | 1115 }, |
| 1114 { | 1116 { |
| 1115 name: "specifically excluded builder", | 1117 name: "specifically excluded builder", |
| 1116 master: "fake.master", | 1118 master: "fake.master", |
| 1117 builder: "fake.builder", | 1119 builder: "fake.builder", |
| 1118 step: "fake_step", | 1120 step: "fake_step", |
| 1119 » » » cfgs: map[string]messages.MasterConfig{ | 1121 » » » gk: messages.GatekeeperConfig{Masters: map[string][]mess
ages.MasterConfig{ |
| 1120 » » » » "fake.master": { | 1122 » » » » "fake.master": {{ |
| 1121 ExcludedBuilders: []string{"fake.builder
"}, | 1123 ExcludedBuilders: []string{"fake.builder
"}, |
| 1122 » » » » }, | 1124 » » » » }}, |
| 1123 » » » }, | 1125 » » » }}, |
| 1124 want: true, | 1126 want: true, |
| 1125 }, | 1127 }, |
| 1126 { | 1128 { |
| 1127 name: "specifically excluded master step", | 1129 name: "specifically excluded master step", |
| 1128 master: "fake.master", | 1130 master: "fake.master", |
| 1129 builder: "fake.builder", | 1131 builder: "fake.builder", |
| 1130 step: "fake_step", | 1132 step: "fake_step", |
| 1131 » » » cfgs: map[string]messages.MasterConfig{ | 1133 » » » gk: messages.GatekeeperConfig{Masters: map[string][]mess
ages.MasterConfig{ |
| 1132 » » » » "fake.master": { | 1134 » » » » "fake.master": {{ |
| 1133 ExcludedSteps: []string{"fake_step"}, | 1135 ExcludedSteps: []string{"fake_step"}, |
| 1134 » » » » }, | 1136 » » » » }}, |
| 1135 » » » }, | 1137 » » » }}, |
| 1136 want: true, | 1138 want: true, |
| 1137 }, | 1139 }, |
| 1138 { | 1140 { |
| 1139 name: "specifically excluded builder step", | 1141 name: "specifically excluded builder step", |
| 1140 master: "fake.master", | 1142 master: "fake.master", |
| 1141 builder: "fake.builder", | 1143 builder: "fake.builder", |
| 1142 step: "fake_step", | 1144 step: "fake_step", |
| 1143 » » » cfgs: map[string]messages.MasterConfig{ | 1145 » » » gk: messages.GatekeeperConfig{Masters: map[string][]mess
ages.MasterConfig{ |
| 1144 » » » » "fake.master": { | 1146 » » » » "fake.master": {{ |
| 1145 Builders: map[string]messages.BuilderCon
fig{ | 1147 Builders: map[string]messages.BuilderCon
fig{ |
| 1146 "fake.builder": { | 1148 "fake.builder": { |
| 1147 ExcludedSteps: []string{
"fake_step"}, | 1149 ExcludedSteps: []string{
"fake_step"}, |
| 1148 }, | 1150 }, |
| 1149 » » » » » }, | 1151 » » » » » }}, |
| 1150 » » » » }, | 1152 » » » » }}, |
| 1151 }, | 1153 }, |
| 1152 want: true, | 1154 want: true, |
| 1153 }, | 1155 }, |
| 1154 { | 1156 { |
| 1155 name: "wildcard builder excluded", | 1157 name: "wildcard builder excluded", |
| 1156 master: "fake.master", | 1158 master: "fake.master", |
| 1157 builder: "fake.builder", | 1159 builder: "fake.builder", |
| 1158 step: "fake_step", | 1160 step: "fake_step", |
| 1159 » » » cfgs: map[string]messages.MasterConfig{ | 1161 » » » gk: messages.GatekeeperConfig{Masters: map[string][]mess
ages.MasterConfig{ |
| 1160 » » » » "fake.master": { | 1162 » » » » "fake.master": {{ |
| 1161 ExcludedBuilders: []string{"*"}, | 1163 ExcludedBuilders: []string{"*"}, |
| 1162 » » » » }, | 1164 » » » » }}, |
| 1163 » » » }, | 1165 » » » }}, |
| 1164 want: true, | 1166 want: true, |
| 1165 }, | 1167 }, |
| 1166 } | 1168 } |
| 1167 | 1169 |
| 1168 a := New(&mockReader{}, 0, 10) | 1170 a := New(&mockReader{}, 0, 10) |
| 1169 for _, test := range tests { | 1171 for _, test := range tests { |
| 1170 » » a.MasterCfgs = test.cfgs | 1172 » » a.Gatekeeper = NewGatekeeperRules(test.gk) |
| 1171 » » got := a.excludeFailure(test.master, test.builder, test.step) | 1173 » » got := a.Gatekeeper.ExcludeFailure(test.master, test.builder, te
st.step) |
| 1172 if got != test.want { | 1174 if got != test.want { |
| 1173 t.Errorf("%s failed. Got: %+v, want: %+v", test.name, go
t, test.want) | 1175 t.Errorf("%s failed. Got: %+v, want: %+v", test.name, go
t, test.want) |
| 1174 } | 1176 } |
| 1175 } | 1177 } |
| 1176 } | 1178 } |
| OLD | NEW |