You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by me...@apache.org on 2020/09/27 14:30:07 UTC

[apisix] branch master updated: feat: support to fetch `route_id` and `service_id` via `ctx.var` (#2326)

This is an automated email from the ASF dual-hosted git repository.

membphis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git


The following commit(s) were added to refs/heads/master by this push:
     new b1770d4  feat: support to fetch `route_id` and `service_id` via `ctx.var` (#2326)
b1770d4 is described below

commit b1770d4ca7e4e8d0f92e655d093b9c5563cc9be6
Author: Firstsawyou <52...@users.noreply.github.com>
AuthorDate: Sun Sep 27 22:29:59 2020 +0800

    feat: support to fetch `route_id` and `service_id` via `ctx.var` (#2326)
---
 apisix/core/ctx.lua |   7 ++
 t/core/ctx.t        | 187 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 194 insertions(+)

diff --git a/apisix/core/ctx.lua b/apisix/core/ctx.lua
index 0d6e364..7b87e68 100644
--- a/apisix/core/ctx.lua
+++ b/apisix/core/ctx.lua
@@ -28,6 +28,7 @@ local ngx_var      = ngx.var
 local re_gsub      = ngx.re.gsub
 local type         = type
 local error        = error
+local ngx          = ngx
 
 
 ffi.cdef[[
@@ -89,6 +90,12 @@ do
                 key = re_gsub(key, "-", "_", "jo")
                 val = get_var(key, t._request)
 
+            elseif key == "route_id" then
+                val = ngx.ctx.api_ctx and ngx.ctx.api_ctx.route_id
+
+            elseif key == "service_id" then
+                val = ngx.ctx.api_ctx and ngx.ctx.api_ctx.service_id
+
             else
                 val = get_var(key, t._request)
             end
diff --git a/t/core/ctx.t b/t/core/ctx.t
index cea8ca5..ae02b52 100644
--- a/t/core/ctx.t
+++ b/t/core/ctx.t
@@ -155,3 +155,190 @@ GET /t?a=aaa
 --- error_code: 500
 --- error_log
 invalid argument, expect string value
+
+
+
+=== TEST 7: add route and get `route_id`
+--- config
+    location /t {
+        content_by_lua_block {
+            local t = require("lib.test_admin").test
+            local code, body = t('/apisix/admin/routes/1',
+                ngx.HTTP_PUT,
+                [[{
+                    "methods": ["GET"],
+                    "plugins": {
+                        "serverless-pre-function": {
+                            "phase": "access",
+                            "functions" : ["return function() ngx.log(ngx.INFO, \"route_id: \", ngx.ctx.api_ctx.var.route_id) end"]
+                        }
+                    },
+                    "upstream": {
+                        "type": "roundrobin",
+                        "nodes": {
+                            "127.0.0.1:1980": 1
+                        }
+                    },
+                    "uri": "/hello"
+                }]]
+                )
+
+            if code >= 300 then
+                ngx.status = code
+            end
+            ngx.say(body)
+        }
+    }
+--- request
+GET /t
+--- response_body
+passed
+--- no_error_log
+[error]
+
+
+
+=== TEST 8: `url` exist and `route_id` is 1
+--- request
+GET /hello
+--- response_body
+hello world
+--- error_log
+route_id: 1
+--- no_error_log
+[error]
+
+
+
+=== TEST 9: create a service and `service_id` is 1
+--- config
+    location /t {
+        content_by_lua_block {
+            local t = require("lib.test_admin").test
+            local code, body = t('/apisix/admin/services/1',
+                 ngx.HTTP_PUT,
+                 [[{
+                    "desc": "new_service"
+                }]],
+                [[{
+                    "node": {
+                        "value": {
+                            "desc": "new_service"
+                        },
+                        "key": "/apisix/services/1"
+                    },
+                    "action": "set"
+                }]]
+                )
+
+            ngx.status = code
+            ngx.say(body)
+        }
+    }
+--- request
+GET /t
+--- response_body
+passed
+--- no_error_log
+[error]
+
+
+
+=== TEST 10: the route object not bind any service object
+--- config
+    location /t {
+        content_by_lua_block {
+            local t = require("lib.test_admin").test
+            local code, body = t('/apisix/admin/routes/1',
+                ngx.HTTP_PUT,
+                [[{
+                    "methods": ["GET"],
+                    "plugins": {
+                        "serverless-pre-function": {
+                            "phase": "access",
+                            "functions" : ["return function() ngx.log(ngx.INFO, \"service_id: \", ngx.ctx.api_ctx.var.service_id or 'empty route_id') end"]
+                        }
+                    },
+                    "upstream": {
+                        "type": "roundrobin",
+                        "nodes": {
+                            "127.0.0.1:1980": 1
+                        }
+                    },
+                    "uri": "/hello"
+                }]]
+                )
+
+            ngx.status = code
+            ngx.say(body)
+        }
+    }
+--- request
+GET /t
+--- response_body
+passed
+--- no_error_log
+[error]
+
+
+
+=== TEST 11: service_id is empty
+--- request
+GET /hello
+--- response_body
+hello world
+--- error_log
+service_id: empty route_id
+--- no_error_log
+[error]
+
+
+
+=== TEST 12: update route and binding service_id
+--- config
+    location /t {
+        content_by_lua_block {
+            local t = require("lib.test_admin").test
+            local code, body = t('/apisix/admin/routes/1',
+                ngx.HTTP_PUT,
+                [[{
+                    "methods": ["GET"],
+                    "service_id": 1,
+                    "plugins": {
+                        "serverless-pre-function": {
+                            "phase": "access",
+                            "functions" : ["return function() ngx.log(ngx.INFO, \"service_id: \", ngx.ctx.api_ctx.var.service_id) end"]
+                        }
+                    },
+                    "upstream": {
+                            "type": "roundrobin",
+                            "nodes": {
+                                "127.0.0.1:1980": 1
+                            }
+                    },
+                    "uri": "/hello"
+                }]]
+                )
+
+            ngx.status = code
+            ngx.say(body)
+        }
+    }
+--- request
+GET /t
+--- response_body
+passed
+--- no_error_log
+[error]
+
+
+
+=== TEST 13: service_id is 1
+--- request
+GET /hello
+--- response_body
+hello world
+--- error_log
+service_id: 1
+--- no_error_log
+[error]