65 lines
2.1 KiB
Go
65 lines
2.1 KiB
Go
package stat
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/i-core/routegroup"
|
|
)
|
|
|
|
func TestHealthHandler(t *testing.T) {
|
|
rr := httptest.NewRecorder()
|
|
h := newHealthHandler()
|
|
h.ServeHTTP(rr, httptest.NewRequest(http.MethodGet, "http://example.org", nil))
|
|
testResp(t, rr, http.StatusOK, "application/json", map[string]interface{}{"status": "ok"})
|
|
}
|
|
|
|
func TestVersionHandler(t *testing.T) {
|
|
rr := httptest.NewRecorder()
|
|
h := newVersionHandler("test-version")
|
|
h.ServeHTTP(rr, httptest.NewRequest(http.MethodGet, "http://example.org", nil))
|
|
testResp(t, rr, http.StatusOK, "application/json", map[string]interface{}{"version": "test-version"})
|
|
}
|
|
|
|
func TestStatHandler(t *testing.T) {
|
|
var (
|
|
rr *httptest.ResponseRecorder
|
|
router = routegroup.NewRouter()
|
|
)
|
|
router.AddRoutes(NewHandler("test-version"), "/stat")
|
|
|
|
rr = httptest.NewRecorder()
|
|
router.ServeHTTP(rr, httptest.NewRequest(http.MethodGet, "/stat/health/alive", nil))
|
|
testResp(t, rr, http.StatusOK, "application/json", map[string]interface{}{"status": "ok"})
|
|
|
|
rr = httptest.NewRecorder()
|
|
router.ServeHTTP(rr, httptest.NewRequest(http.MethodGet, "/stat/health/ready", nil))
|
|
testResp(t, rr, http.StatusOK, "application/json", map[string]interface{}{"status": "ok"})
|
|
|
|
rr = httptest.NewRecorder()
|
|
router.ServeHTTP(rr, httptest.NewRequest(http.MethodGet, "/stat/version", nil))
|
|
testResp(t, rr, http.StatusOK, "application/json", map[string]interface{}{"version": "test-version"})
|
|
}
|
|
|
|
func testResp(t *testing.T, rr *httptest.ResponseRecorder, wantStatus int, wantMime string, wantBody interface{}) {
|
|
if rr.Code != wantStatus {
|
|
t.Errorf("got status %d, want status %d", rr.Code, wantStatus)
|
|
}
|
|
|
|
if gotMime := rr.Header().Get("Content-Type"); gotMime != wantMime {
|
|
t.Errorf("got content type %q, want content type %q", gotMime, wantMime)
|
|
}
|
|
|
|
var gotBody interface{}
|
|
if err := json.NewDecoder(rr.Body).Decode(&gotBody); err != nil {
|
|
t.Fatalf("failed to decode the request body: %s", err)
|
|
}
|
|
|
|
if !reflect.DeepEqual(gotBody, wantBody) {
|
|
t.Errorf("got body %#v, want body %#v", gotBody, wantBody)
|
|
}
|
|
}
|