1
0
mirror of https://github.com/oauth2-proxy/oauth2-proxy.git synced 2024-11-24 08:52:25 +02:00
oauth2-proxy/pkg/upstream/static_test.go
Nick Meves 602dac7852
Move Logging to Middleware Package (#1070)
* 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
2021-03-06 17:27:16 +00:00

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,
}),
)
})