transfer.sh/vendor/github.com/PuerkitoBio/ghost/handlers/context_test.go

84 lines
2 KiB
Go
Raw Normal View History

package handlers
import (
"fmt"
"net/http"
"net/http/httptest"
"testing"
)
func TestContext(t *testing.T) {
key := "key"
val := 10
body := "this is the output"
h2 := wrappedHandler(t, key, val, body)
// Create the context handler with a wrapped handler
h := ContextHandler(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
ctx, _ := GetContext(w)
assertTrue(ctx != nil, "expected context to be non-nil", t)
assertTrue(len(ctx) == 0, fmt.Sprintf("expected context to be empty, got %d", len(ctx)), t)
ctx[key] = val
h2.ServeHTTP(w, r)
}), 2)
s := httptest.NewServer(h)
defer s.Close()
// First call
res, err := http.DefaultClient.Get(s.URL)
if err != nil {
panic(err)
}
res.Body.Close()
// Second call, context should be cleaned at start
res, err = http.DefaultClient.Get(s.URL)
if err != nil {
panic(err)
}
assertStatus(http.StatusOK, res.StatusCode, t)
assertBody([]byte(body), res, t)
}
func TestWrappedContext(t *testing.T) {
key := "key"
val := 10
body := "this is the output"
h2 := wrappedHandler(t, key, val, body)
h := ContextHandler(LogHandler(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
ctx, _ := GetContext(w)
if !assertTrue(ctx != nil, "expected context to be non-nil", t) {
panic("ctx is nil")
}
assertTrue(len(ctx) == 0, fmt.Sprintf("expected context to be empty, got %d", len(ctx)), t)
ctx[key] = val
h2.ServeHTTP(w, r)
}), NewLogOptions(nil, "%s", "url")), 2)
s := httptest.NewServer(h)
defer s.Close()
res, err := http.DefaultClient.Get(s.URL)
if err != nil {
panic(err)
}
assertStatus(http.StatusOK, res.StatusCode, t)
assertBody([]byte(body), res, t)
}
func wrappedHandler(t *testing.T, k, v interface{}, body string) http.Handler {
return http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
ctx, _ := GetContext(w)
ac := ctx[k]
assertTrue(ac == v, fmt.Sprintf("expected value to be %v, got %v", v, ac), t)
// Actually write something
_, err := w.Write([]byte(body))
if err != nil {
panic(err)
}
})
}