Performance enhancements for the rules matchers.
This commit is contained in:
parent
333b785061
commit
bf73127e0b
6 changed files with 192 additions and 35 deletions
|
@ -6,6 +6,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/containous/mux"
|
||||
"github.com/containous/traefik/middlewares"
|
||||
"github.com/containous/traefik/testhelpers"
|
||||
"github.com/containous/traefik/types"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
@ -13,41 +14,50 @@ import (
|
|||
)
|
||||
|
||||
func TestParseOneRule(t *testing.T) {
|
||||
router := mux.NewRouter()
|
||||
route := router.NewRoute()
|
||||
serverRoute := &types.ServerRoute{Route: route}
|
||||
rules := &Rules{Route: serverRoute}
|
||||
reqHostMid := &middlewares.RequestHost{}
|
||||
rules := &Rules{
|
||||
Route: &types.ServerRoute{
|
||||
Route: mux.NewRouter().NewRoute(),
|
||||
},
|
||||
}
|
||||
|
||||
expression := "Host:foo.bar"
|
||||
|
||||
routeResult, err := rules.Parse(expression)
|
||||
require.NoError(t, err, "Error while building route for %s", expression)
|
||||
|
||||
request := testhelpers.MustNewRequest(http.MethodGet, "http://foo.bar", nil)
|
||||
routeMatch := routeResult.Match(request, &mux.RouteMatch{Route: routeResult})
|
||||
|
||||
assert.True(t, routeMatch, "Rule %s don't match.", expression)
|
||||
reqHostMid.ServeHTTP(nil, request, func(w http.ResponseWriter, r *http.Request) {
|
||||
routeMatch := routeResult.Match(r, &mux.RouteMatch{Route: routeResult})
|
||||
assert.True(t, routeMatch, "Rule %s don't match.", expression)
|
||||
})
|
||||
}
|
||||
|
||||
func TestParseTwoRules(t *testing.T) {
|
||||
router := mux.NewRouter()
|
||||
route := router.NewRoute()
|
||||
serverRoute := &types.ServerRoute{Route: route}
|
||||
rules := &Rules{Route: serverRoute}
|
||||
reqHostMid := &middlewares.RequestHost{}
|
||||
rules := &Rules{
|
||||
Route: &types.ServerRoute{
|
||||
Route: mux.NewRouter().NewRoute(),
|
||||
},
|
||||
}
|
||||
|
||||
expression := "Host: Foo.Bar ; Path:/FOObar"
|
||||
routeResult, err := rules.Parse(expression)
|
||||
|
||||
routeResult, err := rules.Parse(expression)
|
||||
require.NoError(t, err, "Error while building route for %s.", expression)
|
||||
|
||||
request := testhelpers.MustNewRequest(http.MethodGet, "http://foo.bar/foobar", nil)
|
||||
routeMatch := routeResult.Match(request, &mux.RouteMatch{Route: routeResult})
|
||||
|
||||
assert.False(t, routeMatch, "Rule %s don't match.", expression)
|
||||
reqHostMid.ServeHTTP(nil, request, func(w http.ResponseWriter, r *http.Request) {
|
||||
routeMatch := routeResult.Match(r, &mux.RouteMatch{Route: routeResult})
|
||||
assert.False(t, routeMatch, "Rule %s don't match.", expression)
|
||||
})
|
||||
|
||||
request = testhelpers.MustNewRequest(http.MethodGet, "http://foo.bar/FOObar", nil)
|
||||
routeMatch = routeResult.Match(request, &mux.RouteMatch{Route: routeResult})
|
||||
|
||||
assert.True(t, routeMatch, "Rule %s don't match.", expression)
|
||||
reqHostMid.ServeHTTP(nil, request, func(w http.ResponseWriter, r *http.Request) {
|
||||
routeMatch := routeResult.Match(r, &mux.RouteMatch{Route: routeResult})
|
||||
assert.True(t, routeMatch, "Rule %s don't match.", expression)
|
||||
})
|
||||
}
|
||||
|
||||
func TestParseDomains(t *testing.T) {
|
||||
|
@ -91,6 +101,7 @@ func TestParseDomains(t *testing.T) {
|
|||
func TestPriorites(t *testing.T) {
|
||||
router := mux.NewRouter()
|
||||
router.StrictSlash(true)
|
||||
|
||||
rules := &Rules{Route: &types.ServerRoute{Route: router.NewRoute()}}
|
||||
expression01 := "PathPrefix:/foo"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue