mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2025-01-10 04:18:14 +02:00
113 lines
3.8 KiB
Go
113 lines
3.8 KiB
Go
package middleware
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/ginkgo/extensions/table"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("HealthCheck suite", func() {
|
|
type requestTableInput struct {
|
|
healthCheckPaths []string
|
|
healthCheckUserAgents []string
|
|
requestString string
|
|
headers map[string]string
|
|
expectedStatus int
|
|
expectedBody string
|
|
}
|
|
|
|
DescribeTable("when serving a request",
|
|
func(in *requestTableInput) {
|
|
req := httptest.NewRequest("", in.requestString, nil)
|
|
for k, v := range in.headers {
|
|
req.Header.Add(k, v)
|
|
}
|
|
|
|
rw := httptest.NewRecorder()
|
|
|
|
handler := NewHealthCheck(in.healthCheckPaths, in.healthCheckUserAgents)(http.NotFoundHandler())
|
|
handler.ServeHTTP(rw, req)
|
|
|
|
Expect(rw.Code).To(Equal(in.expectedStatus))
|
|
Expect(rw.Body.String()).To(Equal(in.expectedBody))
|
|
},
|
|
Entry("when requesting the healthcheck path", &requestTableInput{
|
|
healthCheckPaths: []string{"/ping"},
|
|
healthCheckUserAgents: []string{"hc/1.0"},
|
|
requestString: "http://example.com/ping",
|
|
headers: map[string]string{},
|
|
expectedStatus: 200,
|
|
expectedBody: "OK",
|
|
}),
|
|
Entry("when requesting a different path", &requestTableInput{
|
|
healthCheckPaths: []string{"/ping"},
|
|
healthCheckUserAgents: []string{"hc/1.0"},
|
|
requestString: "http://example.com/different",
|
|
headers: map[string]string{},
|
|
expectedStatus: 404,
|
|
expectedBody: "404 page not found\n",
|
|
}),
|
|
Entry("with a request from the health check user agent", &requestTableInput{
|
|
healthCheckPaths: []string{"/ping"},
|
|
healthCheckUserAgents: []string{"hc/1.0"},
|
|
requestString: "http://example.com/abc",
|
|
headers: map[string]string{
|
|
"User-Agent": "hc/1.0",
|
|
},
|
|
expectedStatus: 200,
|
|
expectedBody: "OK",
|
|
}),
|
|
Entry("with a request from a different user agent", &requestTableInput{
|
|
healthCheckPaths: []string{"/ping"},
|
|
healthCheckUserAgents: []string{"hc/1.0"},
|
|
requestString: "http://example.com/abc",
|
|
headers: map[string]string{
|
|
"User-Agent": "different",
|
|
},
|
|
expectedStatus: 404,
|
|
expectedBody: "404 page not found\n",
|
|
}),
|
|
Entry("with multiple paths, request one of the healthcheck paths", &requestTableInput{
|
|
healthCheckPaths: []string{"/ping", "/liveness_check", "/readiness_check"},
|
|
healthCheckUserAgents: []string{"hc/1.0"},
|
|
requestString: "http://example.com/readiness_check",
|
|
headers: map[string]string{},
|
|
expectedStatus: 200,
|
|
expectedBody: "OK",
|
|
}),
|
|
Entry("with multiple paths, request none of the healthcheck paths", &requestTableInput{
|
|
healthCheckPaths: []string{"/ping", "/liveness_check", "/readiness_check"},
|
|
healthCheckUserAgents: []string{"hc/1.0"},
|
|
requestString: "http://example.com/readiness",
|
|
headers: map[string]string{
|
|
"User-Agent": "user",
|
|
},
|
|
expectedStatus: 404,
|
|
expectedBody: "404 page not found\n",
|
|
}),
|
|
Entry("with multiple user agents, request from a health check user agent", &requestTableInput{
|
|
healthCheckPaths: []string{"/ping"},
|
|
healthCheckUserAgents: []string{"hc/1.0", "GoogleHC/1.0"},
|
|
requestString: "http://example.com/abc",
|
|
headers: map[string]string{
|
|
"User-Agent": "GoogleHC/1.0",
|
|
},
|
|
expectedStatus: 200,
|
|
expectedBody: "OK",
|
|
}),
|
|
Entry("with multiple user agents, request from none of the health check user agents", &requestTableInput{
|
|
healthCheckPaths: []string{"/ping"},
|
|
healthCheckUserAgents: []string{"hc/1.0", "GoogleHC/1.0"},
|
|
requestString: "http://example.com/abc",
|
|
headers: map[string]string{
|
|
"User-Agent": "user",
|
|
},
|
|
expectedStatus: 404,
|
|
expectedBody: "404 page not found\n",
|
|
}),
|
|
)
|
|
})
|