Refactor web tests to use testify.

Signed-off-by: Paweł Szulik <paul.szulik@gmail.com>
This commit is contained in:
Paweł Szulik 2021-09-03 11:51:27 +02:00 committed by Bryan Boreham
parent d5eb636a89
commit 6e9cca8158
2 changed files with 37 additions and 96 deletions

View file

@ -216,18 +216,11 @@ type rulesRetrieverMock struct {
func (m *rulesRetrieverMock) CreateAlertingRules() { func (m *rulesRetrieverMock) CreateAlertingRules() {
expr1, err := parser.ParseExpr(`absent(test_metric3) != 1`) expr1, err := parser.ParseExpr(`absent(test_metric3) != 1`)
if err != nil { require.NoError(m.testing, err)
m.testing.Fatalf("unable to parse alert expression: %s", err)
}
expr2, err := parser.ParseExpr(`up == 1`) expr2, err := parser.ParseExpr(`up == 1`)
if err != nil { require.NoError(m.testing, err)
m.testing.Fatalf("Unable to parse alert expression: %s", err)
}
expr3, err := parser.ParseExpr(`vector(1)`) expr3, err := parser.ParseExpr(`vector(1)`)
if err != nil { require.NoError(m.testing, err)
m.testing.Fatalf("Unable to parse alert expression: %s", err)
}
rule1 := rules.NewAlertingRule( rule1 := rules.NewAlertingRule(
"test_metric3", "test_metric3",
@ -302,9 +295,7 @@ func (m *rulesRetrieverMock) CreateRuleGroups() {
} }
recordingExpr, err := parser.ParseExpr(`vector(1)`) recordingExpr, err := parser.ParseExpr(`vector(1)`)
if err != nil { require.NoError(m.testing, err, "unable to parse alert expression: %s", err)
m.testing.Fatalf("unable to parse alert expression: %s", err)
}
recordingRule := rules.NewRecordingRule("recording-rule-1", recordingExpr, labels.Labels{}) recordingRule := rules.NewRecordingRule("recording-rule-1", recordingExpr, labels.Labels{})
r = append(r, recordingRule) r = append(r, recordingRule)
@ -714,9 +705,7 @@ func TestQueryExemplars(t *testing.T) {
for _, te := range tc.exemplars { for _, te := range tc.exemplars {
for _, e := range te.Exemplars { for _, e := range te.Exemplars {
_, err := es.AppendExemplar(0, te.SeriesLabels, e) _, err := es.AppendExemplar(0, te.SeriesLabels, e)
if err != nil { require.NoError(t, err)
t.Fatal(err)
}
} }
} }
@ -2832,9 +2821,7 @@ func testEndpoints(t *testing.T, api *API, tr *testTargetRetriever, es storage.E
} }
req, err := request(method, test.query) req, err := request(method, test.query)
if err != nil { require.NoError(t, err)
t.Fatal(err)
}
tr.ResetMetadataStore() tr.ResetMetadataStore()
for _, tm := range test.metadata { for _, tm := range test.metadata {
@ -2844,9 +2831,7 @@ func testEndpoints(t *testing.T, api *API, tr *testTargetRetriever, es storage.E
for _, te := range test.exemplars { for _, te := range test.exemplars {
for _, e := range te.Exemplars { for _, e := range te.Exemplars {
_, err := es.AppendExemplar(0, te.SeriesLabels, e) _, err := es.AppendExemplar(0, te.SeriesLabels, e)
if err != nil { require.NoError(t, err)
t.Fatal(err)
}
} }
} }
@ -2882,17 +2867,11 @@ func describeAPIFunc(f apiFunc) string {
func assertAPIError(t *testing.T, got *apiError, exp errorType) { func assertAPIError(t *testing.T, got *apiError, exp errorType) {
t.Helper() t.Helper()
if got != nil {
if exp == errorNone { if exp == errorNone {
t.Fatalf("Unexpected error: %s", got) require.Nil(t, got)
} } else {
if exp != got.typ { require.NotNil(t, got)
t.Fatalf("Expected error of type %q but got type %q (%q)", exp, got.typ, got) require.Equal(t, exp, got.typ, "(%q)", got)
}
return
}
if exp != errorNone {
t.Fatalf("Expected error of type %q but got none", exp)
} }
} }
@ -2906,13 +2885,7 @@ func assertAPIResponseLength(t *testing.T, got interface{}, expLen int) {
t.Helper() t.Helper()
gotLen := reflect.ValueOf(got).Len() gotLen := reflect.ValueOf(got).Len()
if gotLen != expLen { require.Equal(t, expLen, gotLen, "Response length does not match")
t.Fatalf(
"Response length does not match, expected:\n%d\ngot:\n%d",
expLen,
gotLen,
)
}
} }
func assertAPIResponseMetadataLen(t *testing.T, got interface{}, expLen int) { func assertAPIResponseMetadataLen(t *testing.T, got interface{}, expLen int) {
@ -2924,13 +2897,7 @@ func assertAPIResponseMetadataLen(t *testing.T, got interface{}, expLen int) {
gotLen += len(m) gotLen += len(m)
} }
if gotLen != expLen { require.Equal(t, expLen, gotLen, "Amount of metadata in the response does not match")
t.Fatalf(
"Amount of metadata in the response does not match, expected:\n%d\ngot:\n%d",
expLen,
gotLen,
)
}
} }
type fakeDB struct { type fakeDB struct {
@ -3271,26 +3238,18 @@ func TestRespondError(t *testing.T) {
defer s.Close() defer s.Close()
resp, err := http.Get(s.URL) resp, err := http.Get(s.URL)
if err != nil { require.NoError(t, err, "Error on test request: %s", err)
t.Fatalf("Error on test request: %s", err)
}
body, err := io.ReadAll(resp.Body) body, err := io.ReadAll(resp.Body)
defer resp.Body.Close() defer resp.Body.Close()
if err != nil { require.NoError(t, err, "Error reading response body: %s", err)
t.Fatalf("Error reading response body: %s", err) want, have := http.StatusServiceUnavailable, resp.StatusCode
} require.Equal(t, want, have, "Return code %d expected in error response but got %d", want, have)
h := resp.Header.Get("Content-Type")
if want, have := http.StatusServiceUnavailable, resp.StatusCode; want != have { require.Equal(t, "application/json", h, "Expected Content-Type %q but got %q", "application/json", h)
t.Fatalf("Return code %d expected in error response but got %d", want, have)
}
if h := resp.Header.Get("Content-Type"); h != "application/json" {
t.Fatalf("Expected Content-Type %q but got %q", "application/json", h)
}
var res Response var res Response
if err = json.Unmarshal(body, &res); err != nil { err = json.Unmarshal(body, &res)
t.Fatalf("Error unmarshaling JSON body: %s", err) require.NoError(t, err, "Error unmarshaling JSON body: %s", err)
}
exp := &Response{ exp := &Response{
Status: statusError, Status: statusError,
@ -3419,17 +3378,13 @@ func TestParseTime(t *testing.T) {
for _, test := range tests { for _, test := range tests {
ts, err := parseTime(test.input) ts, err := parseTime(test.input)
if err != nil && !test.fail { if !test.fail {
t.Errorf("Unexpected error for %q: %s", test.input, err) require.NoError(t, err, "Unexpected error for %q: %s", test.input, err)
require.NotNil(t, ts)
require.True(t, ts.Equal(test.result), "Expected time %v for input %q but got %v", test.result, test.input, ts)
continue continue
} }
if err == nil && test.fail { require.Error(t, err, "Expected error for %q but got none", test.input)
t.Errorf("Expected error for %q but got none", test.input)
continue
}
if !test.fail && !ts.Equal(test.result) {
t.Errorf("Expected time %v for input %q but got %v", test.result, test.input, ts)
}
} }
} }
@ -3473,17 +3428,12 @@ func TestParseDuration(t *testing.T) {
for _, test := range tests { for _, test := range tests {
d, err := parseDuration(test.input) d, err := parseDuration(test.input)
if err != nil && !test.fail { if !test.fail {
t.Errorf("Unexpected error for %q: %s", test.input, err) require.NoError(t, err, "Unexpected error for %q: %s", test.input, err)
require.Equal(t, test.result, d, "Expected duration %v for input %q but got %v", test.result, test.input, d)
continue continue
} }
if err == nil && test.fail { require.Error(t, err, "Expected error for %q but got none", test.input)
t.Errorf("Expected error for %q but got none", test.input)
continue
}
if !test.fail && d != test.result {
t.Errorf("Expected duration %v for input %q but got %v", test.result, test.input, d)
}
} }
} }
@ -3496,18 +3446,11 @@ func TestOptionsMethod(t *testing.T) {
defer s.Close() defer s.Close()
req, err := http.NewRequest("OPTIONS", s.URL+"/any_path", nil) req, err := http.NewRequest("OPTIONS", s.URL+"/any_path", nil)
if err != nil { require.NoError(t, err, "Error creating OPTIONS request")
t.Fatalf("Error creating OPTIONS request: %s", err)
}
client := &http.Client{} client := &http.Client{}
resp, err := client.Do(req) resp, err := client.Do(req)
if err != nil { require.NoError(t, err, "Error executing OPTIONS request")
t.Fatalf("Error executing OPTIONS request: %s", err) require.Equal(t, http.StatusNoContent, resp.StatusCode)
}
if resp.StatusCode != http.StatusNoContent {
t.Fatalf("Expected status %d, got %d", http.StatusNoContent, resp.StatusCode)
}
} }
func TestTSDBStatus(t *testing.T) { func TestTSDBStatus(t *testing.T) {
@ -3546,9 +3489,7 @@ func TestTSDBStatus(t *testing.T) {
api := &API{db: tc.db, gatherer: prometheus.DefaultGatherer} api := &API{db: tc.db, gatherer: prometheus.DefaultGatherer}
endpoint := tc.endpoint(api) endpoint := tc.endpoint(api)
req, err := http.NewRequest(tc.method, fmt.Sprintf("?%s", tc.values.Encode()), nil) req, err := http.NewRequest(tc.method, fmt.Sprintf("?%s", tc.values.Encode()), nil)
if err != nil { require.NoError(t, err, "Error when creating test request")
t.Fatalf("Error when creating test request: %s", err)
}
res := endpoint(req) res := endpoint(req)
assertAPIError(t, res.err, tc.errType) assertAPIError(t, res.err, tc.errType)
}) })

View file

@ -440,7 +440,7 @@ func TestShutdownWithStaleConnection(t *testing.T) {
select { select {
case <-closed: case <-closed:
case <-time.After(timeout + 5*time.Second): case <-time.After(timeout + 5*time.Second):
t.Fatalf("Server still running after read timeout.") require.FailNow(t, "Server still running after read timeout.")
} }
} }
@ -502,7 +502,7 @@ func TestHandleMultipleQuitRequests(t *testing.T) {
select { select {
case <-closed: case <-closed:
case <-time.After(5 * time.Second): case <-time.After(5 * time.Second):
t.Fatalf("Server still running after 5 seconds.") require.FailNow(t, "Server still running after 5 seconds.")
} }
} }