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

shuaijinchao pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/apisix-python-plugin-runner.git


The following commit(s) were added to refs/heads/master by this push:
     new 8a8992d  refactor(req+resp): unified request and response object 
interface (#42)
8a8992d is described below

commit 8a8992d550fad2c5e7b76eb01f6c6e65e0aabe3e
Author: 帅进超 <[email protected]>
AuthorDate: Wed Feb 16 10:56:35 2022 +0800

    refactor(req+resp): unified request and response object interface (#42)
---
 apisix/plugins/rewrite.py          |   6 +-
 apisix/plugins/stop.py             |   6 +-
 apisix/runner/http/request.py      | 326 +++++++++++++++++++------------------
 apisix/runner/http/response.py     | 223 ++++++++-----------------
 apisix/runner/server/handle.py     |  10 +-
 tests/runner/http/test_request.py  | 104 +++++++-----
 tests/runner/http/test_response.py |  63 ++++---
 7 files changed, 343 insertions(+), 395 deletions(-)

diff --git a/apisix/plugins/rewrite.py b/apisix/plugins/rewrite.py
index e44900f..dd81026 100644
--- a/apisix/plugins/rewrite.py
+++ b/apisix/plugins/rewrite.py
@@ -54,10 +54,10 @@ class Rewrite(PluginBase):
         # print(conf)
 
         # Rewrite request headers
-        request.headers["X-Resp-A6-Runner"] = "Python"
+        request.set_header("X-Resp-A6-Runner", "Python")
 
         # Rewrite request args
-        request.args["a6_runner"] = "Python"
+        request.set_arg("a6_runner", "Python")
 
         # Rewrite request path
-        request.path = "/a6/python/runner"
+        request.set_uri("/a6/python/runner")
diff --git a/apisix/plugins/stop.py b/apisix/plugins/stop.py
index 86ce5e9..86b90ae 100644
--- a/apisix/plugins/stop.py
+++ b/apisix/plugins/stop.py
@@ -54,10 +54,10 @@ class Stop(PluginBase):
         # print(conf)
 
         # Set response headers
-        response.headers["X-Resp-A6-Runner"] = "Python"
+        response.set_header("X-Resp-A6-Runner", "Python")
 
         # Set response body
-        response.body = "Hello, Python Runner of APISIX"
+        response.set_body("Hello, Python Runner of APISIX")
 
         # Set response status code
-        response.status_code = 201
+        response.set_status_code(201)
diff --git a/apisix/runner/http/request.py b/apisix/runner/http/request.py
index a318198..e3c2196 100644
--- a/apisix/runner/http/request.py
+++ b/apisix/runner/http/request.py
@@ -24,6 +24,7 @@ from A6.HTTPReqCall import Rewrite as HCRw
 from A6.HTTPReqCall import Action as HCAction
 from A6.HTTPReqCall import Req as HCReq
 from A6.PrepareConf import Req as PCReq
+from A6.Err.Code import Code as A6ErrCode
 
 
 class Request:
@@ -34,295 +35,305 @@ class Request:
         :param r:
             rpc request object
         """
-        self._rpc_type = r.request.ty
-        self._rpc_buf = r.request.data
-        self._req_id = 0
-        self.code = 0
-        self._req_conf_token = 0
-        self._req_method = ""
-        self._req_path = ""
-        self._req_headers = {}
-        self._req_configs = {}
-        self._req_args = {}
-        self._req_src_ip = ""
-        self._err_code = 0
-        self.__init()
+        # request object
+        self.r = r
 
-    @property
-    def rpc_type(self) -> int:
-        """
-        get request protocol type for request handler
-        :return:
-        """
-        return self._rpc_type
+        # request attribute
+        self.__remote_addr = ""
+        self.__headers = {}
+        self.__args = {}
+        self.__uri = ""
+        self.__method = ""
 
-    @rpc_type.setter
-    def rpc_type(self, rpc_type: int) -> None:
-        """
-        set request protocol type for request handler
-        :param rpc_type:
-        :return:
-        """
-        self._rpc_type = rpc_type
+        # custom attribute
+        self.__conf_token = 0
+        self.__id = 0
+        self.__configs = {}
+
+        self.__init()
 
-    @property
-    def rpc_buf(self) -> bytes:
+    def get_header(self, key: str) -> str:
         """
-        get request buffer data for request handler
+        get request header
+        :param key:
         :return:
         """
-        return self._rpc_buf
+        return self.__headers.get(key)
 
-    @rpc_buf.setter
-    def rpc_buf(self, rpc_buf: bytes) -> None:
+    def set_header(self, key: str, value: str) -> bool:
         """
-        set request buffer data for request handler
+        set request header
+        :param key:
+        :param value:
         :return:
         """
-        self._rpc_buf = rpc_buf
+        if key and value:
+            self.__headers[key] = value
+            return True
+        return False
 
-    @property
-    def conf_token(self) -> int:
+    def get_headers(self) -> dict:
         """
-        get request token for request handler
+        get request headers
         :return:
         """
-        return self._req_conf_token
+        return self.__headers
 
-    @conf_token.setter
-    def conf_token(self, req_conf_token: int) -> None:
+    def set_headers(self, headers: dict) -> bool:
         """
-        set request token for request handler
+        get request headers
+        :param headers:
         :return:
         """
-        self._req_conf_token = req_conf_token
+        if headers:
+            self.__headers = headers
+            return True
+        return False
 
-    @property
-    def id(self) -> int:
+    def get_arg(self, key: str) -> str:
         """
-        get request id for request handler
+        get request param
+        :param key:
         :return:
         """
-        return self._req_id
+        return self.__args.get(key)
 
-    @id.setter
-    def id(self, req_id: int) -> None:
+    def set_arg(self, key: str, value: str) -> bool:
         """
-        set request id for request handler
+        set request param
+        :param key:
+        :param value:
         :return:
         """
-        self._req_id = req_id
+        if key and value:
+            self.__args[key] = value
+            return True
+        return False
 
-    @property
-    def method(self) -> str:
+    def get_args(self) -> dict:
         """
-        get request method for request handler
+        get request params
         :return:
         """
-        return self._req_method
+        return self.__args
 
-    @method.setter
-    def method(self, req_method: str) -> None:
+    def set_args(self, args: dict) -> bool:
         """
-        set request method for request handler
+        set request params
+        :param args:
         :return:
         """
-        self._req_method = req_method
+        if args:
+            self.__args = args
+            return True
+        return False
 
-    @property
-    def path(self) -> str:
+    def get_uri(self) -> str:
         """
-        get request path for request handler
+        get request uri
         :return:
         """
-        return self._req_path
+        return self.__uri
 
-    @path.setter
-    def path(self, req_path: str) -> None:
+    def set_uri(self, uri: str) -> bool:
         """
-        set request path for request handler
+        set request uri
+        :param uri:
         :return:
         """
-        self._req_path = req_path
+        if uri and uri.startswith("/"):
+            self.__uri = uri
+            return True
+        return False
 
-    @property
-    def headers(self) -> dict:
+    def get_remote_addr(self) -> str:
         """
-        get request headers for request handler
+        get request client ip address
         :return:
         """
-        return self._req_headers
+        return self.__remote_addr
 
-    @headers.setter
-    def headers(self, req_headers: dict) -> None:
+    def set_remote_addr(self, remote_addr: str) -> bool:
         """
-        set request headers for request handler
+        set request client ip address
+        :param remote_addr:
         :return:
         """
-        self._req_headers = req_headers
+        if remote_addr:
+            self.__remote_addr = remote_addr
+            return True
+        return False
 
-    @property
-    def configs(self) -> dict:
+    def get_conf_token(self) -> int:
         """
-        get plugin instance and configs for request handler
+        get request config token
         :return:
         """
-        return self._req_configs
+        return self.__conf_token
 
-    @configs.setter
-    def configs(self, req_configs: dict) -> None:
+    def set_conf_token(self, conf_token: int) -> bool:
         """
-        set plugin instance and configs for request handler
+        set request config token
+        :param conf_token:
         :return:
         """
-        self._req_configs = req_configs
+        if conf_token:
+            self.__conf_token = conf_token
+            return True
+        return False
 
-    @property
-    def args(self) -> dict:
+    def get_id(self):
         """
-        get request args for request handler
+        get request id
         :return:
         """
-        return self._req_args
+        return self.__id
 
-    @args.setter
-    def args(self, req_args: dict) -> None:
+    def set_id(self, id: int):
         """
-        set request args for request handler
+        set request id
+        :param id:
         :return:
         """
-        self._req_args = req_args
+        if id:
+            self.__id = id
+            return True
+        return False
 
-    @property
-    def src_ip(self) -> str:
+    def set_method(self, method: str) -> bool:
         """
-        get request source ip address for request handler
+        set request method
+        :param method:
         :return:
         """
-        return self._req_src_ip
+        # support common request method setting
+        if method and method.upper() in ["GET", "POST", "PUT", "DELETE", 
"HEAD", "OPTIONS", "PATCH"]:
+            self.__method = method
+            return True
+        return False
 
-    @src_ip.setter
-    def src_ip(self, req_src_ip: str) -> None:
+    def get_method(self) -> str:
         """
-        set request source ip address for request handler
+        get request method
         :return:
         """
-        self._req_src_ip = req_src_ip
+        return self.__method
 
-    @property
-    def err_code(self) -> int:
+    def set_config(self, key: str, value: str):
         """
-        get error code for request handler
+        set plugin config
+        :param key:
+        :param value:
         :return:
         """
-        return self._err_code
+        if key and value:
+            self.__configs[key] = value
+            return True
+        return False
 
-    @err_code.setter
-    def err_code(self, err_code: int) -> None:
+    def get_config(self, key: str) -> str:
         """
-        set error code for request handler
+        get plugin config
+        :param key:
         :return:
         """
-        self._err_code = err_code
+        return self.__configs.get(key)
 
-    def reset(self) -> None:
+    def get_configs(self) -> dict:
         """
-        reset request handler
+        get plugin configs
         :return:
         """
+        return self.__configs
+
+    def set_configs(self, configs: dict) -> bool:
         """
-        reset request class
+        set plugin configs
         :return:
         """
-        self._rpc_type = 0
-        self._rpc_buf = b''
-        self._req_id = 0
-        self._req_conf_token = 0
-        self._req_method = ""
-        self._req_path = ""
-        self._req_headers = {}
-        self._req_configs = {}
-        self._req_args = {}
-        self._req_src_ip = ""
+        if configs:
+            self.__configs = configs
+            return True
+        return False
 
     def __init(self) -> None:
         """
         init request handler
         :return:
         """
-        if self.rpc_type == runner_utils.RPC_HTTP_REQ_CALL:
-            req = HCReq.Req.GetRootAsReq(self.rpc_buf)
+        if self.r.request.ty == runner_utils.RPC_HTTP_REQ_CALL:
+            req = HCReq.Req.GetRootAsReq(self.r.request.data)
 
             # fetch request id
-            self.id = req.Id()
+            self.set_id(req.Id())
 
             # fetch request conf token
-            self.conf_token = req.ConfToken()
-
-            # fetch request uri
-            self.path = req.Path().decode()
+            self.set_conf_token(req.ConfToken())
 
             # fetch request method
-            self.method = runner_utils.get_method_name_by_code(req.Method())
+            self.set_method(runner_utils.get_method_name_by_code(req.Method()))
 
             # fetch request remote_addr
             ip_list = runner_utils.parse_list_vector(req, 
runner_utils.VECTOR_TYPE_SOURCE_IP, True)
-            if ip_list:
-                if len(ip_list) == 16:
-                    self.src_ip = IPv6Address(bytes(ip_list)).exploded
-                else:
-                    self.src_ip = IPv4Address(bytes(ip_list)).exploded
+            if len(ip_list) == 16:
+                self.set_remote_addr(IPv6Address(bytes(ip_list)).exploded)
+            else:
+                self.set_remote_addr(IPv4Address(bytes(ip_list)).exploded)
+
+            # fetch request uri
+            self.set_uri(req.Path().decode())
 
             # fetch request headers
             hdr_dict = runner_utils.parse_dict_vector(req, 
runner_utils.VECTOR_TYPE_HEADER)
-            if hdr_dict:
-                self.headers = hdr_dict
+            self.set_headers(hdr_dict)
 
             # fetch request args
             arg_dict = runner_utils.parse_dict_vector(req, 
runner_utils.VECTOR_TYPE_QUERY)
-            if arg_dict:
-                self.args = arg_dict
+            self.set_args(arg_dict)
 
-        if self.rpc_type == runner_utils.RPC_PREPARE_CONF:
-            req = PCReq.Req.GetRootAsReq(self.rpc_buf)
-            if req.ConfIsNone():
-                return
-
-            configs = {}
+        if self.r.request.ty == runner_utils.RPC_PREPARE_CONF:
+            req = PCReq.Req.GetRootAsReq(self.r.request.data)
             for i in range(req.ConfLength()):
                 # fetch request config
                 name = req.Conf(i).Name().decode()
                 config = req.Conf(i).Value().decode()
-                configs[name] = config
-            self.configs = configs
+                self.set_config(name, config)
 
     def checked(self):
         """
         check request params is valid
         :return:
         """
-        if len(self._req_path) == 0 and len(self._req_headers) == 0 and 
len(self._req_args) == 0:
+        if len(self.__uri) == 0 and len(self.__headers) == 0 and 
len(self.__args) == 0:
             return False
         else:
             return True
 
     @runner_utils.response_config
     def config_handler(self, builder: flatbuffers.Builder):
-        return self.conf_token
+        """
+        get config setting response
+        :param builder:
+        :return:
+        """
+        return self.get_conf_token()
 
     @runner_utils.response_call(HCAction.Action.Rewrite)
     def call_handler(self, builder: flatbuffers.Builder):
+        """
+        get http call response
+        :param builder:
+        :return:
+        """
         if not self.checked():
             return None, 0
 
-        if len(self._req_path) <= 0:
-            self._req_path = "/"
-        path_vector = runner_utils.create_str_vector(builder, self._req_path)
+        path_vector = runner_utils.create_str_vector(builder, self.get_uri())
 
-        headers_vector = runner_utils.create_dict_vector(builder, 
self._req_headers, HCAction.Action.Rewrite,
+        headers_vector = runner_utils.create_dict_vector(builder, 
self.get_headers(), HCAction.Action.Rewrite,
                                                          
runner_utils.VECTOR_TYPE_HEADER)
 
-        args_vector = runner_utils.create_dict_vector(builder, self._req_args, 
HCAction.Action.Rewrite,
+        args_vector = runner_utils.create_dict_vector(builder, 
self.get_args(), HCAction.Action.Rewrite,
                                                       
runner_utils.VECTOR_TYPE_QUERY)
 
         HCRw.RewriteStart(builder)
@@ -330,8 +341,13 @@ class Request:
         HCRw.RewriteAddHeaders(builder, headers_vector)
         HCRw.RewriteAddArgs(builder, args_vector)
         rewrite = HCRw.RewriteEnd(builder)
-        return rewrite, self._req_id
+        return rewrite, self.get_id()
 
     @runner_utils.response_unknown
     def unknown_handler(self, builder: flatbuffers.Builder):
-        return self._err_code
+        """
+        get unknown response
+        :param builder:
+        :return:
+        """
+        return A6ErrCode.BAD_REQUEST
diff --git a/apisix/runner/http/response.py b/apisix/runner/http/response.py
index 4f06034..50dca10 100644
--- a/apisix/runner/http/response.py
+++ b/apisix/runner/http/response.py
@@ -28,226 +28,139 @@ PLUGIN_ACTION_REWRITE = HCAction.Action.Rewrite
 
 class Response:
 
-    def __init__(self, ty: int = 0):
+    def __init__(self):
         """
         Init and parse request
-        :param ty:
-            rpc request protocol type
-        """
-        self.rpc_type = ty
-        self._resp_id = 0
-        self._resp_token = 0
-        self._resp_body = ""
-        self._resp_path = ""
-        self._resp_args = {}
-        self._resp_headers = {}
-        self._resp_status_code = 0
-        self._resp_error_code = 0
-        self._resp_action_type = 0
-
-    @property
-    def rpc_type(self) -> int:
-        """
-        get protocol type for response handler
-        :return:
-        """
-        return self._rpc_type
-
-    @rpc_type.setter
-    def rpc_type(self, rpc_type: int) -> None:
-        """
-        set protocol type for response handler
-        :return:
-        """
-        self._rpc_type = rpc_type
-
-    @property
-    def id(self) -> int:
-        """
-        get request id for response handler
-        :return:
-        """
-        return self._resp_id
-
-    @id.setter
-    def id(self, resp_id: int) -> None:
-        """
-        set request id for response handler
-        :return:
-        """
-        self._resp_id = resp_id
-
-    @property
-    def token(self) -> int:
         """
-        get token for response handler
-        :return:
-        """
-        return self._resp_token
 
-    @token.setter
-    def token(self, resp_token: int) -> None:
-        """
-        set token for response handler
-        :return:
-        """
-        self._resp_token = resp_token
+        # response attribute
+        self.__body = ""
+        self.__headers = {}
+        self.__status_code = 0
 
-    @property
-    def body(self) -> str:
-        """
-        get body for response handler
-        :return:
-        """
-        return self._resp_body
+        # custom attribute
+        self.__req_id = 0
 
-    @body.setter
-    def body(self, resp_body: str) -> None:
+    def get_header(self, key: str) -> str:
         """
-        set body for response handler
+        get response header
+        :param key:
         :return:
         """
-        self._resp_body = resp_body
+        return self.__headers.get(key)
 
-    @property
-    def path(self) -> str:
+    def set_header(self, key: str, value: str) -> bool:
         """
-        get path for response handler
+        set response header
+        :param key:
+        :param value:
         :return:
         """
-        return self._resp_path
-
-    @path.setter
-    def path(self, resp_path: str) -> None:
-        """
-        set path for response handler
-        :return:
-        """
-        self._resp_path = resp_path
-
-    @property
-    def args(self) -> dict:
-        """
-        get args for response handler
-        :return:
-        """
-        return self._resp_args
-
-    @args.setter
-    def args(self, resp_args: dict) -> None:
-        """
-        set args for response handler
-        :return:
-        """
-        self._resp_args = resp_args
-
-    @property
-    def headers(self) -> dict:
-        """
-        get headers for response handler
-        :return:
-        """
-        return self._resp_headers
+        if key and value:
+            self.__headers[key] = value
+            return True
+        return False
 
-    @headers.setter
-    def headers(self, resp_headers: dict) -> None:
+    def get_headers(self) -> dict:
         """
-        set headers for response handler
+        get response headers
         :return:
         """
-        self._resp_headers = resp_headers
+        return self.__headers
 
-    @property
-    def status_code(self) -> int:
+    def set_headers(self, headers: dict) -> bool:
         """
-        get status code for response handler
+        get response headers
+        :param headers:
         :return:
         """
-        return self._resp_status_code
+        if headers:
+            self.__headers = headers
+            return True
+        return False
 
-    @status_code.setter
-    def status_code(self, resp_status_code: int) -> None:
+    def get_body(self) -> str:
         """
-        set status code for response handler
+        get response body
         :return:
         """
-        self._resp_status_code = resp_status_code
+        return self.__body
 
-    @property
-    def error_code(self) -> int:
+    def set_body(self, body: str) -> bool:
         """
-        get error code for response handler
+        get response body
         :return:
         """
-        return self._resp_error_code
+        if body:
+            self.__body = body
+            return True
+        return False
 
-    @error_code.setter
-    def error_code(self, resp_error_code: int = 0) -> None:
+    def get_status_code(self) -> int:
         """
-        set error code for response handler
+        get response status code
         :return:
         """
-        self._resp_error_code = resp_error_code
+        return self.__status_code or 200
 
-    @property
-    def action_type(self):
+    def set_status_code(self, status_code: int) -> bool:
         """
-        get action type for response handler
+        set response status code
+        :param status_code:
         :return:
         """
-        return self._resp_action_type
+        if status_code and (100 <= status_code <= 599):
+            self.__status_code = status_code
+            return True
+        return False
 
-    @action_type.setter
-    def action_type(self, action_type: int = 0) -> None:
+    def get_req_id(self) -> int:
         """
-        set action type for response handler
-        :param action_type:
+        get request id
         :return:
         """
-        self._resp_action_type = action_type
+        return self.__req_id
 
-    def reset(self) -> None:
+    def set_req_id(self, req_id: int) -> bool:
         """
-        reset response handler
+        set request id
+        :param req_id:
         :return:
         """
-        self._rpc_type = 0
-        self._resp_id = 0
-        self._resp_token = 0
-        self._resp_body = ""
-        self._resp_path = ""
-        self._resp_args = {}
-        self._resp_headers = {}
-        self._resp_status_code = 0
-        self._resp_error_code = 0
-        self._resp_action_type = 0
+        if req_id:
+            self.__req_id = req_id
+            return True
+        return False
 
     def changed(self) -> bool:
         """
         check response handler is change
         :return:
         """
-        if self.body or self.headers or self.status_code or self.token or 
self.error_code:
+        if self.__body or self.__headers or self.__status_code:
             return True
         else:
             return False
 
     @runner_utils.response_call(HCAction.Action.Stop)
     def call_handler(self, builder: flatbuffers.Builder):
+        """
+        get http call response
+        :param builder:
+        :return:
+        """
         if not self.changed():
             return None, 0
-        headers_vector = runner_utils.create_dict_vector(builder, 
self.headers, HCAction.Action.Stop,
+        headers_vector = runner_utils.create_dict_vector(builder, 
self.get_headers(), HCAction.Action.Stop,
                                                          
runner_utils.VECTOR_TYPE_HEADER)
 
-        body_vector = runner_utils.create_str_vector(builder, self.body)
+        body_vector = runner_utils.create_str_vector(builder, self.get_body())
 
-        status_code = 200
-        if self.status_code > 0:
-            status_code = self.status_code
+        status_code = self.get_status_code()
 
         HCStop.StopStart(builder)
         HCStop.StopAddStatus(builder, status_code)
         HCStop.StopAddBody(builder, body_vector)
         HCStop.StopAddHeaders(builder, headers_vector)
         stop = HCStop.StopEnd(builder)
-        return stop, self.id
+        return stop, self.get_req_id()
diff --git a/apisix/runner/server/handle.py b/apisix/runner/server/handle.py
index 9f43719..40e10d8 100644
--- a/apisix/runner/server/handle.py
+++ b/apisix/runner/server/handle.py
@@ -44,7 +44,7 @@ class Handle:
             # generate token
             token = runner_cache.generate_token()
             # get plugins config
-            configs = req.configs
+            configs = req.get_configs()
             # cache plugins config
             ok = runner_cache.set_config_by_token(token, configs)
             if not ok:
@@ -53,7 +53,7 @@ class Handle:
                 req.unknown_handler(builder)
                 return builder
 
-            req.conf_token = token
+            req.set_conf_token(token)
             ok = req.config_handler(builder)
             if not ok:
                 self.r.log.error("prepare conf request failure")
@@ -65,7 +65,7 @@ class Handle:
 
         elif self.r.request.ty == runner_utils.RPC_HTTP_REQ_CALL:
             # get request token
-            token = req.conf_token
+            token = req.get_conf_token()
             # get plugins
             configs = runner_cache.get_config_by_token(token)
 
@@ -76,8 +76,8 @@ class Handle:
                 return builder
 
             # init response
-            resp = NewHttpResponse(self.r.request.ty)
-            resp.id = req.id
+            resp = NewHttpResponse()
+            resp.set_req_id(req.get_id())
 
             # execute plugins
             ok = runner_plugin.execute(configs, self.r, req, resp)
diff --git a/tests/runner/http/test_request.py 
b/tests/runner/http/test_request.py
index b63736d..6900575 100644
--- a/tests/runner/http/test_request.py
+++ b/tests/runner/http/test_request.py
@@ -42,10 +42,10 @@ def test_request_config_handler():
 
     r = default_request()
     req = RunnerHttpRequest(r)
-    req.conf_token = 0
+    req.set_conf_token(0)
     ok = req.config_handler(builder)
     assert not ok
-    req.conf_token = 1
+    req.set_conf_token(1)
     ok = req.config_handler(builder)
     assert ok
 
@@ -54,53 +54,75 @@ def test_request_call_handler():
     builder = runner_utils.new_builder()
     r = default_request()
     req = RunnerHttpRequest(r)
-    req.path = ""
-    req.headers = {}
-    req.args = {}
+    req.set_uri("")
+    req.set_headers({})
+    req.set_args({})
     ok = req.call_handler(builder)
     assert not ok
-    req.headers["X-Hello"] = "World"
-    req.id = 1
+    req.set_header("X-Hello", "World")
+    req.set_id(1)
     ok = req.call_handler(builder)
     assert ok
-    req.path = "/hello"
+    req.set_uri("/hello")
+    req.set_id(1)
     ok = req.call_handler(builder)
     assert ok
 
 
 def test_request_handler():
+    default_key = "hello"
+    default_val = "world"
+    default_empty_str = ""
+    default_empty_dict = {}
+    default_id = 1000
+    default_token = 1
+    default_uri = "/hello"
+    default_method = "GET"
+    default_ip = "127.0.0.1"
+
     r = default_request()
     req = RunnerHttpRequest(r)
-    req.id = 1000
-    assert req.id == 1000
-    req.rpc_type = runner_utils.RPC_UNKNOWN
-    assert req.rpc_type == runner_utils.RPC_UNKNOWN
-    req.rpc_buf = b'hello'
-    assert req.rpc_buf == b'hello'
-    req.conf_token = 10
-    assert req.conf_token == 10
-    req.method = "GET"
-    assert req.method == "GET"
-    req.path = "/hello"
-    assert req.path == "/hello"
-    req.headers = {"X-HELLO": "Python"}
-    assert req.headers == {"X-HELLO": "Python"}
-    req.configs = {"hello": "Python"}
-    assert req.configs == {"hello": "Python"}
-    req.args = {"hello": "Python"}
-    assert req.args == {"hello": "Python"}
-    req.src_ip = "127.0.0.1"
-    assert req.src_ip == "127.0.0.1"
-    req.err_code = 400
-    assert req.err_code == 400
-    req.reset()
-    assert req.rpc_type == 0
-    assert req.rpc_buf == b''
-    assert req.id == 0
-    assert req.conf_token == 0
-    assert req.method == ""
-    assert req.path == ""
-    assert req.headers == {}
-    assert req.configs == {}
-    assert req.args == {}
-    assert req.src_ip == ""
+
+    assert not req.set_id(0)
+    assert req.set_id(default_id)
+    assert req.get_id() == default_id
+
+    assert not req.set_conf_token(0)
+    assert req.set_conf_token(default_token)
+    assert req.get_conf_token() == default_token
+
+    assert not req.set_method(default_key)
+    assert req.set_method(default_method)
+    assert req.get_method() == default_method
+
+    assert not req.set_uri(default_key)
+    assert req.set_uri(default_uri)
+    assert req.get_uri() == default_uri
+
+    assert not req.set_header(default_key, default_empty_str)
+    assert req.set_header(default_key, default_val)
+    assert req.get_header(default_key) == default_val
+
+    assert not req.set_headers(default_empty_dict)
+    assert req.set_headers({default_key: default_val})
+    assert req.get_headers() == {default_key: default_val}
+
+    assert not req.set_config(default_key, default_empty_str)
+    assert req.set_config(default_key, default_val)
+    assert req.get_config(default_key) == default_val
+
+    assert not req.set_configs(default_empty_dict)
+    assert req.set_configs({default_key: default_val})
+    assert req.get_configs() == {default_key: default_val}
+
+    assert not req.set_arg(default_key, default_empty_str)
+    assert req.set_arg(default_key, default_val)
+    assert req.get_arg(default_key) == default_val
+
+    assert not req.set_args(default_empty_dict)
+    assert req.set_args({default_key: default_val})
+    assert req.get_args() == {default_key: default_val}
+
+    assert not req.set_remote_addr(default_empty_str)
+    assert req.set_remote_addr(default_ip)
+    assert req.get_remote_addr() == default_ip
diff --git a/tests/runner/http/test_response.py 
b/tests/runner/http/test_response.py
index 50689fa..c9e3004 100644
--- a/tests/runner/http/test_response.py
+++ b/tests/runner/http/test_response.py
@@ -22,44 +22,41 @@ from apisix.runner.http.response import Response as 
RunnerHttpResponse
 def test_response_call_handler():
     builder = runner_utils.new_builder()
     resp = RunnerHttpResponse()
-    resp.id = 1
+    resp.set_req_id(1)
     ok = resp.call_handler(builder)
     assert not ok
-    resp.body = "Hello Python Runner"
+    resp.set_body("Hello Python Runner")
     ok = resp.call_handler(builder)
     assert ok
 
 
 def test_response_handler():
+    default_key = "hello"
+    default_val = "world"
+    default_empty_str = ""
+    default_empty_dict = {}
+    default_num_zero = 0
+    default_id = 1000
+    default_code = 200
+
     resp = RunnerHttpResponse()
-    resp.rpc_type = runner_utils.RPC_UNKNOWN
-    assert resp.rpc_type == runner_utils.RPC_UNKNOWN
-    resp.token = 1000
-    assert resp.token == 1000
-    resp.headers = {"X-HELLO": "Python"}
-    assert resp.headers == {"X-HELLO": "Python"}
-    resp.body = "Hello, Python"
-    assert resp.body == "Hello, Python"
-    resp.args = {"hello": "Python"}
-    assert resp.args == {"hello": "Python"}
-    resp.path = "/hello"
-    assert resp.path == "/hello"
-    resp.id = 1000
-    assert resp.id == 1000
-    resp.status_code = 200
-    assert resp.status_code == 200
-    resp.error_code = 1
-    assert resp.error_code == 1
-    resp.action_type = 10
-    assert resp.action_type == 10
-    resp.reset()
-    assert resp.rpc_type == 0
-    assert resp.id == 0
-    assert resp.token == 0
-    assert resp.body == ""
-    assert resp.path == ""
-    assert resp.args == {}
-    assert resp.headers == {}
-    assert resp.status_code == 0
-    assert resp.error_code == 0
-    assert resp.action_type == 0
+
+    assert not resp.set_header(default_key, default_empty_str)
+    assert resp.set_header(default_key, default_val)
+    assert resp.get_header(default_key) == default_val
+
+    assert not resp.set_headers(default_empty_dict)
+    assert resp.set_headers({default_key: default_val})
+    assert resp.get_headers() == {default_key: default_val}
+
+    assert not resp.set_body(default_empty_str)
+    assert resp.set_body(default_val)
+    assert resp.get_body() == default_val
+
+    assert not resp.set_req_id(0)
+    assert resp.set_req_id(default_id)
+    assert resp.get_req_id() == default_id
+
+    assert not resp.set_status_code(default_num_zero)
+    assert resp.set_status_code(default_code)
+    assert resp.get_status_code() == default_code

Reply via email to