2019-10-31 09:27:28 +08:00
#
# 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.
#
2019-09-10 09:42:55 +08:00
use t::APISIX 'no_plan' ;
2019-06-17 09:39:49 +08:00
repeat_each ( 1 ) ;
no_long_string ( ) ;
no_root_location ( ) ;
no_shuffle ( ) ;
log_level ( "info" ) ;
run_tests ;
__DATA__
2021-01-20 15:58:44 +08:00
=== TEST 1 : set upstream ( use an id can ' t be referred by other route
so that we can delete it later )
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2020-11-15 17:20:51 +08:00
local etcd = require ( "apisix.core.etcd" )
2021-01-20 15:58:44 +08:00
local code , body = t ( '/apisix/admin/upstreams/admin_up' ,
2019-08-05 13:08:15 +08:00
ngx . HTTP_PUT ,
[ [ {
2019-06-17 09:39:49 +08:00
"nodes" : {
"127.0.0.1:8080" : 1
} ,
2019-07-22 10:42:02 +08:00
"type" : "roundrobin" ,
"desc" : "new upstream"
2019-06-17 09:39:49 +08:00
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
2019-07-22 10:42:02 +08:00
"type" : "roundrobin" ,
"desc" : "new upstream"
2019-06-17 09:39:49 +08:00
} ,
2021-01-20 15:58:44 +08:00
"key" : "/apisix/upstreams/admin_up"
2019-06-17 09:39:49 +08:00
} ,
"action" : "set"
} ] ]
)
ngx . status = code
ngx . say ( body )
2020-11-15 17:20:51 +08:00
2021-01-20 15:58:44 +08:00
local res = assert ( etcd . get ( '/upstreams/admin_up' ) )
2020-11-15 17:20:51 +08:00
local create_time = res . body . node . value . create_time
assert ( create_time ~= nil , "create_time is nil" )
local update_time = res . body . node . value . update_time
assert ( update_time ~= nil , "update_time is nil" )
2019-06-17 09:39:49 +08:00
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2021-01-20 15:58:44 +08:00
=== TEST 2 : get upstream
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2021-01-20 15:58:44 +08:00
local code , body = t ( '/apisix/admin/upstreams/admin_up' ,
2019-06-17 09:39:49 +08:00
ngx . HTTP_GET ,
nil ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
2019-07-22 10:42:02 +08:00
"type" : "roundrobin" ,
"desc" : "new upstream"
2019-06-17 09:39:49 +08:00
} ,
2021-01-20 15:58:44 +08:00
"key" : "/apisix/upstreams/admin_up"
2019-06-17 09:39:49 +08:00
} ,
"action" : "get"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2021-01-20 15:58:44 +08:00
=== TEST 3 : delete upstream
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2021-01-20 15:58:44 +08:00
local code , message = t ( '/apisix/admin/upstreams/admin_up' ,
2019-06-17 09:39:49 +08:00
ngx . HTTP_DELETE ,
nil ,
[ [ {
"action" : "delete"
} ] ]
)
ngx . say ( "[delete] code: " , code , " message: " , message )
}
}
- - - request
GET / t
- - - response_body
[ delete ] code: 200 message: passed
- - - no_error_log
[ error ]
=== TEST 4 : delete upstream ( id: not_found )
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code = t ( '/apisix/admin/upstreams/not_found' ,
ngx . HTTP_DELETE ,
nil ,
[ [ {
"action" : "delete"
} ] ]
)
ngx . say ( "[delete] code: " , code )
}
}
- - - request
GET / t
- - - response_body
[ delete ] code: 404
- - - no_error_log
[ error ]
=== TEST 5 : push upstream + delete
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2020-11-15 17:20:51 +08:00
local etcd = require ( "apisix.core.etcd" )
2019-06-18 16:15:55 +08:00
local code , message , res = t ( '/apisix/admin/upstreams' ,
2019-06-17 09:39:49 +08:00
ngx . HTTP_POST ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin"
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin"
}
} ,
"action" : "create"
} ] ]
)
if code ~= 200 then
ngx . status = code
ngx . say ( message )
return
end
ngx . say ( "[push] code: " , code , " message: " , message )
local id = string . sub ( res . node . key , #"/apisix/upstreams/" + 1)
2020-11-15 17:20:51 +08:00
local res = assert ( etcd . get ( '/upstreams/' .. id ) )
local create_time = res . body . node . value . create_time
assert ( create_time ~= nil , "create_time is nil" )
local update_time = res . body . node . value . update_time
assert ( update_time ~= nil , "update_time is nil" )
2019-06-17 09:39:49 +08:00
code , message = t ( '/apisix/admin/upstreams/' .. id ,
ngx . HTTP_DELETE ,
nil ,
[ [ {
"action" : "delete"
} ] ]
)
ngx . say ( "[delete] code: " , code , " message: " , message )
}
}
- - - request
GET / t
- - - response_body
[ push ] code: 200 message: passed
[ delete ] code: 200 message: passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 6 : invalid upstream id in uri
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2020-04-27 10:47:17 +08:00
local code , body = t ( '/apisix/admin/upstreams/invalid_id$' ,
2019-06-17 09:39:49 +08:00
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin"
} ] ]
)
ngx . exit ( code )
}
}
- - - request
GET / t
2019-06-19 19:14:58 +08:00
- - - error_code: 400
2019-06-17 09:39:49 +08:00
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 7 : different id
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"id" : 3 ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
{ "error_msg" : "wrong upstream id" }
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 8 : id in the rule
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams' ,
ngx . HTTP_PUT ,
[ [ {
"id" : "1" ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin"
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin"
} ,
"key" : "/apisix/upstreams/1"
} ,
"action" : "set"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 9 : integer id less than 1
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams' ,
ngx . HTTP_PUT ,
[ [ {
"id" : - 100 ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2020-01-02 21:56:42 +08:00
{ "error_msg" : "invalid configuration: property \"id\" validation failed: object matches none of the requireds" }
2019-06-17 09:39:49 +08:00
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 10 : invalid upstream id: string value
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams' ,
ngx . HTTP_PUT ,
[ [ {
2020-04-27 10:47:17 +08:00
"id" : "invalid_id$" ,
2019-06-17 09:39:49 +08:00
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2020-01-02 21:56:42 +08:00
{ "error_msg" : "invalid configuration: property \"id\" validation failed: object matches none of the requireds" }
2019-06-17 09:39:49 +08:00
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 11 : no additional properties is valid
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams' ,
ngx . HTTP_PUT ,
[ [ {
"id" : 1 ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"invalid_property" : "/index.html"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2019-10-23 12:58:10 +08:00
{ "error_msg" : "invalid configuration: additional properties forbidden, found invalid_property" }
2019-06-17 09:39:49 +08:00
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 12 : set upstream ( type: chash )
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
2019-06-17 23:17:41 +08:00
"key" : "remote_addr" ,
2019-06-17 09:39:49 +08:00
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash"
} ] ] ,
[ [ {
"node" : {
"value" : {
2019-06-17 23:17:41 +08:00
"key" : "remote_addr" ,
2019-06-17 09:39:49 +08:00
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash"
} ,
"key" : "/apisix/upstreams/1"
} ,
"action" : "set"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 13 : invalid type
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams' ,
ngx . HTTP_PUT ,
[ [ {
"id" : 1 ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "invalid_type"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2020-12-18 16:55:23 +08:00
{ "error_msg" : "invalid configuration: property \"type\" validation failed: matches none of the enum values" }
2019-06-17 09:39:49 +08:00
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 14 : invalid weight of node
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams' ,
ngx . HTTP_PUT ,
[ [ {
"id" : 1 ,
"nodes" : {
"127.0.0.1:8080" : "1"
} ,
"type" : "chash"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2020-05-14 23:20:44 +08:00
{ "error_msg" : "invalid configuration: property \"nodes\" validation failed: object matches none of the requireds" }
2019-06-17 09:39:49 +08:00
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 15 : invalid weight of node
2019-06-17 09:39:49 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams' ,
ngx . HTTP_PUT ,
[ [ {
"id" : 1 ,
"nodes" : {
"127.0.0.1:8080" : - 100
} ,
"type" : "chash"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2020-05-14 23:20:44 +08:00
{ "error_msg" : "invalid configuration: property \"nodes\" validation failed: object matches none of the requireds" }
2019-06-17 09:39:49 +08:00
- - - no_error_log
[ error ]
2019-06-17 23:17:41 +08:00
2020-12-18 16:05:54 +08:00
=== TEST 16 : set upstream ( missing key )
2019-06-17 23:17:41 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
{ "error_msg" : "missing key" }
- - - no_error_log
[ error ]
2019-06-18 16:15:55 +08:00
2020-12-18 16:05:54 +08:00
=== TEST 17 : wrong upstream id , do not need it
2019-06-18 16:15:55 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_POST ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
{ "error_msg" : "wrong upstream id, do not need it" }
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 18 : wrong upstream id , do not need it
2019-06-18 16:15:55 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams' ,
ngx . HTTP_POST ,
[ [ {
"id" : 1 ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
{ "error_msg" : "wrong upstream id, do not need it" }
- - - no_error_log
[ error ]
2019-08-05 13:08:15 +08:00
2020-12-18 16:05:54 +08:00
=== TEST 19 : patch upstream ( whole )
2019-08-05 13:08:15 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2020-11-15 17:20:51 +08:00
local etcd = require ( "apisix.core.etcd" )
local id = 1
local res = assert ( etcd . get ( '/upstreams/' .. id ) )
local prev_create_time = res . body . node . value . create_time
local prev_update_time = res . body . node . value . update_time
ngx . sleep ( 1 )
2020-06-02 11:28:45 +08:00
local code , body = t ( '/apisix/admin/upstreams/1' ,
2019-08-05 13:08:15 +08:00
ngx . HTTP_PATCH ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"desc" : "new upstream"
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"desc" : "new upstream"
} ,
"key" : "/apisix/upstreams/1"
} ,
2020-09-18 17:20:55 +08:00
"action" : "compareAndSwap"
2019-08-05 13:08:15 +08:00
} ] ]
)
ngx . status = code
ngx . say ( body )
2020-11-15 17:20:51 +08:00
local res = assert ( etcd . get ( '/upstreams/' .. id ) )
local create_time = res . body . node . value . create_time
assert ( prev_create_time == create_time , "create_time mismatched" )
local update_time = res . body . node . value . update_time
assert ( prev_update_time ~= update_time , "update_time should be changed" )
2019-08-05 13:08:15 +08:00
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 20 : patch upstream ( new desc )
2019-08-05 13:08:15 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2020-06-02 11:28:45 +08:00
local code , body = t ( '/apisix/admin/upstreams/1' ,
2019-08-05 13:08:15 +08:00
ngx . HTTP_PATCH ,
2020-06-02 11:28:45 +08:00
[ [ {
"desc" : "new 21 upstream"
} ] ] ,
2019-08-05 13:08:15 +08:00
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"desc" : "new 21 upstream"
} ,
"key" : "/apisix/upstreams/1"
} ,
2020-09-18 17:20:55 +08:00
"action" : "compareAndSwap"
2019-08-05 13:08:15 +08:00
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 21 : patch upstream ( new nodes )
2019-08-05 13:08:15 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2020-06-02 11:28:45 +08:00
local code , body = t ( '/apisix/admin/upstreams/1' ,
2019-08-05 13:08:15 +08:00
ngx . HTTP_PATCH ,
[ [ {
2020-06-02 11:28:45 +08:00
"nodes" : {
"127.0.0.1:8081" : 3 ,
"127.0.0.1:8082" : 4
}
2019-08-05 13:08:15 +08:00
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
2020-06-02 11:28:45 +08:00
"127.0.0.1:8080" : 1 ,
2019-08-05 13:08:15 +08:00
"127.0.0.1:8081" : 3 ,
"127.0.0.1:8082" : 4
} ,
"type" : "roundrobin" ,
"desc" : "new 21 upstream"
}
}
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2019-09-18 12:00:53 +08:00
2020-12-18 16:05:54 +08:00
=== TEST 22 : patch upstream ( weight is 0 )
2019-09-18 12:00:53 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2020-06-02 11:28:45 +08:00
local code , body = t ( '/apisix/admin/upstreams/1' ,
2019-09-18 12:00:53 +08:00
ngx . HTTP_PATCH ,
[ [ {
2020-06-02 11:28:45 +08:00
"nodes" : {
"127.0.0.1:8081" : 3 ,
"127.0.0.1:8082" : 0
}
2020-06-21 16:28:11 +08:00
} ] ] ,
2019-09-18 12:00:53 +08:00
[ [ {
"node" : {
"value" : {
"nodes" : {
2020-06-02 11:28:45 +08:00
"127.0.0.1:8081" : 3 ,
"127.0.0.1:8082" : 0
2019-09-18 12:00:53 +08:00
} ,
"type" : "roundrobin" ,
"desc" : "new 21 upstream"
}
}
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2019-11-03 18:25:51 +08:00
2020-06-09 20:48:16 +08:00
2020-12-18 16:05:54 +08:00
=== TEST 23 : patch upstream ( whole - sub path )
2020-07-31 09:21:08 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1/' ,
ngx . HTTP_PATCH ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"desc" : "new upstream 24"
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"desc" : "new upstream 24"
} ,
"key" : "/apisix/upstreams/1"
} ,
2020-09-18 17:20:55 +08:00
"action" : "compareAndSwap"
2020-07-31 09:21:08 +08:00
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 24 : patch upstream ( new desc - sub path )
2020-07-31 09:21:08 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1/desc' ,
ngx . HTTP_PATCH ,
'"new 25 upstream"' ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"desc" : "new 25 upstream"
} ,
"key" : "/apisix/upstreams/1"
} ,
2020-09-18 17:20:55 +08:00
"action" : "compareAndSwap"
2020-07-31 09:21:08 +08:00
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 25 : patch upstream ( new nodes )
2020-07-31 09:21:08 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1/nodes' ,
ngx . HTTP_PATCH ,
[ [ {
"127.0.0.6:8081" : 3 ,
"127.0.0.7:8082" : 4
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.6:8081" : 3 ,
"127.0.0.7:8082" : 4
} ,
"type" : "roundrobin" ,
"desc" : "new 25 upstream"
}
}
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 26 : patch upstream ( weight is 0 - sub path )
2020-07-31 09:21:08 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1/nodes' ,
ngx . HTTP_PATCH ,
[ [ {
"127.0.0.7:8081" : 0 ,
"127.0.0.8:8082" : 4
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.7:8081" : 0 ,
"127.0.0.8:8082" : 4
} ,
"type" : "roundrobin" ,
"desc" : "new 25 upstream"
}
}
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 27 : set upstream ( type: chash )
2019-11-03 18:25:51 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"key" : "server_name" ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 28 : wrong upstream key , hash_on default vars
2019-11-03 18:25:51 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1 ,
"127.0.0.1:8081" : 2
} ,
"type" : "chash" ,
"key" : "not_support" ,
"desc" : "new upstream"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2020-01-10 15:17:17 +08:00
{ "error_msg" : "invalid configuration: failed to match pattern \"^((uri|server_name|server_addr|request_uri|remote_port|remote_addr|query_string|host|hostname)|arg_[0-9a-zA-z_-]+)$\" with \"not_support\"" }
2019-11-03 18:25:51 +08:00
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 29 : set upstream with args ( type: chash )
2019-11-03 18:25:51 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"key" : "arg_device_id" ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash" ,
"desc" : "new chash upstream"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 30 : set upstream ( type: chash )
2019-11-03 18:25:51 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"key" : "server_name" ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 31 : wrong upstream key , hash_on default vars
2019-11-03 18:25:51 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1 ,
"127.0.0.1:8081" : 2
} ,
"type" : "chash" ,
"key" : "not_support" ,
"desc" : "new upstream"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2020-01-10 15:17:17 +08:00
{ "error_msg" : "invalid configuration: failed to match pattern \"^((uri|server_name|server_addr|request_uri|remote_port|remote_addr|query_string|host|hostname)|arg_[0-9a-zA-z_-]+)$\" with \"not_support\"" }
2019-11-03 18:25:51 +08:00
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 32 : set upstream with args ( type: chash )
2019-11-03 18:25:51 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"key" : "arg_device_id" ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash" ,
"desc" : "new chash upstream"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-01-10 15:17:17 +08:00
2020-12-18 16:05:54 +08:00
=== TEST 33 : type chash , hash_on: vars
2020-01-10 15:17:17 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"key" : "arg_device_id" ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash" ,
"hash_on" : "vars" ,
"desc" : "new chash upstream"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 34 : type chash , hash_on: header , header name with '_' , underscores_in_headers on
2020-01-10 15:17:17 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"key" : "custom_header" ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash" ,
"hash_on" : "header" ,
"desc" : "new chash upstream"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 35 : type chash , hash_on: header , header name with invalid character
2020-01-10 15:17:17 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"key" : "$#^@" ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash" ,
"hash_on" : "header" ,
"desc" : "new chash upstream"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
{ "error_msg" : "invalid configuration: failed to match pattern \"^[a-zA-Z0-9-_]+$\" with \"$#^@\"" }
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 36 : type chash , hash_on: cookie
2020-01-10 15:17:17 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"key" : "custom_cookie" ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash" ,
"hash_on" : "cookie" ,
"desc" : "new chash upstream"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 37 : type chash , hash_on: cookie , cookie name with invalid character
2020-01-10 15:17:17 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"key" : "$#^@abc" ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash" ,
"hash_on" : "cookie" ,
"desc" : "new chash upstream"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
{ "error_msg" : "invalid configuration: failed to match pattern \"^[a-zA-Z0-9-_]+$\" with \"$#^@abc\"" }
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 38 : type chash , hash_on: consumer , do not need upstream key
2020-01-10 15:17:17 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash" ,
"hash_on" : "consumer" ,
"desc" : "new chash upstream"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 39 : type chash , hash_on: consumer , set key but invalid
2020-01-10 15:17:17 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash" ,
"hash_on" : "consumer" ,
"key" : "invalid-key" ,
"desc" : "new chash upstream"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 40 : type chash , invalid hash_on type
2020-01-10 15:17:17 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"key" : "dsadas" ,
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "chash" ,
"hash_on" : "aabbcc" ,
"desc" : "new chash upstream"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2020-12-18 16:55:23 +08:00
{ "error_msg" : "invalid configuration: property \"hash_on\" validation failed: matches none of the enum values" }
2020-01-10 15:17:17 +08:00
- - - no_error_log
[ error ]
2020-06-09 08:26:33 +08:00
2020-12-18 16:05:54 +08:00
=== TEST 41 : set upstream ( id: 1 + name: test name )
2020-06-09 08:26:33 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"name" : "test upstream name"
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"name" : "test upstream name"
} ,
"key" : "/apisix/upstreams/1"
} ,
"action" : "set"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-06-21 16:28:11 +08:00
2020-12-18 16:05:54 +08:00
=== TEST 42 : string id
2020-06-21 16:28:11 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/a-b-c-ABC_0123' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 43 : string id ( delete )
2020-06-21 16:28:11 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/a-b-c-ABC_0123' ,
ngx . HTTP_DELETE
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 44 : invalid string id
2020-06-21 16:28:11 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/*invalid' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
{ "error_msg" : "invalid configuration: property \"id\" validation failed: object matches none of the requireds" }
- - - no_error_log
[ error ]
2020-07-29 19:21:50 +08:00
2020-12-18 16:05:54 +08:00
=== TEST 45 : retries is 0
2020-07-29 19:21:50 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/a-b-c-ABC_0123' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1 ,
"127.0.0.1:8090" : 1
} ,
"retries" : 0 ,
"type" : "roundrobin"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 46 : retries is - 1 ( INVALID )
2020-07-29 19:21:50 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/a-b-c-ABC_0123' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1 ,
"127.0.0.1:8090" : 1
} ,
"retries" : - 1 ,
"type" : "roundrobin"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
{ "error_msg" : "invalid configuration: property \"retries\" validation failed: expected -1 to be greater than 0" }
- - - no_error_log
[ error ]
2020-08-30 22:43:28 +08:00
2020-12-18 16:05:54 +08:00
=== TEST 47 : invalid route: multi nodes with `node` mode to pass host
2020-08-30 22:43:28 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"httpbin.org:8080" : 1 ,
"test.com:8080" : 1
} ,
"type" : "roundrobin" ,
"pass_host" : "node"
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
2021-05-13 22:26:27 +08:00
- - - skip_nginx: 5 : > 1.19 .0
2020-08-30 22:43:28 +08:00
- - - error_code: 400
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 48 : invalid route: empty `upstream_host` when `pass_host` is `rewrite`
2020-08-30 22:43:28 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"httpbin.org:8080" : 1 ,
"test.com:8080" : 1
} ,
"type" : "roundrobin" ,
"pass_host" : "rewrite" ,
"upstream_host" : ""
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - no_error_log
[ error ]
2020-09-28 11:20:09 +08:00
2020-12-18 16:05:54 +08:00
=== TEST 49 : set upstream ( with labels )
2020-09-28 11:20:09 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"labels" : {
"build" : "16" ,
2020-10-09 14:05:14 +08:00
"env" : "production" ,
2020-09-28 11:20:09 +08:00
"version" : "v2"
}
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"labels" : {
"build" : "16" ,
2020-10-09 14:05:14 +08:00
"env" : "production" ,
2020-09-28 11:20:09 +08:00
"version" : "v2"
}
} ,
"key" : "/apisix/upstreams/1"
} ,
"action" : "set"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 50 : get upstream ( with labels )
2020-09-28 11:20:09 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_GET ,
nil ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"labels" : {
"version" : "v2" ,
"build" : "16" ,
2020-10-09 14:05:14 +08:00
"env" : "production"
2020-09-28 11:20:09 +08:00
}
} ,
"key" : "/apisix/upstreams/1"
} ,
"action" : "get"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 51 : patch upstream ( only labels )
2020-09-28 11:20:09 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PATCH ,
[ [ {
"labels" : {
"build" : "17"
}
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"labels" : {
"version" : "v2" ,
"build" : "17" ,
2020-10-09 14:05:14 +08:00
"env" : "production"
2020-09-28 11:20:09 +08:00
}
} ,
"key" : "/apisix/upstreams/1"
} ,
"action" : "compareAndSwap"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 52 : invalid format of label value: set upstream
2020-09-28 11:20:09 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"labels" : {
2020-10-09 14:05:14 +08:00
"env" : [ "production" , "release" ]
2020-09-28 11:20:09 +08:00
}
} ] ]
)
ngx . status = code
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
{ "error_msg" : "invalid configuration: property \"labels\" validation failed: failed to validate env (matching \".*\"): wrong type: expected string, got table" }
- - - no_error_log
[ error ]
2020-10-17 18:48:02 +08:00
2020-12-18 16:05:54 +08:00
=== TEST 53 : patch upstream ( whole , create_time )
2020-11-15 17:20:51 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local etcd = require ( "apisix.core.etcd" )
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PATCH ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"desc" : "new upstream" ,
"create_time" : 1705252779
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"desc" : "new upstream" ,
"create_time" : 1705252779
} ,
"key" : "/apisix/upstreams/1"
} ,
"action" : "compareAndSwap"
} ] ]
)
ngx . status = code
ngx . say ( body )
if code >= 300 then
return
end
local res = assert ( etcd . get ( '/upstreams/1' ) )
local create_time = res . body . node . value . create_time
assert ( create_time == 1705252779 , "create_time mismatched" )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-12-18 16:05:54 +08:00
=== TEST 54 : patch upstream ( whole , update_time )
2020-11-15 17:20:51 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local etcd = require ( "apisix.core.etcd" )
local code , body = t ( '/apisix/admin/upstreams/1' ,
ngx . HTTP_PATCH ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"desc" : "new upstream" ,
"update_time" : 1705252779
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"desc" : "new upstream" ,
"create_time" : 1705252779
} ,
"key" : "/apisix/upstreams/1"
} ,
"action" : "compareAndSwap"
} ] ]
)
ngx . status = code
ngx . say ( body )
if code >= 300 then
return
end
local res = assert ( etcd . get ( '/upstreams/1' ) )
local update_time = res . body . node . value . update_time
assert ( update_time == 1705252779 , "update_time mismatched" )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2021-01-20 15:58:44 +08:00
=== TEST 55 : create upstream with create_time and update_time
2020-10-17 18:48:02 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2021-01-20 15:58:44 +08:00
local code , body = t ( '/apisix/admin/upstreams/up_create_update_time' ,
2020-10-17 18:48:02 +08:00
ngx . HTTP_PUT ,
[ [ {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"create_time" : 1602883670 ,
"update_time" : 1602893670
} ] ] ,
[ [ {
"node" : {
"value" : {
"nodes" : {
"127.0.0.1:8080" : 1
} ,
"type" : "roundrobin" ,
"create_time" : 1602883670 ,
"update_time" : 1602893670
} ,
2021-01-20 15:58:44 +08:00
"key" : "/apisix/upstreams/up_create_update_time"
2020-10-17 18:48:02 +08:00
} ,
"action" : "set"
} ] ]
)
ngx . status = code
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2021-01-20 15:58:44 +08:00
=== TEST 56 : delete test upstream
2020-10-17 18:48:02 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2021-01-20 15:58:44 +08:00
local code , message = t ( '/apisix/admin/upstreams/up_create_update_time' ,
2020-10-17 18:48:02 +08:00
ngx . HTTP_DELETE ,
nil ,
[ [ {
"action" : "delete"
} ] ]
)
ngx . say ( "[delete] code: " , code , " message: " , message )
}
}
- - - request
GET / t
- - - response_body
[ delete ] code: 200 message: passed
- - - no_error_log
[ error ]