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

monkeydluffy 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 4c5a10924 change: creating core resources does not allow passing in 
`create_time` and `update_time` (#10232)
4c5a10924 is described below

commit 4c5a109244f366bdfb3a176d3fab65c8b85f3463
Author: Sn0rt <[email protected]>
AuthorDate: Sat Oct 7 11:55:06 2023 +0800

    change: creating core resources does not allow passing in `create_time` and 
`update_time` (#10232)
---
 apisix/admin/resource.lua   | 45 ++++++++++++++++++++++++++++++++--
 docs/en/latest/admin-api.md | 24 +++---------------
 docs/zh/latest/admin-api.md | 16 ------------
 t/admin/consumers.t         | 26 +++-----------------
 t/admin/routes4.t           | 21 +++-------------
 t/admin/services.t          | 59 ++++++++++++++++++++++-----------------------
 t/admin/ssl.t               |  4 ---
 t/admin/upstream4.t         | 35 +++++++++------------------
 8 files changed, 92 insertions(+), 138 deletions(-)

diff --git a/apisix/admin/resource.lua b/apisix/admin/resource.lua
index 35fe3bba2..b03f1b069 100644
--- a/apisix/admin/resource.lua
+++ b/apisix/admin/resource.lua
@@ -19,6 +19,7 @@ local utils = require("apisix.admin.utils")
 local apisix_ssl = require("apisix.ssl")
 local setmetatable = setmetatable
 local tostring = tostring
+local ipairs = ipairs
 local type = type
 
 
@@ -49,7 +50,38 @@ local function split_typ_and_id(id, sub_path)
 end
 
 
-function _M:check_conf(id, conf, need_id, typ)
+local function check_forbidden_properties(conf, forbidden_properties)
+    local not_allow_properties = "the property is forbidden: "
+
+    if conf then
+        for _, v in ipairs(forbidden_properties) do
+            if conf[v] then
+                return not_allow_properties .. " " .. v
+            end
+        end
+
+        if conf.upstream then
+            for _, v in ipairs(forbidden_properties) do
+                if conf.upstream[v] then
+                    return not_allow_properties .. " upstream." .. v
+                end
+            end
+        end
+
+        if conf.plugins then
+            for _, v in ipairs(forbidden_properties) do
+                if conf.plugins[v] then
+                    return not_allow_properties .. " plugins." .. v
+                end
+            end
+        end
+    end
+
+    return nil
+end
+
+
+function _M:check_conf(id, conf, need_id, typ, allow_time)
     if self.name == "secrets" then
         id = typ .. "/" .. id
     end
@@ -76,6 +108,15 @@ function _M:check_conf(id, conf, need_id, typ)
         conf.id = id
     end
 
+    -- check create time and update time
+    if not allow_time then
+        local forbidden_properties = {"create_time", "update_time"}
+        local err = check_forbidden_properties(conf, forbidden_properties)
+        if err then
+            return nil, {error_msg = err}
+        end
+    end
+
     core.log.info("conf  : ", core.json.delay_encode(conf))
 
     -- check the resource own rules
@@ -355,7 +396,7 @@ function _M:patch(id, conf, sub_path, args)
 
     core.log.info("new conf: ", core.json.delay_encode(node_value, true))
 
-    local ok, err = self:check_conf(id, node_value, true, typ)
+    local ok, err = self:check_conf(id, node_value, true, typ, true)
     if not ok then
         return 400, err
     end
diff --git a/docs/en/latest/admin-api.md b/docs/en/latest/admin-api.md
index 6f96e18ab..396365f45 100644
--- a/docs/en/latest/admin-api.md
+++ b/docs/en/latest/admin-api.md
@@ -325,8 +325,6 @@ ID's as a text string must be of a length between 1 and 64 
characters and they s
 | timeout          | False                                    | Auxiliary   | 
Sets the timeout (in seconds) for connecting to, and sending and receiving 
messages between the Upstream and the Route. This will overwrite the `timeout` 
value configured in your [Upstream](#upstream).                                 
                                                                  | {"connect": 
3, "send": 3, "read": 3}                 |
 | enable_websocket | False                                    | Auxiliary   | 
Enables a websocket. Set to `false` by default.                                 
                                                                                
                                                                                
                                               |                                
                      |
 | status           | False                                    | Auxiliary   | 
Enables the current Route. Set to `1` (enabled) by default.                     
                                                                                
                                                                                
                                               | `1` to enable, `0` to disable  
                      |
-| create_time      | False                                    | Auxiliary   | 
Epoch timestamp (in seconds) of the created time. If missing, this field will 
be populated automatically.                                                     
                                                                                
                                                    | 1602883670                
                           |
-| update_time      | False                                    | Auxiliary   | 
Epoch timestamp (in seconds) of the updated time. If missing, this field will 
be populated automatically.                                                     
                                                                                
                                                    | 1602883670                
                           |
 
 Example configuration:
 
@@ -630,8 +628,6 @@ Service resource request address: 
/apisix/admin/services/{id}
 | labels           | False    | Match Rules | Attributes of the Service 
specified as key-value pairs.                                                   
         | {"version":"v2","build":"16","env":"production"} |
 | enable_websocket | False    | Auxiliary   | Enables a websocket. Set to 
`false` by default.                                                             
       |                                                  |
 | hosts            | False    | Match Rules | Matches with any one of the 
multiple `host`s specified in the form of a non-empty list.                     
       | ["foo.com", "*.bar.com"]                         |
-| create_time      | False    | Auxiliary   | Epoch timestamp (in seconds) of 
the created time. If missing, this field will be populated automatically.       
      | 1602883670                                       |
-| update_time      | False    | Auxiliary   | Epoch timestamp (in seconds) of 
the updated time. If missing, this field will be populated automatically.       
      | 1602883670                                       |
 
 Example configuration:
 
@@ -815,8 +811,6 @@ Consumer resource request address: 
/apisix/admin/consumers/{username}
 | plugins     | False    | Plugin      | Plugins that are executed during the 
request/response cycle. See [Plugin](terminology/plugin.md) for more. |         
                                         |
 | desc        | False    | Auxiliary   | Description of usage scenarios.       
                                                                             | 
customer xxxx                                    |
 | labels      | False    | Match Rules | Attributes of the Consumer specified 
as key-value pairs.                                                           | 
{"version":"v2","build":"16","env":"production"} |
-| create_time | False    | Auxiliary   | Epoch timestamp (in seconds) of the 
created time. If missing, this field will be populated automatically.           
  | 1602883670                                       |
-| update_time | False    | Auxiliary   | Epoch timestamp (in seconds) of the 
updated time. If missing, this field will be populated automatically.           
  | 1602883670                                       |
 
 Example Configuration:
 
@@ -911,8 +905,6 @@ In addition to the equalization algorithm selections, 
Upstream also supports pas
 | upstream_host               | optional                                    | 
Specifies the host of the Upstream request. This is only valid if the 
`pass_host` is set to `rewrite`.                                                
                                                                                
                                                                                
                                                                                
                         [...]
 | scheme                      | optional                                    | 
The scheme used when communicating with the Upstream. For an L7 proxy, this 
value can be one of `http`, `https`, `grpc`, `grpcs`. For an L4 proxy, this 
value could be one of `tcp`, `udp`, `tls`. Defaults to `http`.                  
                                                                                
                                                                                
                       [...]
 | labels                      | optional                                    | 
Attributes of the Upstream specified as `key-value` pairs.                      
                                                                                
                                                                                
                                                                                
                                                                                
               [...]
-| create_time                 | optional                                    | 
Epoch timestamp (in seconds) of the created time. If missing, this field will 
be populated automatically.                                                     
                                                                                
                                                                                
                                                                                
                 [...]
-| update_time                 | optional                                    | 
Epoch timestamp (in seconds) of the updated time. If missing, this field will 
be populated automatically.                                                     
                                                                                
                                                                                
                                                                                
                 [...]
 | tls.client_cert             | optional, can't be used with 
`tls.client_cert_id`       | Sets the client certificate while connecting to a 
TLS Upstream.                                                                   
                                                                                
                                                                                
                                                                                
                                 [...]
 | tls.client_key              | optional, can't be used with 
`tls.client_cert_id`       | Sets the client private key while connecting to a 
TLS Upstream.                                                                   
                                                                                
                                                                                
                                                                                
                                 [...]
 | tls.client_cert_id          | optional, can't be used with `tls.client_cert` 
and `tls.client_key`       | Set the referenced [SSL](#ssl) id.                 
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
@@ -1210,8 +1202,6 @@ For notes on ID syntax please refer to: [ID 
Syntax](#quick-note-on-id-syntax)
 | client.skip_mtls_uri_regex | False    | An array of regular expressions, in 
PCRE format              | Used to match URI, if matched, this request bypasses 
the client certificate checking, i.e. skip the MTLS.             | 
["/hello[0-9]+", "/foobar"]                                                |
 | snis         | True, only if `type` is `server`     | Match Rules            
  | A non-empty array of HTTPS SNI                                              
                                   |                                            
      |
 | labels       | False    | Match Rules              | Attributes of the 
resource specified as key-value pairs.                                          
             | {"version":"v2","build":"16","env":"production"} |
-| create_time  | False    | Auxiliary                | Epoch timestamp (in 
seconds) of the created time. If missing, this field will be populated 
automatically.         | 1602883670                                       |
-| update_time  | False    | Auxiliary                | Epoch timestamp (in 
seconds) of the updated time. If missing, this field will be populated 
automatically.         | 1602883670                                       |
 | type         | False    | Auxiliary            | Identifies the type of 
certificate, default  `server`.                                                 
                            | `client` Indicates that the certificate is a 
client certificate, which is used when APISIX accesses the upstream; `server` 
Indicates that the certificate is a server-side certificate, which is used by 
APISIX when verifying client requests.     |
 | status       | False    | Auxiliary                | Enables the current 
SSL. Set to `1` (enabled) by default.                                           
           | `1` to enable, `0` to disable                    |
 | ssl_protocols | False    | An array of ssl protocols               | It is 
used to control the SSL/TLS protocol version used between servers and clients. 
See [SSL Protocol](./ssl-protocol.md) for more examples.                  |     
           `["TLSv1.2", "TLSv2.3"]`                                  |
@@ -1253,8 +1243,6 @@ Global Rule resource request address: 
/apisix/admin/global_rules/{id}
 | Parameter   | Required | Description                                         
                                                               | Example    |
 | ----------- | -------- | 
------------------------------------------------------------------------------------------------------------------
 | ---------- |
 | plugins     | True     | Plugins that are executed during the 
request/response cycle. See [Plugin](terminology/plugin.md) for more. |         
   |
-| create_time | False    | Epoch timestamp (in seconds) of the created time. 
If missing, this field will be populated automatically.             | 
1602883670 |
-| update_time | False    | Epoch timestamp (in seconds) of the updated time. 
If missing, this field will be populated automatically.             | 
1602883670 |
 
 ## Consumer group
 
@@ -1282,8 +1270,6 @@ Consumer group resource request address: 
/apisix/admin/consumer_groups/{id}
 | plugins     | True     | Plugins that are executed during the 
request/response cycle. See [Plugin](terminology/plugin.md) for more. |         
                                         |
 | desc        | False    | Description of usage scenarios.                     
                                                               | customer xxxx  
                                  |
 | labels      | False    | Attributes of the Consumer group specified as 
key-value pairs.                                                      | 
{"version":"v2","build":"16","env":"production"} |
-| create_time | False    | Epoch timestamp (in seconds) of the created time. 
If missing, this field will be populated automatically.             | 
1602883670                                       |
-| update_time | False    | Epoch timestamp (in seconds) of the updated time. 
If missing, this field will be populated automatically.             | 
1602883670                                       |
 
 ## Plugin config
 
@@ -1311,8 +1297,6 @@ Plugin Config resource request address: 
/apisix/admin/plugin_configs/{id}
 | plugins     | True     | Plugins that are executed during the 
request/response cycle. See [Plugin](terminology/plugin.md) for more. |         
                                         |
 | desc        | False    | Description of usage scenarios.                     
                                                               | customer xxxx  
                                  |
 | labels      | False    | Attributes of the Plugin config specified as 
key-value pairs.                                                      | 
{"version":"v2","build":"16","env":"production"} |
-| create_time | False    | Epoch timestamp (in seconds) of the created time. 
If missing, this field will be populated automatically.             | 
1602883670                                       |
-| update_time | False    | Epoch timestamp (in seconds) of the updated time. 
If missing, this field will be populated automatically.             | 
1602883670                                       |
 
 ## Plugin Metadata
 
@@ -1528,11 +1512,9 @@ Proto resource request address: /apisix/admin/protos/{id}
 
 ### Request Body Parameters
 
-| Parameter   | Required | Type     | Description                              
                           | Example                       |
-| ----------- | -------- | -------- | 
------------------------------------------------------------------- | 
----------------------------- |
-| content   | True    | String | content of `.proto` or `.pb` files | See 
[here](./plugins/grpc-transcode.md#enabling-the-plugin)         |
-| create_time | False    | Epoch timestamp (in seconds) of the created time. 
If missing, this field will be populated automatically.             | 
1602883670                                       |
-| update_time | False    | Epoch timestamp (in seconds) of the updated time. 
If missing, this field will be populated automatically.             | 
1602883670                                       |
+| Parameter | Required | Type    | Description                          | 
Example                       |
+|-----------|----------|---------|--------------------------------------| 
----------------------------- |
+| content   | True     | String  | content of `.proto` or `.pb` files   | See 
[here](./plugins/grpc-transcode.md#enabling-the-plugin)         |
 
 ## Schema validation
 
diff --git a/docs/zh/latest/admin-api.md b/docs/zh/latest/admin-api.md
index acef9a2ad..dd2d257a4 100644
--- a/docs/zh/latest/admin-api.md
+++ b/docs/zh/latest/admin-api.md
@@ -326,8 +326,6 @@ Route 也称之为路由,可以通过定义一些规则来匹配客户端的
 | timeout          | 否                               | 辅助     | 为 Route 设置 
Upstream 连接、发送消息和接收消息的超时时间(单位为秒)。该配置将会覆盖在 Upstream 中配置的 [timeout](#upstream) 
选项。                                                                             
                                                                                
                                  | {"connect": 3, "send": 3, "read": 3}        
      |
 | enable_websocket | 否                               | 辅助     | 当设置为 `true` 
时,启用 `websocket`(boolean), 默认值为 `false`。                                        
                                                                                
                                                                                
                                        |                                       
               |
 | status           | 否                               | 辅助     | 当设置为 `1` 
时,启用该路由,默认值为 `1`。                                                               
                                                                                
                                                                                
                                        | `1` 表示启用,`0` 表示禁用。                    
       |
-| create_time      | 否                               | 辅助     | epoch 
时间戳,单位为秒。如果不指定则自动创建。                                                            
                                                                                
                                                                                
                                | 1602883670                                    
       |
-| update_time      | 否                               | 辅助     |  epoch 
时间戳,单位为秒。如果不指定则自动创建。                                                            
                                                                                
                                                                                
                                | 1602883670                                    
       |
 
 :::note 注意
 
@@ -637,8 +635,6 @@ Service 是某类 API 的抽象(也可以理解为一组 Route 的抽象)。
 | labels           | 否                     | 匹配规则 | 标识附加属性的键值对。                
                                 | 
{"version":"v2","build":"16","env":"production"} |
 | enable_websocket | 否                     | 辅助     | `websocket`(boolean) 
配置,默认值为 `false`。                       |                                        
          |
 | hosts            | 否                     | 匹配规则 | 非空列表形态的 `host`,表示允许有多个不同 
`host`,匹配其中任意一个即可。| ["foo.com", "\*.bar.com"]                        |
-| create_time      | 否                     | 辅助     | epoch 
时间戳,单位为秒。如果不指定则自动创建。                         | 1602883670                       
                |
-| update_time      | 否                     | 辅助     | epoch 
时间戳,单位为秒。如果不指定则自动创建。                           | 1602883670                     
                  |
 
 Service 对象 JSON 配置示例:
 
@@ -822,8 +818,6 @@ Consumer 资源请求地址:/apisix/admin/consumers/{username}
 | plugins     | 否   | Plugin   | 该 Consumer 对应的插件配置,它的优先级是最高的:Consumer > Route 
> Plugin Config > Service。对于具体插件配置,请参考 [Plugins](#plugin)。     |                
                                  |
 | desc        | 否   | 辅助     | consumer 描述。                                    
                                                                              | 
                                                 |
 | labels      | 否   | 匹配规则  | 标识附加属性的键值对。                                      
                                                                       | 
{"version":"v2","build":"16","env":"production"} |
-| create_time | 否   | 辅助     | epoch 时间戳,单位为秒。如果不指定则自动创建。                      
                                                                 | 1602883670   
                                    |
-| update_time | 否   | 辅助     | epoch 时间戳,单位为秒。如果不指定则自动创建。                      
                                                                 | 1602883670   
                                    |
 
 Consumer 对象 JSON 配置示例:
 
@@ -919,8 +913,6 @@ APISIX 的 Upstream 除了基本的负载均衡算法选择外,还支持对上
 | upstream_host  | 否                                             | 辅助          
 | 指定上游请求的 host,只在 `pass_host` 配置为 `rewrite` 时有效。                               
                                                                                
                                                                                
                                                                                
                                   |                                            
      |
 | scheme         | 否                                             | 辅助          
 | 跟上游通信时使用的 scheme。对于 7 层代理,可选值为 [`http`, `https`, `grpc`, `grpcs`]。对于 4 
层代理,可选值为 [`tcp`, `udp`, `tls`]。默认值为 `http`,详细信息请参考下文。                           
                                                                                
                                                                                
                                                                |
 | labels         | 否                                             | 匹配规则       
| 标识附加属性的键值对。                                                                   
                                                                                
                                                                                
                                                                                
                     | {"version":"v2","build":"16","env":"production"} |
-| create_time    | 否                                             | 辅助          
 | epoch 时间戳,单位为秒。如果不指定则自动创建。                                                   
                                                                                
                                                                                
                                                                                
            | 1602883670                                       |
-| update_time    | 否                                             | 辅助          
 | epoch 时间戳,单位为秒。如果不指定则自动创建。                                                   
                                                                                
                                                                                
                                                                                
            | 1602883670                                       |
 | tls.client_cert    | 否,不能和 `tls.client_cert_id` 一起使用               | https 
证书           | 设置跟上游通信时的客户端证书,详细信息请参考下文。                                        
                                | |
 | tls.client_key        | 否,不能和 `tls.client_cert_id` 一起使用               | 
https 证书私钥           | 设置跟上游通信时的客户端私钥,详细信息请参考下文。                                
                                                                                
                                                                                
                                                                                
                              | |
 | tls.client_cert_id | 否,不能和 `tls.client_cert`、`tls.client_key` 一起使用 | SSL     
      | 设置引用的 SSL id,详见 [SSL](#ssl)。                                            
                                                                                
                                                                                
                                                                                
                  | |
@@ -1210,8 +1202,6 @@ SSL 资源请求地址:/apisix/admin/ssls/{id}
 | client.skip_mtls_uri_regex | 否   | PCRE 正则表达式数组 |  用来匹配请求的 
URI,如果匹配,则该请求将绕过客户端证书的检查,也就是跳过 MTLS。 | ["/hello[0-9]+", "/foobar"]              
                              |
 | snis        | 是   | 匹配规则       | 非空数组形式,可以匹配多个 SNI。                          
                                               |                                
                  |
 | labels      | 否   | 匹配规则       | 标识附加属性的键值对。                                 
                                                  | 
{"version":"v2","build":"16","env":"production"} |
-| create_time | 否   | 辅助           | epoch 时间戳,单位为秒。如果不指定则自动创建。                
                                          | 1602883670                          
             |
-| update_time | 否   | 辅助           | epoch 时间戳,单位为秒。如果不指定则自动创建。                
                                          | 1602883670                          
             |
 | type        | 否   | 辅助           | 标识证书的类型,默认值为 `server`。                    
                                                 | `client` 表示证书是客户端证书,APISIX 
访问上游时使用;`server` 表示证书是服务端证书,APISIX 验证客户端请求时使用。     |
 | status      | 否   | 辅助           | 当设置为 `1` 时,启用此 SSL,默认值为 `1`。              
                                                 | `1` 表示启用,`0` 表示禁用            
           |
 | ssl_protocols | 否    | tls 协议字符串数组               | 用于控制服务器与客户端之间使用的 SSL/TLS 
协议版本。更多的配置示例,请参考[SSL 协议](./ssl-protocol.md)。                                  | 
                                                 |
@@ -1253,8 +1243,6 @@ Global Rule 资源请求地址:/apisix/admin/global_rules/{id}
 | 名称        | 必选项 | 类型   | 描述                                               | 
示例值       |
 | ----------- | ------ | ------ | 
------------------------------------------------- | ---------- |
 | plugins     | 是     | Plugin | 插件配置。详细信息请参考 [Plugin](terminology/plugin.md)。 
|            |
-| create_time | 否     | 辅助   | epoch 时间戳,单位为秒,如果不指定则自动创建。     | 1602883670 |
-| update_time | 否     | 辅助   | epoch 时间戳,单位为秒,如果不指定则自动创建。     | 1602883670 |
 
 ## Consumer Group
 
@@ -1282,8 +1270,6 @@ Consumer Group 资源请求地址:/apisix/admin/consumer_groups/{id}
 |plugins  | 是        |Plugin| 插件配置。详细信息请参考 [Plugin](terminology/plugin.md)。 |  
    |
 |desc     | 否        | 辅助 | 标识描述、使用场景等。                          | Consumer 
测试。|
 |labels   | 否        | 辅助 | 标识附加属性的键值对。                          
|{"version":"v2","build":"16","env":"production"}|
-|create_time| 否      | 辅助 | epoch 时间戳,单位为秒,如果不指定则自动创建。 |1602883670|
-|update_time| 否      | 辅助 | epoch 时间戳,单位为秒,如果不指定则自动创建。 |1602883670|
 
 ## Plugin Config
 
@@ -1311,8 +1297,6 @@ Plugin Config 资源请求地址:/apisix/admin/plugin_configs/{id}
 |plugins    | 是      |Plugin| 更多信息请参考 [Plugin](terminology/plugin.md)。||
 |desc       | 否 | 辅助 | 标识描述、使用场景等。 |customer xxxx|
 |labels     | 否 | 辅助 | 标识附加属性的键值对。 
|{"version":"v2","build":"16","env":"production"}|
-|create_time| 否 | 辅助 | epoch 时间戳,单位为秒,如果不指定则自动创建。 |1602883670|
-|update_time| 否 | 辅助 | epoch 时间戳,单位为秒,如果不指定则自动创建。 |1602883670|
 
 ## Plugin Metadata
 
diff --git a/t/admin/consumers.t b/t/admin/consumers.t
index 23f3cffcc..916f2a960 100644
--- a/t/admin/consumers.t
+++ b/t/admin/consumers.t
@@ -335,26 +335,6 @@ GET /t
     }
 --- request
 GET /t
---- response_body
-passed
-
-
-
-=== TEST 11: delete test consumer(pony)
---- config
-    location /t {
-        content_by_lua_block {
-            ngx.sleep(0.3)
-            local t = require("lib.test_admin").test
-            local code, body = t('/apisix/admin/consumers/pony',
-                 ngx.HTTP_DELETE
-            )
-
-            ngx.status = code
-            ngx.say(body)
-        }
-    }
---- request
-GET /t
---- response_body
-passed
+--- error_code: 400
+--- response_body eval
+qr/\{"error_msg":"the property is forbidden:.*"\}/
diff --git a/t/admin/routes4.t b/t/admin/routes4.t
index ba9ff4414..0bab4506b 100644
--- a/t/admin/routes4.t
+++ b/t/admin/routes4.t
@@ -790,21 +790,6 @@ passed
             ngx.say(body)
         }
     }
---- response_body
-passed
-
-
-
-=== TEST 23: delete test route(id : 1)
---- config
-    location /t {
-        content_by_lua_block {
-            local t = require("lib.test_admin").test
-            local code, message = t('/apisix/admin/routes/1',
-                 ngx.HTTP_DELETE
-            )
-            ngx.say("[delete] code: ", code, " message: ", message)
-        }
-    }
---- response_body
-[delete] code: 200 message: passed
+--- error_code: 400
+--- response_body eval
+qr/\{"error_msg":"the property is forbidden:.*"\}/
diff --git a/t/admin/services.t b/t/admin/services.t
index b2383ddc9..90a5e9271 100644
--- a/t/admin/services.t
+++ b/t/admin/services.t
@@ -1171,54 +1171,53 @@ GET /t
             local code, body = t('/apisix/admin/services/1',
                  ngx.HTTP_PUT,
                  [[{
-                    "upstream": {
-                        "nodes": {
-                            "127.0.0.1:8080": 1
-                        },
-                        "type": "roundrobin",
-                        "create_time": 1602883670,
-                        "update_time": 1602893670
-                    }
-                }]],
-                [[{
-                    "value": {
-                        "upstream": {
-                            "nodes": {
-                                "127.0.0.1:8080": 1
-                            },
-                            "type": "roundrobin",
-                            "create_time": 1602883670,
-                            "update_time": 1602893670
-                        }
+                  "upstream": {
+                    "nodes": {
+                      "127.0.0.1:8080": 1
                     },
-                    "key": "/apisix/services/1"
-                }]]
-                )
-
+                    "type": "roundrobin"
+                  },
+                  "create_time": 1602883670,
+                  "update_time": 1602893670
+                }]])
             ngx.status = code
             ngx.say(body)
         }
     }
 --- request
 GET /t
---- response_body
-passed
+--- error_code: 400
+--- response_body eval
+qr/\{"error_msg":"the property is forbidden:.*"\}/
 
 
 
-=== TEST 35: delete test service(id: 1)
+=== TEST 35: create service and the built-in resource with create_time and 
update_time(id: 1)
 --- config
     location /t {
         content_by_lua_block {
             local t = require("lib.test_admin").test
-            local code, message = t('/apisix/admin/services/1', 
ngx.HTTP_DELETE)
-            ngx.say("[delete] code: ", code, " message: ", message)
+            local code, body = t('/apisix/admin/services/1',
+                 ngx.HTTP_PUT,
+                 [[{
+                  "upstream": {
+                    "type": "roundrobin",
+                    "nodes": {
+                      "127.0.0.1:8080": 1
+                    },
+                    "create_time": 1602883670,
+                    "update_time": 1602893670
+                  }
+                }]])
+            ngx.status = code
+            ngx.say(body)
         }
     }
 --- request
 GET /t
---- response_body
-[delete] code: 200 message: passed
+--- error_code: 400
+--- response_body eval
+qr/\{"error_msg":"the property is forbidden:.*"\}/
 
 
 
diff --git a/t/admin/ssl.t b/t/admin/ssl.t
index 2e69e0b46..6b259b25e 100644
--- a/t/admin/ssl.t
+++ b/t/admin/ssl.t
@@ -555,8 +555,6 @@ GET /t
                 cert = ssl_cert,
                 key = ssl_key,
                 sni = "test.com",
-                create_time = 1602883670,
-                update_time = 1602893670,
                 validity_start = 1602873670,
                 validity_end = 1603893670
             }
@@ -567,8 +565,6 @@ GET /t
                 [[{
                     "value": {
                         "sni": "test.com",
-                        "create_time": 1602883670,
-                        "update_time": 1602893670,
                         "validity_start": 1602873670,
                         "validity_end": 1603893670
                     },
diff --git a/t/admin/upstream4.t b/t/admin/upstream4.t
index b657edc6e..411252486 100644
--- a/t/admin/upstream4.t
+++ b/t/admin/upstream4.t
@@ -489,26 +489,13 @@ passed
             ngx.say(body)
         }
     }
---- response_body
-passed
-
-
-
-=== TEST 15: delete test upstream
---- config
-    location /t {
-        content_by_lua_block {
-            local t = require("lib.test_admin").test
-            local code, message = 
t('/apisix/admin/upstreams/up_create_update_time', ngx.HTTP_DELETE)
-            ngx.say("[delete] code: ", code, " message: ", message)
-        }
-    }
---- response_body
-[delete] code: 200 message: passed
+--- error_code: 400
+--- response_body eval
+qr/\{"error_msg":"the property is forbidden:.*"\}/
 
 
 
-=== TEST 16: patch upstream with sub_path, the data is number
+=== TEST 15: patch upstream with sub_path, the data is number
 --- config
     location /t {
         content_by_lua_block {
@@ -551,7 +538,7 @@ passed
 
 
 
-=== TEST 17: set upstream(id: 1)
+=== TEST 16: set upstream(id: 1)
 --- config
     location /t {
         content_by_lua_block {
@@ -575,7 +562,7 @@ passed
 
 
 
-=== TEST 18: set service(id: 1)
+=== TEST 17: set service(id: 1)
 --- config
     location /t {
         content_by_lua_block {
@@ -598,7 +585,7 @@ passed
 
 
 
-=== TEST 19: set route(id: 1)
+=== TEST 18: set route(id: 1)
 --- config
     location /t {
         content_by_lua_block {
@@ -622,7 +609,7 @@ passed
 
 
 
-=== TEST 20: delete upstream(id: 1)
+=== TEST 19: delete upstream(id: 1)
 --- config
     location /t {
         content_by_lua_block {
@@ -637,7 +624,7 @@ passed
 
 
 
-=== TEST 21: delete route(id: 1)
+=== TEST 20: delete route(id: 1)
 --- config
     location /t {
         content_by_lua_block {
@@ -652,7 +639,7 @@ passed
 
 
 
-=== TEST 22: delete service(id: 1)
+=== TEST 21: delete service(id: 1)
 --- config
     location /t {
         content_by_lua_block {
@@ -667,7 +654,7 @@ passed
 
 
 
-=== TEST 23: delete upstream(id: 1)
+=== TEST 22: delete upstream(id: 1)
 --- config
     location /t {
         content_by_lua_block {


Reply via email to