Fix replace path rule

* Fix replace path rule
* test: add RequestURI tests.
This commit is contained in:
dedalusj 2017-07-19 18:27:52 +10:00 committed by Ludovic Fernandez
parent 36ee69609e
commit a09a8b1235
2 changed files with 14 additions and 16 deletions

View file

@ -16,5 +16,6 @@ const ReplacedPathHeader = "X-Replaced-Path"
func (s *ReplacePath) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (s *ReplacePath) ServeHTTP(w http.ResponseWriter, r *http.Request) {
r.Header.Add(ReplacedPathHeader, r.URL.Path) r.Header.Add(ReplacedPathHeader, r.URL.Path)
r.URL.Path = s.Path r.URL.Path = s.Path
r.RequestURI = r.URL.RequestURI()
s.Handler.ServeHTTP(w, r) s.Handler.ServeHTTP(w, r)
} }

View file

@ -1,10 +1,11 @@
package middlewares_test package middlewares
import ( import (
"net/http" "net/http"
"testing" "testing"
"github.com/containous/traefik/middlewares" "github.com/containous/traefik/testhelpers"
"github.com/stretchr/testify/assert"
) )
func TestReplacePath(t *testing.T) { func TestReplacePath(t *testing.T) {
@ -17,28 +18,24 @@ func TestReplacePath(t *testing.T) {
for _, path := range paths { for _, path := range paths {
t.Run(path, func(t *testing.T) { t.Run(path, func(t *testing.T) {
var newPath, oldPath string
handler := &middlewares.ReplacePath{ var expectedPath, actualHeader, requestURI string
handler := &ReplacePath{
Path: replacementPath, Path: replacementPath,
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
newPath = r.URL.Path expectedPath = r.URL.Path
oldPath = r.Header.Get("X-Replaced-Path") actualHeader = r.Header.Get(ReplacedPathHeader)
requestURI = r.RequestURI
}), }),
} }
req, err := http.NewRequest("GET", "http://localhost"+path, nil) req := testhelpers.MustNewRequest(http.MethodGet, "http://localhost"+path, nil)
if err != nil {
t.Error(err)
}
handler.ServeHTTP(nil, req) handler.ServeHTTP(nil, req)
if newPath != replacementPath {
t.Fatalf("new path should be '%s'", replacementPath)
}
if oldPath != path { assert.Equal(t, expectedPath, replacementPath, "Unexpected path.")
t.Fatalf("old path should be '%s'", path) assert.Equal(t, path, actualHeader, "Unexpected '%s' header.", ReplacedPathHeader)
} assert.Equal(t, expectedPath, requestURI, "Unexpected request URI.")
}) })
} }
} }