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  }