github.com/dbernstein1/tyk@v2.9.0-beta9-dl-apic+incompatible/gateway/res_handler_header_injector_test.go (about) 1 package gateway 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "testing" 7 8 "github.com/TykTechnologies/tyk/apidef" 9 "github.com/TykTechnologies/tyk/test" 10 ) 11 12 func testPrepareResponseHeaderInjection() { 13 BuildAndLoadAPI(func(spec *APISpec) { 14 spec.UseKeylessAccess = true 15 spec.Proxy.ListenPath = "/" 16 spec.OrgID = "default" 17 UpdateAPIVersion(spec, "v1", func(v *apidef.VersionInfo) { 18 v.UseExtendedPaths = true 19 json.Unmarshal([]byte(`[ 20 { 21 "delete_headers": ["X-Tyk-Test"], 22 "add_headers": {"X-Test": "test"}, 23 "path": "/test-with-slash", 24 "method": "GET", 25 "act_on": false 26 }, 27 { 28 "delete_headers": ["X-Tyk-Test"], 29 "add_headers": {"X-Test": "test"}, 30 "path": "test-no-slash", 31 "method": "GET", 32 "act_on": false 33 }, 34 { 35 "delete_headers": ["X-Tyk-Test"], 36 "add_headers": {"X-Test": "test"}, 37 "path": "/rewrite-test", 38 "method": "GET", 39 "act_on": false 40 } 41 ]`), &v.ExtendedPaths.TransformResponseHeader) 42 json.Unmarshal([]byte(`[ 43 { 44 "delete_headers": ["User-Agent"], 45 "add_headers": {"X-I-Am": "Request"}, 46 "path": "/rewrite-test", 47 "method": "GET", 48 "act_on": false 49 } 50 ]`), &v.ExtendedPaths.TransformHeader) 51 52 v.ExtendedPaths.URLRewrite = []apidef.URLRewriteMeta{{ 53 Path: "/rewrite-test", 54 Method: "GET", 55 MatchPattern: "rewrite-test", 56 RewriteTo: "newpath", 57 }} 58 }) 59 spec.ResponseProcessors = []apidef.ResponseProcessor{{Name: "header_injector"}} 60 }) 61 } 62 63 func TestResponseHeaderInjection(t *testing.T) { 64 ts := StartTest() 65 defer ts.Close() 66 67 testPrepareResponseHeaderInjection() 68 69 addHeaders := map[string]string{"X-Test": "test"} 70 deleteHeaders := map[string]string{"X-Tyk-Test": "1"} 71 userAgent := fmt.Sprintf("\"User-Agent\":\"Tyk/%v\"", VERSION) 72 73 ts.Run(t, []test.TestCase{ 74 // Create base auth based key 75 {Method: "GET", Path: "/test-with-slash", HeadersMatch: addHeaders, HeadersNotMatch: deleteHeaders}, 76 {Method: "GET", Path: "/test-no-slash", HeadersMatch: addHeaders, HeadersNotMatch: deleteHeaders}, 77 {Method: "GET", Path: "/rewrite-test", HeadersMatch: addHeaders, HeadersNotMatch: deleteHeaders, BodyMatch: `"Url":"/newpath"`}, 78 {Method: "GET", Path: "/rewrite-test", HeadersMatch: addHeaders, HeadersNotMatch: deleteHeaders, BodyMatch: `"X-I-Am":"Request"`}, 79 {Method: "GET", Path: "/rewrite-test", HeadersMatch: addHeaders, HeadersNotMatch: deleteHeaders, BodyMatch: userAgent}, 80 }...) 81 } 82 83 func BenchmarkResponseHeaderInjection(b *testing.B) { 84 b.ReportAllocs() 85 86 ts := StartTest() 87 defer ts.Close() 88 89 testPrepareResponseHeaderInjection() 90 91 addHeaders := map[string]string{"X-Test": "test"} 92 deleteHeaders := map[string]string{"X-Tyk-Test": "1"} 93 userAgent := fmt.Sprintf("\"User-Agent\":\"Tyk/%v\"", VERSION) 94 95 for i := 0; i < b.N; i++ { 96 ts.Run(b, []test.TestCase{ 97 // Create base auth based key 98 {Method: "GET", Path: "/test-with-slash", HeadersMatch: addHeaders, HeadersNotMatch: deleteHeaders}, 99 {Method: "GET", Path: "/test-no-slash", HeadersMatch: addHeaders, HeadersNotMatch: deleteHeaders}, 100 {Method: "GET", Path: "/rewrite-test", HeadersMatch: addHeaders, HeadersNotMatch: deleteHeaders, BodyMatch: `"Url":"/newpath"`}, 101 {Method: "GET", Path: "/rewrite-test", HeadersMatch: addHeaders, HeadersNotMatch: deleteHeaders, BodyMatch: `"X-I-Am":"Request"`}, 102 {Method: "GET", Path: "/rewrite-test", HeadersMatch: addHeaders, HeadersNotMatch: deleteHeaders, BodyMatch: userAgent}, 103 }...) 104 } 105 }