mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2024-11-24 08:52:25 +02:00
602dac7852
* Use a specialized ResponseWriter in middleware * Track User & Upstream in RequestScope * Wrap responses in our custom ResponseWriter * Add tests for logging middleware * Inject upstream metadata into request scope * Use custom ResponseWriter only in logging middleware * Assume RequestScope is never nil
87 lines
2.2 KiB
Go
87 lines
2.2 KiB
Go
package upstream
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
|
|
middlewareapi "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/middleware"
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/ginkgo/extensions/table"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("Static Response Suite", func() {
|
|
const authenticated = "Authenticated"
|
|
var id string
|
|
|
|
BeforeEach(func() {
|
|
// Generate a random id before each test to check the GAP-Upstream-Address
|
|
// is being set correctly
|
|
idBytes := make([]byte, 16)
|
|
_, err := io.ReadFull(rand.Reader, idBytes)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
id = string(idBytes)
|
|
})
|
|
|
|
type serveHTTPTableInput struct {
|
|
requestPath string
|
|
staticCode int
|
|
expectedBody string
|
|
expectedCode int
|
|
}
|
|
|
|
DescribeTable("staticResponse ServeHTTP",
|
|
func(in *serveHTTPTableInput) {
|
|
var code *int
|
|
if in.staticCode != 0 {
|
|
code = &in.staticCode
|
|
}
|
|
handler := newStaticResponseHandler(id, code)
|
|
|
|
req := httptest.NewRequest("", in.requestPath, nil)
|
|
req = middlewareapi.AddRequestScope(req, &middlewareapi.RequestScope{})
|
|
|
|
rw := httptest.NewRecorder()
|
|
handler.ServeHTTP(rw, req)
|
|
|
|
scope := middlewareapi.GetRequestScope(req)
|
|
Expect(scope.Upstream).To(Equal(id))
|
|
|
|
Expect(rw.Code).To(Equal(in.expectedCode))
|
|
Expect(rw.Body.String()).To(Equal(in.expectedBody))
|
|
},
|
|
Entry("with no given code", &serveHTTPTableInput{
|
|
requestPath: "/",
|
|
staticCode: 0, // Placeholder for nil
|
|
expectedBody: authenticated,
|
|
expectedCode: http.StatusOK,
|
|
}),
|
|
Entry("with status OK", &serveHTTPTableInput{
|
|
requestPath: "/abc",
|
|
staticCode: http.StatusOK,
|
|
expectedBody: authenticated,
|
|
expectedCode: http.StatusOK,
|
|
}),
|
|
Entry("with status NoContent", &serveHTTPTableInput{
|
|
requestPath: "/def",
|
|
staticCode: http.StatusNoContent,
|
|
expectedBody: authenticated,
|
|
expectedCode: http.StatusNoContent,
|
|
}),
|
|
Entry("with status NotFound", &serveHTTPTableInput{
|
|
requestPath: "/ghi",
|
|
staticCode: http.StatusNotFound,
|
|
expectedBody: authenticated,
|
|
expectedCode: http.StatusNotFound,
|
|
}),
|
|
Entry("with status Teapot", &serveHTTPTableInput{
|
|
requestPath: "/jkl",
|
|
staticCode: http.StatusTeapot,
|
|
expectedBody: authenticated,
|
|
expectedCode: http.StatusTeapot,
|
|
}),
|
|
)
|
|
})
|