initial implementation
This commit is contained in:
parent
f8b0abc517
commit
cb373e637b
16 changed files with 777 additions and 1 deletions
50
pkg/router/chain_test.go
Normal file
50
pkg/router/chain_test.go
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
package router
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.juancwu.dev/juancwu/lightmux/pkg/middleware"
|
||||
)
|
||||
|
||||
func tagMW(log *[]string, tag string) middleware.Middleware {
|
||||
return func(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
*log = append(*log, tag+":before")
|
||||
next.ServeHTTP(w, r)
|
||||
*log = append(*log, tag+":after")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestChainOrder(t *testing.T) {
|
||||
var log []string
|
||||
h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
log = append(log, "handler")
|
||||
})
|
||||
|
||||
wrapped := chain(h,
|
||||
[]middleware.Middleware{tagMW(&log, "g1"), tagMW(&log, "g2")},
|
||||
[]middleware.Middleware{tagMW(&log, "r1"), tagMW(&log, "r2")},
|
||||
)
|
||||
|
||||
req := httptest.NewRequest(http.MethodGet, "/", nil)
|
||||
wrapped.ServeHTTP(httptest.NewRecorder(), req)
|
||||
|
||||
want := "g1:before,g2:before,r1:before,r2:before,handler,r2:after,r1:after,g2:after,g1:after"
|
||||
if got := strings.Join(log, ","); got != want {
|
||||
t.Errorf("order:\n got %s\nwant %s", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestChainNoMiddlewares(t *testing.T) {
|
||||
called := false
|
||||
h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { called = true })
|
||||
wrapped := chain(h, nil, nil)
|
||||
wrapped.ServeHTTP(httptest.NewRecorder(), httptest.NewRequest(http.MethodGet, "/", nil))
|
||||
if !called {
|
||||
t.Fatal("handler not called")
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue