mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2024-11-24 08:52:25 +02:00
98 lines
2.0 KiB
Go
98 lines
2.0 KiB
Go
package requests
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/oauth2-proxy/oauth2-proxy/v7/pkg/logger"
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var (
|
|
server *httptest.Server
|
|
serverAddr string
|
|
)
|
|
|
|
func TestRequetsSuite(t *testing.T) {
|
|
logger.SetOutput(GinkgoWriter)
|
|
logger.SetErrOutput(GinkgoWriter)
|
|
log.SetOutput(GinkgoWriter)
|
|
|
|
RegisterFailHandler(Fail)
|
|
RunSpecs(t, "Requests Suite")
|
|
}
|
|
|
|
var _ = BeforeSuite(func() {
|
|
// Set up a webserver that reflects requests
|
|
mux := http.NewServeMux()
|
|
mux.Handle("/json/", &testHTTPUpstream{})
|
|
mux.HandleFunc("/string/", func(rw http.ResponseWriter, _ *http.Request) {
|
|
rw.Write([]byte("OK"))
|
|
})
|
|
server = httptest.NewServer(mux)
|
|
serverAddr = fmt.Sprintf("http://%s", server.Listener.Addr().String())
|
|
})
|
|
|
|
var _ = AfterSuite(func() {
|
|
server.Close()
|
|
})
|
|
|
|
// testHTTPRequest is a struct used to capture the state of a request made to
|
|
// the test server
|
|
type testHTTPRequest struct {
|
|
Method string
|
|
Header http.Header
|
|
Body []byte
|
|
RequestURI string
|
|
}
|
|
|
|
type testHTTPUpstream struct{}
|
|
|
|
func (t *testHTTPUpstream) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
|
|
request, err := toTestHTTPRequest(req)
|
|
if err != nil {
|
|
t.writeError(rw, err)
|
|
return
|
|
}
|
|
|
|
data, err := json.Marshal(request)
|
|
if err != nil {
|
|
t.writeError(rw, err)
|
|
return
|
|
}
|
|
|
|
rw.Header().Set("Content-Type", "application/json")
|
|
rw.Write(data)
|
|
}
|
|
|
|
func (t *testHTTPUpstream) writeError(rw http.ResponseWriter, err error) {
|
|
rw.WriteHeader(500)
|
|
if err != nil {
|
|
rw.Write([]byte(err.Error()))
|
|
}
|
|
}
|
|
|
|
func toTestHTTPRequest(req *http.Request) (testHTTPRequest, error) {
|
|
requestBody := []byte{}
|
|
if req.Body != http.NoBody {
|
|
var err error
|
|
requestBody, err = ioutil.ReadAll(req.Body)
|
|
if err != nil {
|
|
return testHTTPRequest{}, err
|
|
}
|
|
}
|
|
|
|
return testHTTPRequest{
|
|
Method: req.Method,
|
|
Header: req.Header,
|
|
Body: requestBody,
|
|
RequestURI: req.RequestURI,
|
|
}, nil
|
|
}
|