kuma
1package test
2
3import (
4"fmt"
5"net/http"
6"net/http/httptest"
7)
8
9const healthCheckPath = "/---/ready"
10
11type CheckedHttpServer interface {
12Server() *httptest.Server
13Ready() error
14}
15
16type healthCheckHandler struct {
17http.Handler
18}
19
20func (h *healthCheckHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
21if request.RequestURI == fmt.Sprintf("/%s", healthCheckPath) {
22writer.WriteHeader(200)
23return
24}
25h.Handler.ServeHTTP(writer, request)
26}
27
28type healthCheckServer struct {
29server *httptest.Server
30}
31
32func (s *healthCheckServer) Server() *httptest.Server {
33return s.server
34}
35
36func (s *healthCheckServer) Ready() error {
37res, err := http.DefaultClient.Get(fmt.Sprintf("%s/%s", s.server.URL, healthCheckPath))
38if err == nil {
39_ = res.Body.Close()
40}
41
42return err
43}
44
45func NewHttpServer(handler http.Handler) CheckedHttpServer {
46return &healthCheckServer{
47server: httptest.NewServer(&healthCheckHandler{
48handler,
49}),
50}
51}
52