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

2021-11-25 Thread GitBox


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-unsubscr...@apisix.apache.org

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




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

2021-11-25 Thread GitBox


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-unsubscr...@apisix.apache.org

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




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

2021-11-24 Thread GitBox


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-unsubscr...@apisix.apache.org

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




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

2021-11-24 Thread GitBox


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-unsubscr...@apisix.apache.org

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




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

2021-11-24 Thread GitBox


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-unsubscr...@apisix.apache.org

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




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

2021-11-24 Thread GitBox


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-unsubscr...@apisix.apache.org

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