You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by GitBox <gi...@apache.org> on 2021/11/24 10:41:08 UTC

[GitHub] [apisix] tzssangglass opened a new pull request #5600: feat(ext-plugin): support to get request body

tzssangglass opened a new pull request #5600:
URL: https://github.com/apache/apisix/pull/5600


   Signed-off-by: tzssangglass <tz...@gmail.com>
   
   ### What this PR does / why we need it:
   <!--- Why is this change required? What problem does it solve? -->
   <!--- If it fixes an open issue, please link to the issue here. -->
   
   ### Pre-submission checklist:
   
   <!--
   Please follow the requirements:
   1. Use Draft if the PR is not ready to be reviewed
   2. Test is required for the feat/fix PR, unless you have a good reason
   3. Doc is required for the feat PR
   4. Use a new commit to resolve review instead of `push -f`
   5. Use "request review" to notify the reviewer once you have resolved the review
   -->
   
   * [x] Did you explain what problem does this PR solve? Or what new features have been added?
   * [x] Have you added corresponding test cases?
   * [ ] Have you modified the corresponding document?
   * [x] Is this PR backward compatible? **If it is not backward compatible, please discuss on the [mailing list](https://github.com/apache/apisix/tree/master#community) first**
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] tzssangglass commented on a change in pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
tzssangglass commented on a change in pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#discussion_r756516784



##########
File path: t/lib/ext-plugin.lua
##########
@@ -169,6 +169,8 @@ function _M.go(case)
             local entry = call_req:Args(1)
             assert(entry:Name() == "x")
             assert(entry:Value() == "z")
+        elseif case.get_request_body then
+            assert(call_req:Method() == a6_method.POST)

Review comment:
       actions.result would check the value in request body?




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] spacewander commented on a change in pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
spacewander commented on a change in pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#discussion_r757205150



##########
File path: t/plugin/ext-plugin/request-body.t
##########
@@ -0,0 +1,177 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+use t::APISIX 'no_plan';
+
+repeat_each(1);
+no_long_string();
+no_root_location();
+no_shuffle();
+
+add_block_preprocessor(sub {
+    my ($block) = @_;
+
+    $block->set_value("stream_conf_enable", 1);
+
+    if (!defined $block->extra_stream_config) {
+        my $stream_config = <<_EOC_;
+    server {
+        listen unix:\$TEST_NGINX_HTML_DIR/nginx.sock;
+
+        content_by_lua_block {
+            local ext = require("lib.ext-plugin")
+            ext.go({})
+        }
+    }
+
+_EOC_
+        $block->set_value("extra_stream_config", $stream_config);
+    }
+
+    my $unix_socket_path = $ENV{"TEST_NGINX_HTML_DIR"} . "/nginx.sock";
+    my $cmd = $block->ext_plugin_cmd // "['sleep', '5s']";
+    my $extra_yaml_config = <<_EOC_;
+ext-plugin:
+    path_for_test: $unix_socket_path
+    cmd: $cmd
+_EOC_
+
+    $block->set_value("extra_yaml_config", $extra_yaml_config);
+
+    if (!$block->request) {
+        $block->set_value("request", "GET /t");
+    }
+
+    if (!$block->error_log) {
+        $block->set_value("no_error_log", "[error]\n[alert]");
+    }
+});
+
+run_tests;
+
+__DATA__
+
+=== TEST 1: add route
+--- config
+    location /t {
+        content_by_lua_block {
+            local json = require("toolkit.json")
+            local t = require("lib.test_admin")
+
+            local code, message, res = t.test('/apisix/admin/routes/1',
+                ngx.HTTP_PUT,
+                 [[{
+                    "uri": "/hello",
+                    "plugins": {
+                        "ext-plugin-pre-req": {
+                        }
+                    },
+                    "upstream": {
+                        "nodes": {
+                            "127.0.0.1:1980": 1
+                        },
+                        "type": "roundrobin"
+                    }
+                }]]
+            )
+
+            if code >= 300 then
+                ngx.status = code
+                ngx.say(message)
+                return
+            end
+
+            ngx.say(message)
+        }
+    }
+--- response_body
+passed
+
+
+
+=== TEST 2: request body(text)
+--- request
+POST /hello
+123
+--- extra_stream_config
+    server {
+        listen unix:$TEST_NGINX_HTML_DIR/nginx.sock;
+
+        content_by_lua_block {
+            local ext = require("lib.ext-plugin")
+            local actions = {
+                {type = "var", name = "request_body", result = "123"},
+            }
+            ext.go({extra_info = actions, stop = true, get_request_body = true})
+        }
+    }
+--- error_code: 405
+--- grep_error_log eval
+qr/send extra info req successfully/
+--- grep_error_log_out
+send extra info req successfully
+
+
+
+=== TEST 3: request body(x-www-form-urlencoded)
+--- request
+POST /hello
+foo=bar
+--- more_headers
+Content-Type: application/x-www-form-urlencoded
+--- extra_stream_config
+    server {
+        listen unix:$TEST_NGINX_HTML_DIR/nginx.sock;
+
+        content_by_lua_block {
+            local ext = require("lib.ext-plugin")
+            local actions = {
+                {type = "var", name = "request_body", result = "foo=bar"},
+            }
+            ext.go({extra_info = actions, stop = true, get_request_body = true})
+        }
+    }
+--- error_code: 405
+--- grep_error_log eval
+qr/send extra info req successfully/
+--- grep_error_log_out
+send extra info req successfully
+
+
+
+=== TEST 4: request body(json)

Review comment:
       Yes




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] tzssangglass commented on a change in pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
tzssangglass commented on a change in pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#discussion_r757211942



##########
File path: apisix/plugins/ext-plugin/init.lua
##########
@@ -273,6 +274,12 @@ local function handle_extra_info(ctx, input)
 
         local var_name = var_req:Name()
         res = ctx.var[var_name]
+    elseif info_type == extra_info.ReqBody then
+        local info = req:Info()
+        local reqbody_req = extra_info_reqbody.New()
+        reqbody_req:Init(info.bytes, info.pos)
+
+        res = core.request.get_body()

Review comment:
       done




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] tzssangglass commented on pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
tzssangglass commented on pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#issuecomment-978980379


   > dealy to merge, is: [api7/ext-plugin-proto@`main`/lua/A6/ExtraInfo/ReqBody.lua](https://github.com/api7/ext-plugin-proto/blob/main/lua/A6/ExtraInfo/ReqBody.lua?rgh-link-date=2021-11-25T08%3A25%3A29Z) used for request body?
   
   ok, after review:https://lists.apache.org/thread/m5g44gtywx05x4s262rn7qg87oxscy0v, the ReqBody in ExtraInfo is used to  holds the request body.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] tzssangglass commented on pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
tzssangglass commented on pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#issuecomment-978033734


   I'm thinking that this implementation might not be good enough, because usually the user needs to not only read the request body, but also rewrite it.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] tzssangglass commented on pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
tzssangglass commented on pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#issuecomment-978943116


   dealy to merge, is: https://github.com/api7/ext-plugin-proto/blob/main/lua/A6/ExtraInfo/ReqBody.lua used for request body?


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] spacewander commented on a change in pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
spacewander commented on a change in pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#discussion_r756505700



##########
File path: t/plugin/ext-plugin/request-body.t
##########
@@ -0,0 +1,177 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+use t::APISIX 'no_plan';
+
+repeat_each(1);
+no_long_string();
+no_root_location();
+no_shuffle();
+
+add_block_preprocessor(sub {
+    my ($block) = @_;
+
+    $block->set_value("stream_conf_enable", 1);
+
+    if (!defined $block->extra_stream_config) {
+        my $stream_config = <<_EOC_;
+    server {
+        listen unix:\$TEST_NGINX_HTML_DIR/nginx.sock;
+
+        content_by_lua_block {
+            local ext = require("lib.ext-plugin")
+            ext.go({})
+        }
+    }
+
+_EOC_
+        $block->set_value("extra_stream_config", $stream_config);
+    }
+
+    my $unix_socket_path = $ENV{"TEST_NGINX_HTML_DIR"} . "/nginx.sock";
+    my $cmd = $block->ext_plugin_cmd // "['sleep', '5s']";
+    my $extra_yaml_config = <<_EOC_;
+ext-plugin:
+    path_for_test: $unix_socket_path
+    cmd: $cmd
+_EOC_
+
+    $block->set_value("extra_yaml_config", $extra_yaml_config);
+
+    if (!$block->request) {
+        $block->set_value("request", "GET /t");
+    }
+
+    if (!$block->error_log) {
+        $block->set_value("no_error_log", "[error]\n[alert]");
+    }
+});
+
+run_tests;
+
+__DATA__
+
+=== TEST 1: add route
+--- config
+    location /t {
+        content_by_lua_block {
+            local json = require("toolkit.json")
+            local t = require("lib.test_admin")
+
+            local code, message, res = t.test('/apisix/admin/routes/1',
+                ngx.HTTP_PUT,
+                 [[{
+                    "uri": "/hello",
+                    "plugins": {
+                        "ext-plugin-pre-req": {
+                        }
+                    },
+                    "upstream": {
+                        "nodes": {
+                            "127.0.0.1:1980": 1
+                        },
+                        "type": "roundrobin"
+                    }
+                }]]
+            )
+
+            if code >= 300 then
+                ngx.status = code
+                ngx.say(message)
+                return
+            end
+
+            ngx.say(message)
+        }
+    }
+--- response_body
+passed
+
+
+
+=== TEST 2: request body(text)
+--- request
+POST /hello
+123
+--- extra_stream_config
+    server {
+        listen unix:$TEST_NGINX_HTML_DIR/nginx.sock;
+
+        content_by_lua_block {
+            local ext = require("lib.ext-plugin")
+            local actions = {
+                {type = "var", name = "request_body", result = "123"},
+            }
+            ext.go({extra_info = actions, stop = true, get_request_body = true})
+        }
+    }
+--- error_code: 405
+--- grep_error_log eval
+qr/send extra info req successfully/
+--- grep_error_log_out
+send extra info req successfully
+
+
+
+=== TEST 3: request body(x-www-form-urlencoded)
+--- request
+POST /hello
+foo=bar
+--- more_headers
+Content-Type: application/x-www-form-urlencoded
+--- extra_stream_config
+    server {
+        listen unix:$TEST_NGINX_HTML_DIR/nginx.sock;
+
+        content_by_lua_block {
+            local ext = require("lib.ext-plugin")
+            local actions = {
+                {type = "var", name = "request_body", result = "foo=bar"},
+            }
+            ext.go({extra_info = actions, stop = true, get_request_body = true})
+        }
+    }
+--- error_code: 405
+--- grep_error_log eval
+qr/send extra info req successfully/
+--- grep_error_log_out
+send extra info req successfully
+
+
+
+=== TEST 4: request body(json)

Review comment:
       Better to add a test which doesn't have a value

##########
File path: t/lib/ext-plugin.lua
##########
@@ -169,6 +169,8 @@ function _M.go(case)
             local entry = call_req:Args(1)
             assert(entry:Name() == "x")
             assert(entry:Value() == "z")
+        elseif case.get_request_body then
+            assert(call_req:Method() == a6_method.POST)

Review comment:
       Do we need to check the request_body's value?




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] tzssangglass commented on a change in pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
tzssangglass commented on a change in pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#discussion_r756513090



##########
File path: t/plugin/ext-plugin/request-body.t
##########
@@ -0,0 +1,177 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+use t::APISIX 'no_plan';
+
+repeat_each(1);
+no_long_string();
+no_root_location();
+no_shuffle();
+
+add_block_preprocessor(sub {
+    my ($block) = @_;
+
+    $block->set_value("stream_conf_enable", 1);
+
+    if (!defined $block->extra_stream_config) {
+        my $stream_config = <<_EOC_;
+    server {
+        listen unix:\$TEST_NGINX_HTML_DIR/nginx.sock;
+
+        content_by_lua_block {
+            local ext = require("lib.ext-plugin")
+            ext.go({})
+        }
+    }
+
+_EOC_
+        $block->set_value("extra_stream_config", $stream_config);
+    }
+
+    my $unix_socket_path = $ENV{"TEST_NGINX_HTML_DIR"} . "/nginx.sock";
+    my $cmd = $block->ext_plugin_cmd // "['sleep', '5s']";
+    my $extra_yaml_config = <<_EOC_;
+ext-plugin:
+    path_for_test: $unix_socket_path
+    cmd: $cmd
+_EOC_
+
+    $block->set_value("extra_yaml_config", $extra_yaml_config);
+
+    if (!$block->request) {
+        $block->set_value("request", "GET /t");
+    }
+
+    if (!$block->error_log) {
+        $block->set_value("no_error_log", "[error]\n[alert]");
+    }
+});
+
+run_tests;
+
+__DATA__
+
+=== TEST 1: add route
+--- config
+    location /t {
+        content_by_lua_block {
+            local json = require("toolkit.json")
+            local t = require("lib.test_admin")
+
+            local code, message, res = t.test('/apisix/admin/routes/1',
+                ngx.HTTP_PUT,
+                 [[{
+                    "uri": "/hello",
+                    "plugins": {
+                        "ext-plugin-pre-req": {
+                        }
+                    },
+                    "upstream": {
+                        "nodes": {
+                            "127.0.0.1:1980": 1
+                        },
+                        "type": "roundrobin"
+                    }
+                }]]
+            )
+
+            if code >= 300 then
+                ngx.status = code
+                ngx.say(message)
+                return
+            end
+
+            ngx.say(message)
+        }
+    }
+--- response_body
+passed
+
+
+
+=== TEST 2: request body(text)
+--- request
+POST /hello
+123
+--- extra_stream_config
+    server {
+        listen unix:$TEST_NGINX_HTML_DIR/nginx.sock;
+
+        content_by_lua_block {
+            local ext = require("lib.ext-plugin")
+            local actions = {
+                {type = "var", name = "request_body", result = "123"},
+            }
+            ext.go({extra_info = actions, stop = true, get_request_body = true})
+        }
+    }
+--- error_code: 405
+--- grep_error_log eval
+qr/send extra info req successfully/
+--- grep_error_log_out
+send extra info req successfully
+
+
+
+=== TEST 3: request body(x-www-form-urlencoded)
+--- request
+POST /hello
+foo=bar
+--- more_headers
+Content-Type: application/x-www-form-urlencoded
+--- extra_stream_config
+    server {
+        listen unix:$TEST_NGINX_HTML_DIR/nginx.sock;
+
+        content_by_lua_block {
+            local ext = require("lib.ext-plugin")
+            local actions = {
+                {type = "var", name = "request_body", result = "foo=bar"},
+            }
+            ext.go({extra_info = actions, stop = true, get_request_body = true})
+        }
+    }
+--- error_code: 405
+--- grep_error_log eval
+qr/send extra info req successfully/
+--- grep_error_log_out
+send extra info req successfully
+
+
+
+=== TEST 4: request body(json)

Review comment:
       I have tried to emulate this test case:https://github.com/apache/apisix/blob/4b94b84f92d1cb6cb58e52075637a42ed76457d8/t/core/request.t#L414-L439 but failed.
   
   should I send an empty body to test?




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] tzssangglass commented on a change in pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
tzssangglass commented on a change in pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#discussion_r756516435



##########
File path: t/lib/ext-plugin.lua
##########
@@ -169,6 +169,8 @@ function _M.go(case)
             local entry = call_req:Args(1)
             assert(entry:Name() == "x")
             assert(entry:Value() == "z")
+        elseif case.get_request_body then
+            assert(call_req:Method() == a6_method.POST)

Review comment:
       I want to validate different content-type, so the value of request body is not fixed.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] tzssangglass commented on a change in pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
tzssangglass commented on a change in pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#discussion_r756536490



##########
File path: t/plugin/ext-plugin/request-body.t
##########
@@ -0,0 +1,177 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+use t::APISIX 'no_plan';
+
+repeat_each(1);
+no_long_string();
+no_root_location();
+no_shuffle();
+
+add_block_preprocessor(sub {
+    my ($block) = @_;
+
+    $block->set_value("stream_conf_enable", 1);
+
+    if (!defined $block->extra_stream_config) {
+        my $stream_config = <<_EOC_;
+    server {
+        listen unix:\$TEST_NGINX_HTML_DIR/nginx.sock;
+
+        content_by_lua_block {
+            local ext = require("lib.ext-plugin")
+            ext.go({})
+        }
+    }
+
+_EOC_
+        $block->set_value("extra_stream_config", $stream_config);
+    }
+
+    my $unix_socket_path = $ENV{"TEST_NGINX_HTML_DIR"} . "/nginx.sock";
+    my $cmd = $block->ext_plugin_cmd // "['sleep', '5s']";
+    my $extra_yaml_config = <<_EOC_;
+ext-plugin:
+    path_for_test: $unix_socket_path
+    cmd: $cmd
+_EOC_
+
+    $block->set_value("extra_yaml_config", $extra_yaml_config);
+
+    if (!$block->request) {
+        $block->set_value("request", "GET /t");
+    }
+
+    if (!$block->error_log) {
+        $block->set_value("no_error_log", "[error]\n[alert]");
+    }
+});
+
+run_tests;
+
+__DATA__
+
+=== TEST 1: add route
+--- config
+    location /t {
+        content_by_lua_block {
+            local json = require("toolkit.json")
+            local t = require("lib.test_admin")
+
+            local code, message, res = t.test('/apisix/admin/routes/1',
+                ngx.HTTP_PUT,
+                 [[{
+                    "uri": "/hello",
+                    "plugins": {
+                        "ext-plugin-pre-req": {
+                        }
+                    },
+                    "upstream": {
+                        "nodes": {
+                            "127.0.0.1:1980": 1
+                        },
+                        "type": "roundrobin"
+                    }
+                }]]
+            )
+
+            if code >= 300 then
+                ngx.status = code
+                ngx.say(message)
+                return
+            end
+
+            ngx.say(message)
+        }
+    }
+--- response_body
+passed
+
+
+
+=== TEST 2: request body(text)
+--- request
+POST /hello
+123
+--- extra_stream_config
+    server {
+        listen unix:$TEST_NGINX_HTML_DIR/nginx.sock;
+
+        content_by_lua_block {
+            local ext = require("lib.ext-plugin")
+            local actions = {
+                {type = "var", name = "request_body", result = "123"},
+            }
+            ext.go({extra_info = actions, stop = true, get_request_body = true})
+        }
+    }
+--- error_code: 405
+--- grep_error_log eval
+qr/send extra info req successfully/
+--- grep_error_log_out
+send extra info req successfully
+
+
+
+=== TEST 3: request body(x-www-form-urlencoded)
+--- request
+POST /hello
+foo=bar
+--- more_headers
+Content-Type: application/x-www-form-urlencoded
+--- extra_stream_config
+    server {
+        listen unix:$TEST_NGINX_HTML_DIR/nginx.sock;
+
+        content_by_lua_block {
+            local ext = require("lib.ext-plugin")
+            local actions = {
+                {type = "var", name = "request_body", result = "foo=bar"},
+            }
+            ext.go({extra_info = actions, stop = true, get_request_body = true})
+        }
+    }
+--- error_code: 405
+--- grep_error_log eval
+qr/send extra info req successfully/
+--- grep_error_log_out
+send extra info req successfully
+
+
+
+=== TEST 4: request body(json)

Review comment:
       add a test case of request body is nil




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] tzssangglass commented on a change in pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
tzssangglass commented on a change in pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#discussion_r757260509



##########
File path: apisix/plugins/ext-plugin/init.lua
##########
@@ -279,7 +279,12 @@ local function handle_extra_info(ctx, input)
         local reqbody_req = extra_info_reqbody.New()
         reqbody_req:Init(info.bytes, info.pos)
 
-        res = core.request.get_body()
+        local err
+        res, err = core.request.get_body()
+        if not res then

Review comment:
       update




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] tzssangglass commented on pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
tzssangglass commented on pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#issuecomment-978984462


   I will update this PR.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] spacewander commented on a change in pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
spacewander commented on a change in pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#discussion_r757205933



##########
File path: apisix/plugins/ext-plugin/init.lua
##########
@@ -273,6 +274,12 @@ local function handle_extra_info(ctx, input)
 
         local var_name = var_req:Name()
         res = ctx.var[var_name]
+    elseif info_type == extra_info.ReqBody then
+        local info = req:Info()
+        local reqbody_req = extra_info_reqbody.New()
+        reqbody_req:Init(info.bytes, info.pos)
+
+        res = core.request.get_body()

Review comment:
       Better to log down err if it is not nil.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] spacewander commented on a change in pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
spacewander commented on a change in pull request #5600:
URL: https://github.com/apache/apisix/pull/5600#discussion_r757215569



##########
File path: apisix/plugins/ext-plugin/init.lua
##########
@@ -279,7 +279,12 @@ local function handle_extra_info(ctx, input)
         local reqbody_req = extra_info_reqbody.New()
         reqbody_req:Init(info.bytes, info.pos)
 
-        res = core.request.get_body()
+        local err
+        res, err = core.request.get_body()
+        if not res then

Review comment:
       We need to check the err instead, as the body can be nil when there is no body.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix] spacewander merged pull request #5600: feat(ext-plugin): support to get request body

Posted by GitBox <gi...@apache.org>.
spacewander merged pull request #5600:
URL: https://github.com/apache/apisix/pull/5600


   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org