More tests and simplify hashFilter

This commit is contained in:
Leonid Bugaev
2015-07-06 18:36:12 +05:00
parent 2b17989fd9
commit a859ae02ad
4 changed files with 79 additions and 12 deletions
+57
View File
@@ -2,6 +2,8 @@ package main
import (
"testing"
"github.com/buger/gor/proto"
"bytes"
)
func TestHTTPModifierWithoutConfig(t *testing.T) {
@@ -36,3 +38,58 @@ func TestHTTPModifierHeaderFilters(t *testing.T) {
t.Error("Request should not pass filters")
}
}
func TestHTTPModifierURLRegexp(t *testing.T) {
var url, new_url []byte
rewrites := UrlRewriteMap{}
payload := func(url []byte) []byte {
return []byte("POST " + string(url) + " HTTP/1.1\r\nContent-Length: 7\r\nHost: www.w3.org\r\n\r\na=1&b=2")
}
err := rewrites.Set("/v1/user/([^\\/]+)/ping:/v2/user/$1/ping")
if err != nil {
t.Error("Should not error on /v1/user/([^\\/]+)/ping:/v2/user/$1/ping")
}
modifier := NewHTTPModifier(&HTTPModifierConfig{
urlRewrite: rewrites,
})
url = []byte("/v1/user/joe/ping")
if new_url = proto.Path(modifier.Rewrite(payload(url))); bytes.Equal(new_url, url) {
t.Error("Request url should have been rewritten, wasn't", string(new_url))
}
url = []byte("/v1/user/ping")
if new_url = proto.Path(modifier.Rewrite(payload(url))); !bytes.Equal(new_url, url) {
t.Error("Request url should have been rewritten, wasn't", string(new_url))
}
}
func TestHTTPModifierHeaderHashFilters(t *testing.T) {
filters := HTTPHeaderHashFilters{}
filters.Set("Header2:1/2")
modifier := NewHTTPModifier(&HTTPModifierConfig{
headerHashFilters: filters,
})
payload := func(header []byte) []byte {
return []byte("POST / HTTP/1.1\r\n" + string(header) + "Content-Length: 7\r\nHost: www.w3.org\r\n\r\na=1&b=2")
}
if p := modifier.Rewrite(payload([]byte(""))); len(p) > 0 {
t.Error("Request should not pass filters, Header2 does not exist")
}
if p := modifier.Rewrite(payload([]byte("Header2: 3\r\n"))); len(p) > 0 {
t.Error("Request should not pass filters, Header2 hash too high")
}
if p := modifier.Rewrite(payload([]byte("Header2: 1\r\n"))); len(p) == 0 {
t.Error("Request should pass filters")
}
}