4a3fe87a39
* Allow max request size to be user-specified This turned out to be way more impactful than I'd expected because I felt like the right granularity was per-listener, since an org may want to treat external clients differently from internal clients. It's pretty straightforward though. This also introduces actually using request contexts for values, which so far we have not done (using our own logical.Request struct instead), but this allows non-logical methods to still get this benefit. * Switch to ioutil.ReadAll()
60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
package http
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/vault/vault"
|
|
)
|
|
|
|
func TestListener(tb testing.TB) (net.Listener, string) {
|
|
fail := func(format string, args ...interface{}) {
|
|
panic(fmt.Sprintf(format, args...))
|
|
}
|
|
if tb != nil {
|
|
fail = tb.Fatalf
|
|
}
|
|
|
|
ln, err := net.Listen("tcp", "127.0.0.1:0")
|
|
if err != nil {
|
|
fail("err: %s", err)
|
|
}
|
|
addr := "http://" + ln.Addr().String()
|
|
return ln, addr
|
|
}
|
|
|
|
func TestServerWithListener(tb testing.TB, ln net.Listener, addr string, core *vault.Core) {
|
|
// Create a muxer to handle our requests so that we can authenticate
|
|
// for tests.
|
|
mux := http.NewServeMux()
|
|
mux.Handle("/_test/auth", http.HandlerFunc(testHandleAuth))
|
|
mux.Handle("/", Handler(&vault.HandlerProperties{
|
|
Core: core,
|
|
MaxRequestSize: DefaultMaxRequestSize,
|
|
}))
|
|
|
|
server := &http.Server{
|
|
Addr: ln.Addr().String(),
|
|
Handler: mux,
|
|
}
|
|
go server.Serve(ln)
|
|
}
|
|
|
|
func TestServer(tb testing.TB, core *vault.Core) (net.Listener, string) {
|
|
ln, addr := TestListener(tb)
|
|
TestServerWithListener(tb, ln, addr, core)
|
|
return ln, addr
|
|
}
|
|
|
|
func TestServerAuth(tb testing.TB, addr string, token string) {
|
|
if _, err := http.Get(addr + "/_test/auth?token=" + token); err != nil {
|
|
tb.Fatalf("error authenticating: %s", err)
|
|
}
|
|
}
|
|
|
|
func testHandleAuth(w http.ResponseWriter, req *http.Request) {
|
|
respondOk(w, nil)
|
|
}
|