github.com/Tyktechnologies/tyk@v2.9.5+incompatible/gateway/mw_method_transform_test.go (about) 1 package gateway 2 3 import ( 4 "testing" 5 6 "github.com/TykTechnologies/tyk/apidef" 7 "github.com/TykTechnologies/tyk/test" 8 ) 9 10 func TestMethodTransform(t *testing.T) { 11 ts := StartTest() 12 defer ts.Close() 13 14 t.Run("Using URL rewrite", func(t *testing.T) { 15 16 methodTransform := apidef.MethodTransformMeta{} 17 methodTransform.Path = "/get" 18 methodTransform.Method = "GET" 19 methodTransform.ToMethod = "POST" 20 21 urlRewrite := apidef.URLRewriteMeta{} 22 urlRewrite.Path = "/get" 23 urlRewrite.Method = "GET" 24 urlRewrite.MatchPattern = "/get(.*)" 25 urlRewrite.RewriteTo = "/post$1" 26 27 BuildAndLoadAPI(func(spec *APISpec) { 28 spec.Proxy.ListenPath = "/" 29 UpdateAPIVersion(spec, "v1", func(v *apidef.VersionInfo) { 30 v.UseExtendedPaths = true 31 v.ExtendedPaths.MethodTransforms = append(v.ExtendedPaths.MethodTransforms, methodTransform) 32 v.ExtendedPaths.URLRewrite = append(v.ExtendedPaths.URLRewrite, urlRewrite) 33 }) 34 }) 35 36 ts.Run(t, []test.TestCase{ 37 {Method: "GET", Path: "/get", BodyMatch: `"Url":"/post"`}, 38 39 {Method: "GET", Path: "/get?a=b", BodyMatch: `"Method":"POST"`}, 40 }...) 41 }) 42 43 t.Run("Using cache", func(t *testing.T) { 44 methodTransform := apidef.MethodTransformMeta{} 45 methodTransform.Path = "/testing" 46 methodTransform.Method = "GET" 47 methodTransform.ToMethod = "POST" 48 49 BuildAndLoadAPI(func(spec *APISpec) { 50 spec.CacheOptions = apidef.CacheOptions{ 51 CacheTimeout: 120, 52 EnableCache: true, 53 } 54 spec.Proxy.ListenPath = "/" 55 UpdateAPIVersion(spec, "v1", func(v *apidef.VersionInfo) { 56 v.UseExtendedPaths = true 57 v.ExtendedPaths.Cached = []string{"/testing"} 58 v.ExtendedPaths.MethodTransforms = append(v.ExtendedPaths.MethodTransforms, methodTransform) 59 }) 60 }) 61 62 headerCache := map[string]string{"x-tyk-cached-response": "1"} 63 64 ts.Run(t, []test.TestCase{ 65 {Method: "GET", Path: "/testing", HeadersNotMatch: headerCache, BodyMatch: `"Method":"POST"`}, 66 {Method: "GET", Path: "/testing", HeadersMatch: headerCache, BodyMatch: `"Method":"POST"`}, 67 {Method: "POST", Path: "/testing", HeadersNotMatch: headerCache}, 68 {Method: "GET", Path: "/testing", HeadersMatch: headerCache}, 69 }...) 70 }) 71 }