Source file
src/goji.io/middleware_test.go
Documentation: goji.io
1 package goji
2
3 import (
4 "net/http"
5 "testing"
6 )
7
8 func expectSequence(t *testing.T, ch chan string, seq ...string) {
9 for i, str := range seq {
10 if msg := <-ch; msg != str {
11 t.Errorf("[%d] expected %s, got %s", i, str, msg)
12 }
13 }
14 }
15
16 func TestMiddleware(t *testing.T) {
17 t.Parallel()
18
19 m := NewMux()
20 ch := make(chan string, 10)
21 m.Use(func(h http.Handler) http.Handler {
22 fn := func(w http.ResponseWriter, r *http.Request) {
23 ch <- "before one"
24 h.ServeHTTP(w, r)
25 ch <- "after one"
26 }
27 return http.HandlerFunc(fn)
28 })
29 m.Use(func(h http.Handler) http.Handler {
30 fn := func(w http.ResponseWriter, r *http.Request) {
31 ch <- "before two"
32 h.ServeHTTP(w, r)
33 ch <- "after two"
34 }
35 return http.HandlerFunc(fn)
36 })
37 m.Handle(boolPattern(true), http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
38 ch <- "handler"
39 }))
40
41 m.ServeHTTP(wr())
42
43 expectSequence(t, ch, "before one", "before two", "handler", "after two", "after one")
44 }
45
46 func makeMiddleware(ch chan string, name string) func(http.Handler) http.Handler {
47 return func(h http.Handler) http.Handler {
48 fn := func(w http.ResponseWriter, r *http.Request) {
49 ch <- "before " + name
50 h.ServeHTTP(w, r)
51 ch <- "after " + name
52 }
53 return http.HandlerFunc(fn)
54 }
55 }
56
57 func TestMiddlewareReconfigure(t *testing.T) {
58 t.Parallel()
59
60 m := NewMux()
61 ch := make(chan string, 10)
62 m.Use(makeMiddleware(ch, "one"))
63 m.Use(makeMiddleware(ch, "two"))
64 m.Handle(boolPattern(true), http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
65 ch <- "handler"
66 }))
67
68 w, r := wr()
69 m.ServeHTTP(w, r)
70
71 expectSequence(t, ch, "before one", "before two", "handler", "after two", "after one")
72
73 m.Use(makeMiddleware(ch, "three"))
74
75 w, r = wr()
76 m.ServeHTTP(w, r)
77
78 expectSequence(t, ch, "before one", "before two", "before three",
79 "handler", "after three", "after two", "after one")
80 }
81
View as plain text