mirror of
https://github.com/TwiN/gatus.git
synced 2025-01-20 21:08:39 +01:00
Increase test coverage
This commit is contained in:
parent
cafcc9d45b
commit
99fa632021
@ -277,72 +277,57 @@ func TestServiceStatusesHandler(t *testing.T) {
|
|||||||
secondResult.Timestamp = time.Time{}
|
secondResult.Timestamp = time.Time{}
|
||||||
router := CreateRouter(&config.Config{})
|
router := CreateRouter(&config.Config{})
|
||||||
|
|
||||||
request, _ := http.NewRequest("GET", "/api/v1/statuses", nil)
|
type Scenario struct {
|
||||||
|
Name string
|
||||||
|
Path string
|
||||||
|
ExpectedCode int
|
||||||
|
ExpectedBody string
|
||||||
|
}
|
||||||
|
scenarios := []Scenario{
|
||||||
|
{
|
||||||
|
Name: "no-pagination",
|
||||||
|
Path: "/api/v1/statuses",
|
||||||
|
ExpectedCode: http.StatusOK,
|
||||||
|
ExpectedBody: `{"group_name":{"name":"name","group":"group","key":"group_name","results":[{"status":200,"hostname":"example.org","duration":150000000,"errors":null,"conditionResults":[{"condition":"[STATUS] == 200","success":true},{"condition":"[RESPONSE_TIME] \u003c 500","success":true},{"condition":"[CERTIFICATE_EXPIRATION] \u003c 72h","success":true}],"success":true,"timestamp":"0001-01-01T00:00:00Z"},{"status":200,"hostname":"example.org","duration":750000000,"errors":["error-1","error-2"],"conditionResults":[{"condition":"[STATUS] == 200","success":true},{"condition":"[RESPONSE_TIME] \u003c 500","success":false},{"condition":"[CERTIFICATE_EXPIRATION] \u003c 72h","success":false}],"success":false,"timestamp":"0001-01-01T00:00:00Z"}]}}`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "pagination-first-result",
|
||||||
|
Path: "/api/v1/statuses?page=1&pageSize=1",
|
||||||
|
ExpectedCode: http.StatusOK,
|
||||||
|
ExpectedBody: `{"group_name":{"name":"name","group":"group","key":"group_name","results":[{"status":200,"hostname":"example.org","duration":750000000,"errors":["error-1","error-2"],"conditionResults":[{"condition":"[STATUS] == 200","success":true},{"condition":"[RESPONSE_TIME] \u003c 500","success":false},{"condition":"[CERTIFICATE_EXPIRATION] \u003c 72h","success":false}],"success":false,"timestamp":"0001-01-01T00:00:00Z"}]}}`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "pagination-second-result",
|
||||||
|
Path: "/api/v1/statuses?page=2&pageSize=1",
|
||||||
|
ExpectedCode: http.StatusOK,
|
||||||
|
ExpectedBody: `{"group_name":{"name":"name","group":"group","key":"group_name","results":[{"status":200,"hostname":"example.org","duration":150000000,"errors":null,"conditionResults":[{"condition":"[STATUS] == 200","success":true},{"condition":"[RESPONSE_TIME] \u003c 500","success":true},{"condition":"[CERTIFICATE_EXPIRATION] \u003c 72h","success":true}],"success":true,"timestamp":"0001-01-01T00:00:00Z"}]}}`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "pagination-no-results",
|
||||||
|
Path: "/api/v1/statuses?page=5&pageSize=20",
|
||||||
|
ExpectedCode: http.StatusOK,
|
||||||
|
ExpectedBody: `{"group_name":{"name":"name","group":"group","key":"group_name","results":[]}}`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "invalid-pagination-should-fall-back-to-default",
|
||||||
|
Path: "/api/v1/statuses?page=INVALID&pageSize=INVALID",
|
||||||
|
ExpectedCode: http.StatusOK,
|
||||||
|
ExpectedBody: `{"group_name":{"name":"name","group":"group","key":"group_name","results":[{"status":200,"hostname":"example.org","duration":150000000,"errors":null,"conditionResults":[{"condition":"[STATUS] == 200","success":true},{"condition":"[RESPONSE_TIME] \u003c 500","success":true},{"condition":"[CERTIFICATE_EXPIRATION] \u003c 72h","success":true}],"success":true,"timestamp":"0001-01-01T00:00:00Z"},{"status":200,"hostname":"example.org","duration":750000000,"errors":["error-1","error-2"],"conditionResults":[{"condition":"[STATUS] == 200","success":true},{"condition":"[RESPONSE_TIME] \u003c 500","success":false},{"condition":"[CERTIFICATE_EXPIRATION] \u003c 72h","success":false}],"success":false,"timestamp":"0001-01-01T00:00:00Z"}]}}`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, scenario := range scenarios {
|
||||||
|
t.Run(scenario.Name, func(t *testing.T) {
|
||||||
|
request, _ := http.NewRequest("GET", scenario.Path, nil)
|
||||||
responseRecorder := httptest.NewRecorder()
|
responseRecorder := httptest.NewRecorder()
|
||||||
router.ServeHTTP(responseRecorder, request)
|
router.ServeHTTP(responseRecorder, request)
|
||||||
if responseRecorder.Code != http.StatusOK {
|
if responseRecorder.Code != scenario.ExpectedCode {
|
||||||
t.Errorf("%s %s should have returned %d, but returned %d instead", request.Method, request.URL, http.StatusOK, responseRecorder.Code)
|
t.Errorf("%s %s should have returned %d, but returned %d instead", request.Method, request.URL, scenario.ExpectedCode, responseRecorder.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
output := responseRecorder.Body.String()
|
output := responseRecorder.Body.String()
|
||||||
expectedOutput := `{"group_name":{"name":"name","group":"group","key":"group_name","results":[{"status":200,"hostname":"example.org","duration":150000000,"errors":null,"conditionResults":[{"condition":"[STATUS] == 200","success":true},{"condition":"[RESPONSE_TIME] \u003c 500","success":true},{"condition":"[CERTIFICATE_EXPIRATION] \u003c 72h","success":true}],"success":true,"timestamp":"0001-01-01T00:00:00Z"},{"status":200,"hostname":"example.org","duration":750000000,"errors":["error-1","error-2"],"conditionResults":[{"condition":"[STATUS] == 200","success":true},{"condition":"[RESPONSE_TIME] \u003c 500","success":false},{"condition":"[CERTIFICATE_EXPIRATION] \u003c 72h","success":false}],"success":false,"timestamp":"0001-01-01T00:00:00Z"}]}}`
|
if output != scenario.ExpectedBody {
|
||||||
if output != expectedOutput {
|
t.Errorf("expected:\n %s\n\ngot:\n %s", scenario.ExpectedBody, output)
|
||||||
t.Errorf("expected:\n %s\n\ngot:\n %s", expectedOutput, output)
|
}
|
||||||
}
|
})
|
||||||
}
|
|
||||||
|
|
||||||
func TestServiceStatusesHandlerWithPagination(t *testing.T) {
|
|
||||||
defer storage.Get().Clear()
|
|
||||||
defer cache.Clear()
|
|
||||||
staticFolder = "../web/static"
|
|
||||||
firstResult := &testSuccessfulResult
|
|
||||||
secondResult := &testUnsuccessfulResult
|
|
||||||
storage.Get().Insert(&testService, firstResult)
|
|
||||||
storage.Get().Insert(&testService, secondResult)
|
|
||||||
// Can't be bothered dealing with timezone issues on the worker that runs the automated tests
|
|
||||||
firstResult.Timestamp = time.Time{}
|
|
||||||
secondResult.Timestamp = time.Time{}
|
|
||||||
router := CreateRouter(&config.Config{})
|
|
||||||
|
|
||||||
request, _ := http.NewRequest("GET", "/api/v1/statuses?page=2&pageSize=1", nil)
|
|
||||||
responseRecorder := httptest.NewRecorder()
|
|
||||||
router.ServeHTTP(responseRecorder, request)
|
|
||||||
if responseRecorder.Code != http.StatusOK {
|
|
||||||
t.Errorf("%s %s should have returned %d, but returned %d instead", request.Method, request.URL, http.StatusOK, responseRecorder.Code)
|
|
||||||
}
|
|
||||||
|
|
||||||
output := responseRecorder.Body.String()
|
|
||||||
expectedOutput := `{"group_name":{"name":"name","group":"group","key":"group_name","results":[{"status":200,"hostname":"example.org","duration":150000000,"errors":null,"conditionResults":[{"condition":"[STATUS] == 200","success":true},{"condition":"[RESPONSE_TIME] \u003c 500","success":true},{"condition":"[CERTIFICATE_EXPIRATION] \u003c 72h","success":true}],"success":true,"timestamp":"0001-01-01T00:00:00Z"}]}}`
|
|
||||||
if output != expectedOutput {
|
|
||||||
t.Errorf("expected:\n %s\n\ngot:\n %s", expectedOutput, output)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestServiceStatusesHandlerWithBadPagination checks that the behavior when bad pagination parameters are passed
|
|
||||||
// is to use the default pagination parameters
|
|
||||||
func TestServiceStatusesHandlerWithBadPagination(t *testing.T) {
|
|
||||||
defer storage.Get().Clear()
|
|
||||||
defer cache.Clear()
|
|
||||||
staticFolder = "../web/static"
|
|
||||||
firstResult := &testSuccessfulResult
|
|
||||||
secondResult := &testUnsuccessfulResult
|
|
||||||
storage.Get().Insert(&testService, firstResult)
|
|
||||||
storage.Get().Insert(&testService, secondResult)
|
|
||||||
// Can't be bothered dealing with timezone issues on the worker that runs the automated tests
|
|
||||||
firstResult.Timestamp = time.Time{}
|
|
||||||
secondResult.Timestamp = time.Time{}
|
|
||||||
router := CreateRouter(&config.Config{})
|
|
||||||
|
|
||||||
request, _ := http.NewRequest("GET", "/api/v1/statuses?page=INVALID&pageSize=INVALID", nil)
|
|
||||||
responseRecorder := httptest.NewRecorder()
|
|
||||||
router.ServeHTTP(responseRecorder, request)
|
|
||||||
if responseRecorder.Code != http.StatusOK {
|
|
||||||
t.Errorf("%s %s should have returned %d, but returned %d instead", request.Method, request.URL, http.StatusOK, responseRecorder.Code)
|
|
||||||
}
|
|
||||||
|
|
||||||
output := responseRecorder.Body.String()
|
|
||||||
expectedOutput := `{"group_name":{"name":"name","group":"group","key":"group_name","results":[{"status":200,"hostname":"example.org","duration":150000000,"errors":null,"conditionResults":[{"condition":"[STATUS] == 200","success":true},{"condition":"[RESPONSE_TIME] \u003c 500","success":true},{"condition":"[CERTIFICATE_EXPIRATION] \u003c 72h","success":true}],"success":true,"timestamp":"0001-01-01T00:00:00Z"},{"status":200,"hostname":"example.org","duration":750000000,"errors":["error-1","error-2"],"conditionResults":[{"condition":"[STATUS] == 200","success":true},{"condition":"[RESPONSE_TIME] \u003c 500","success":false},{"condition":"[CERTIFICATE_EXPIRATION] \u003c 72h","success":false}],"success":false,"timestamp":"0001-01-01T00:00:00Z"}]}}`
|
|
||||||
if output != expectedOutput {
|
|
||||||
t.Errorf("expected:\n %s\n\ngot:\n %s", expectedOutput, output)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user