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