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  }