forked from TrueCloudLab/distribution
a1b49d3d17
Allow health checkers to abort if the request context is canceled. Modify the checkers to respect context cancelation and return wrapped errors so the caller of CheckStatus() would be able to discriminate true failed checks from checks which were aborted because the context became done. Signed-off-by: Cory Snider <csnider@mirantis.com>
87 lines
2.2 KiB
Go
87 lines
2.2 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/distribution/distribution/v3/health"
|
|
)
|
|
|
|
// TestGETDownHandlerDoesNotChangeStatus ensures that calling the endpoint
|
|
// /debug/health/down with METHOD GET returns a 404
|
|
func TestGETDownHandlerDoesNotChangeStatus(t *testing.T) {
|
|
recorder := httptest.NewRecorder()
|
|
|
|
req, err := http.NewRequest(http.MethodGet, "https://fakeurl.com/debug/health/down", nil)
|
|
if err != nil {
|
|
t.Errorf("Failed to create request.")
|
|
}
|
|
|
|
DownHandler(recorder, req)
|
|
|
|
if recorder.Code != 404 {
|
|
t.Errorf("Did not get a 404.")
|
|
}
|
|
}
|
|
|
|
// TestGETUpHandlerDoesNotChangeStatus ensures that calling the endpoint
|
|
// /debug/health/down with METHOD GET returns a 404
|
|
func TestGETUpHandlerDoesNotChangeStatus(t *testing.T) {
|
|
recorder := httptest.NewRecorder()
|
|
|
|
req, err := http.NewRequest(http.MethodGet, "https://fakeurl.com/debug/health/up", nil)
|
|
if err != nil {
|
|
t.Errorf("Failed to create request.")
|
|
}
|
|
|
|
DownHandler(recorder, req)
|
|
|
|
if recorder.Code != 404 {
|
|
t.Errorf("Did not get a 404.")
|
|
}
|
|
}
|
|
|
|
// TestPOSTDownHandlerChangeStatus ensures the endpoint /debug/health/down changes
|
|
// the status code of the response to 503
|
|
// This test is order dependent, and should come before TestPOSTUpHandlerChangeStatus
|
|
func TestPOSTDownHandlerChangeStatus(t *testing.T) {
|
|
recorder := httptest.NewRecorder()
|
|
|
|
req, err := http.NewRequest(http.MethodPost, "https://fakeurl.com/debug/health/down", nil)
|
|
if err != nil {
|
|
t.Errorf("Failed to create request.")
|
|
}
|
|
|
|
DownHandler(recorder, req)
|
|
|
|
if recorder.Code != 200 {
|
|
t.Errorf("Did not get a 200.")
|
|
}
|
|
|
|
if len(health.CheckStatus(context.Background())) != 1 {
|
|
t.Errorf("DownHandler didn't add an error check.")
|
|
}
|
|
}
|
|
|
|
// TestPOSTUpHandlerChangeStatus ensures the endpoint /debug/health/up changes
|
|
// the status code of the response to 200
|
|
func TestPOSTUpHandlerChangeStatus(t *testing.T) {
|
|
recorder := httptest.NewRecorder()
|
|
|
|
req, err := http.NewRequest(http.MethodPost, "https://fakeurl.com/debug/health/up", nil)
|
|
if err != nil {
|
|
t.Errorf("Failed to create request.")
|
|
}
|
|
|
|
UpHandler(recorder, req)
|
|
|
|
if recorder.Code != 200 {
|
|
t.Errorf("Did not get a 200.")
|
|
}
|
|
|
|
if len(health.CheckStatus(context.Background())) != 0 {
|
|
t.Errorf("UpHandler didn't remove the error check.")
|
|
}
|
|
}
|