github.com/Kong/go-pdk@v0.11.0/request/request_test.go (about) 1 package request 2 3 import ( 4 "testing" 5 6 "github.com/Kong/go-pdk/bridge" 7 "github.com/Kong/go-pdk/bridge/bridgetest" 8 "github.com/Kong/go-pdk/server/kong_plugin_protocol" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func mockRequest(t *testing.T, s []bridgetest.MockStep) Request { 13 return Request{bridge.New(bridgetest.Mock(t, s))} 14 } 15 16 func TestGetInfos(t *testing.T) { 17 18 q, err := bridge.WrapHeaders(map[string][]string{ 19 "ref": {"wayback"}, 20 "trail": {"faint"}, 21 }) 22 assert.NoError(t, err) 23 24 h, err := bridge.WrapHeaders(map[string][]string{ 25 "Host": {"example.com"}, 26 "X-Two-Things": {"first", "second"}, 27 }) 28 assert.NoError(t, err) 29 30 body := `GET / HTTP/1.1 31 Host: example.com 32 Accept: * 33 34 this is the content` 35 36 request := mockRequest(t, []bridgetest.MockStep{ 37 {"kong.request.get_scheme", nil, bridge.WrapString("https")}, 38 {"kong.request.get_host", nil, bridge.WrapString("example.com")}, 39 {"kong.request.get_port", nil, &kong_plugin_protocol.Int{V: 443}}, 40 {"kong.request.get_forwarded_scheme", nil, bridge.WrapString("https")}, 41 {"kong.request.get_forwarded_host", nil, bridge.WrapString("example.com")}, 42 {"kong.request.get_forwarded_port", nil, &kong_plugin_protocol.Int{V: 443}}, 43 {"kong.request.get_http_version", nil, &kong_plugin_protocol.Number{V: 2.1}}, 44 {"kong.request.get_method", nil, bridge.WrapString("HEADER")}, 45 {"kong.request.get_path", nil, bridge.WrapString("/login/orout")}, 46 {"kong.request.get_path_with_query", nil, bridge.WrapString("/login/orout?ref=wayback")}, 47 {"kong.request.get_raw_query", nil, bridge.WrapString("ref=wayback&trail=faint")}, 48 {"kong.request.get_query_arg", bridge.WrapString("ref"), bridge.WrapString("wayback")}, 49 {"kong.request.get_query", &kong_plugin_protocol.Int{V: 30}, q}, 50 {"kong.request.get_header", bridge.WrapString("Host"), bridge.WrapString("example.com")}, 51 {"kong.request.get_headers", &kong_plugin_protocol.Int{V: 30}, h}, 52 {"kong.request.get_raw_body", nil, bridge.WrapString(body)}, 53 }) 54 55 ret, err := request.GetScheme() 56 assert.NoError(t, err) 57 assert.Equal(t, "https", ret) 58 59 ret, err = request.GetHost() 60 assert.NoError(t, err) 61 assert.Equal(t, "example.com", ret) 62 63 ret_i, err := request.GetPort() 64 assert.NoError(t, err) 65 assert.Equal(t, 443, ret_i) 66 67 ret, err = request.GetForwardedScheme() 68 assert.NoError(t, err) 69 assert.Equal(t, "https", ret) 70 71 ret, err = request.GetForwardedHost() 72 assert.NoError(t, err) 73 assert.Equal(t, "example.com", ret) 74 75 ret_i, err = request.GetForwardedPort() 76 assert.NoError(t, err) 77 assert.Equal(t, 443, ret_i) 78 79 ret_f, err := request.GetHttpVersion() 80 assert.NoError(t, err) 81 assert.Equal(t, 2.1, ret_f) 82 83 ret, err = request.GetMethod() 84 assert.NoError(t, err) 85 assert.Equal(t, "HEADER", ret) 86 87 ret, err = request.GetPath() 88 assert.NoError(t, err) 89 assert.Equal(t, "/login/orout", ret) 90 91 ret, err = request.GetPathWithQuery() 92 assert.NoError(t, err) 93 assert.Equal(t, "/login/orout?ref=wayback", ret) 94 95 ret, err = request.GetRawQuery() 96 assert.NoError(t, err) 97 assert.Equal(t, "ref=wayback&trail=faint", ret) 98 99 ret, err = request.GetQueryArg("ref") 100 assert.NoError(t, err) 101 assert.Equal(t, "wayback", ret) 102 103 ret_q, err := request.GetQuery(30) 104 assert.NoError(t, err) 105 assert.Equal(t, map[string][]string{ 106 "ref": []string{"wayback"}, 107 "trail": []string{"faint"}, 108 }, ret_q) 109 110 ret, err = request.GetHeader("Host") 111 assert.NoError(t, err) 112 assert.Equal(t, "example.com", ret) 113 114 ret_q, err = request.GetHeaders(30) 115 assert.NoError(t, err) 116 assert.Equal(t, map[string][]string{ 117 "Host": []string{"example.com"}, 118 "X-Two-Things": []string{"first", "second"}, 119 }, ret_q) 120 121 ret_b, err := request.GetRawBody() 122 assert.NoError(t, err) 123 assert.Equal(t, []byte(body), ret_b) 124 }