1package api
2
3import (
4	"net/http"
5	"net/http/httptest"
6	"testing"
7
8	"github.com/docker/distribution/health"
9)
10
11// TestGETDownHandlerDoesNotChangeStatus ensures that calling the endpoint
12// /debug/health/down with METHOD GET returns a 404
13func TestGETDownHandlerDoesNotChangeStatus(t *testing.T) {
14	recorder := httptest.NewRecorder()
15
16	req, err := http.NewRequest("GET", "https://fakeurl.com/debug/health/down", nil)
17	if err != nil {
18		t.Errorf("Failed to create request.")
19	}
20
21	DownHandler(recorder, req)
22
23	if recorder.Code != 404 {
24		t.Errorf("Did not get a 404.")
25	}
26}
27
28// TestGETUpHandlerDoesNotChangeStatus ensures that calling the endpoint
29// /debug/health/down with METHOD GET returns a 404
30func TestGETUpHandlerDoesNotChangeStatus(t *testing.T) {
31	recorder := httptest.NewRecorder()
32
33	req, err := http.NewRequest("GET", "https://fakeurl.com/debug/health/up", nil)
34	if err != nil {
35		t.Errorf("Failed to create request.")
36	}
37
38	DownHandler(recorder, req)
39
40	if recorder.Code != 404 {
41		t.Errorf("Did not get a 404.")
42	}
43}
44
45// TestPOSTDownHandlerChangeStatus ensures the endpoint /debug/health/down changes
46// the status code of the response to 503
47// This test is order dependent, and should come before TestPOSTUpHandlerChangeStatus
48func TestPOSTDownHandlerChangeStatus(t *testing.T) {
49	recorder := httptest.NewRecorder()
50
51	req, err := http.NewRequest("POST", "https://fakeurl.com/debug/health/down", nil)
52	if err != nil {
53		t.Errorf("Failed to create request.")
54	}
55
56	DownHandler(recorder, req)
57
58	if recorder.Code != 200 {
59		t.Errorf("Did not get a 200.")
60	}
61
62	if len(health.CheckStatus()) != 1 {
63		t.Errorf("DownHandler didn't add an error check.")
64	}
65}
66
67// TestPOSTUpHandlerChangeStatus ensures the endpoint /debug/health/up changes
68// the status code of the response to 200
69func TestPOSTUpHandlerChangeStatus(t *testing.T) {
70	recorder := httptest.NewRecorder()
71
72	req, err := http.NewRequest("POST", "https://fakeurl.com/debug/health/up", nil)
73	if err != nil {
74		t.Errorf("Failed to create request.")
75	}
76
77	UpHandler(recorder, req)
78
79	if recorder.Code != 200 {
80		t.Errorf("Did not get a 200.")
81	}
82
83	if len(health.CheckStatus()) != 0 {
84		t.Errorf("UpHandler didn't remove the error check.")
85	}
86}
87