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-07-03 11:36:14 +08:00
BEGIN {
if ( $ ENV { TEST_NGINX_CHECK_LEAK } ) {
$ SkipReason = "unavailable for the hup tests" ;
} else {
$ ENV { TEST_NGINX_USE_HUP } = 1 ;
undef $ ENV { TEST_NGINX_USE_STAP } ;
}
}
2019-09-10 09:42:55 +08:00
use t::APISIX 'no_plan' ;
2019-06-13 19:11:15 +08:00
2019-06-14 16:11:14 +08:00
repeat_each ( 1 ) ;
2019-06-13 19:11:15 +08:00
no_long_string ( ) ;
2019-06-14 16:11:14 +08:00
no_shuffle ( ) ;
2019-06-13 19:11:15 +08:00
no_root_location ( ) ;
run_tests ;
__DATA__
=== TEST 1 : sanity
- - - config
location / t {
content_by_lua_block {
local plugin = require ( "apisix.plugins.limit-count" )
local ok , err = plugin . check_schema ( { count = 2 , time_window = 60 , rejected_code = 503 , key = 'remote_addr' } )
if not ok then
ngx . say ( err )
end
ngx . say ( "done" )
}
}
- - - request
GET / t
- - - response_body
done
- - - no_error_log
[ error ]
=== TEST 2 : wrong value of key
- - - config
location / t {
content_by_lua_block {
local plugin = require ( "apisix.plugins.limit-count" )
local ok , err = plugin . check_schema ( { count = 2 , time_window = 60 , rejected_code = 503 , key = 'host' } )
if not ok then
ngx . say ( err )
end
ngx . say ( "done" )
}
}
- - - request
GET / t
- - - response_body
2020-12-18 16:55:23 +08:00
property "key" validation failed: matches none of the enum values
2019-06-13 19:11:15 +08:00
done
- - - no_error_log
[ error ]
2019-06-14 16:11:14 +08:00
=== TEST 3 : set route ( id: 1 )
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"plugins" : {
"limit-count" : {
"count" : 2 ,
"time_window" : 60 ,
"rejected_code" : 503 ,
"key" : "remote_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
=== TEST 4 : up the limit
- - - pipelined_requests eval
[ "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 503 , 503 ]
- - - no_error_log
[ error ]
=== TEST 5 : up the limit
- - - pipelined_requests eval
[ "GET /hello1" , "GET /hello" , "GET /hello2" , "GET /hello" , "GET /hello" ]
- - - error_code eval
2019-07-03 11:36:14 +08:00
[ 404 , 503 , 404 , 503 , 503 ]
2019-06-14 16:11:14 +08:00
- - - no_error_log
[ error ]
2019-06-17 15:05:19 +08:00
2019-07-03 11:36:14 +08:00
=== TEST 6 : set route ( id: 1 )
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"plugins" : {
"limit-count" : {
"count" : 3 ,
"time_window" : 60 ,
"rejected_code" : 503 ,
"key" : "remote_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
=== TEST 7 : up the limit
- - - pipelined_requests eval
[ "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 200 , 503 ]
- - - no_error_log
[ error ]
2020-12-02 17:04:31 +08:00
=== TEST 8 : invalid route: missing count
2019-06-17 15:05:19 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"plugins" : {
"limit-count" : {
"time_window" : 60 ,
"rejected_code" : 503
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2020-12-02 17:04:31 +08:00
{ "error_msg" : "failed to check the configuration of plugin limit-count err: property \"count\" is required" }
2019-06-17 15:05:19 +08:00
- - - no_error_log
[ error ]
2019-07-03 11:36:14 +08:00
=== TEST 9 : invalid route: wrong count
2019-06-17 15:05:19 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"plugins" : {
"limit-count" : {
"count" : - 100 ,
"time_window" : 60 ,
"rejected_code" : 503 ,
"key" : "remote_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2021-03-14 22:53:34 +08:00
{ "error_msg" : "failed to check the configuration of plugin limit-count err: property \"count\" validation failed: expected -100 to be strictly greater than 0" }
2019-06-17 15:05:19 +08:00
- - - no_error_log
[ error ]
2019-07-03 11:36:14 +08:00
=== TEST 10 : invalid route: wrong count + POST method
2019-06-17 15:05:19 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2019-06-18 16:15:55 +08:00
local code , body = t ( '/apisix/admin/routes' ,
2019-06-17 15:05:19 +08:00
ngx . HTTP_POST ,
[ [ {
"plugins" : {
"limit-count" : {
"count" : - 100 ,
"time_window" : 60 ,
"rejected_code" : 503 ,
"key" : "remote_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2021-03-14 22:53:34 +08:00
{ "error_msg" : "failed to check the configuration of plugin limit-count err: property \"count\" validation failed: expected -100 to be strictly greater than 0" }
2019-06-17 15:05:19 +08:00
- - - no_error_log
[ error ]
2019-07-03 11:36:14 +08:00
=== TEST 11 : invalid service: missing key
2019-06-17 15:05:19 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/services/1' ,
ngx . HTTP_PUT ,
[ [ {
"plugins" : {
"limit-count" : {
"time_window" : 60 ,
"rejected_code" : 503
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
}
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2020-12-02 17:04:31 +08:00
{ "error_msg" : "failed to check the configuration of plugin limit-count err: property \"count\" is required" }
2019-06-17 15:05:19 +08:00
- - - no_error_log
[ error ]
2019-07-03 11:36:14 +08:00
=== TEST 12 : invalid service: wrong count
2019-06-17 15:05:19 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/services/1' ,
ngx . HTTP_PUT ,
[ [ {
"plugins" : {
"limit-count" : {
"count" : - 100 ,
"time_window" : 60 ,
"rejected_code" : 503 ,
"key" : "remote_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
}
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2021-03-14 22:53:34 +08:00
{ "error_msg" : "failed to check the configuration of plugin limit-count err: property \"count\" validation failed: expected -100 to be strictly greater than 0" }
2019-06-17 15:05:19 +08:00
- - - no_error_log
[ error ]
2019-07-03 11:36:14 +08:00
=== TEST 13 : invalid service: wrong count + POST method
2019-06-17 15:05:19 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
2019-06-18 16:15:55 +08:00
local code , body = t ( '/apisix/admin/services' ,
2019-06-17 15:05:19 +08:00
ngx . HTTP_POST ,
[ [ {
"plugins" : {
"limit-count" : {
"count" : - 100 ,
"time_window" : 60 ,
"rejected_code" : 503 ,
"key" : "remote_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
}
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . print ( body )
}
}
- - - request
GET / t
- - - error_code: 400
- - - response_body
2021-03-14 22:53:34 +08:00
{ "error_msg" : "failed to check the configuration of plugin limit-count err: property \"count\" validation failed: expected -100 to be strictly greater than 0" }
2019-06-17 15:05:19 +08:00
- - - no_error_log
[ error ]
2019-06-17 18:00:56 +08:00
2019-07-03 11:36:14 +08:00
=== TEST 14 : set route without id in post body
2019-06-17 18:00:56 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"plugins" : {
"limit-count" : {
"count" : 2 ,
"time_window" : 60 ,
"rejected_code" : 503 ,
"key" : "remote_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2019-07-03 11:36:14 +08:00
=== TEST 15 : up the limit
2019-06-17 18:00:56 +08:00
- - - pipelined_requests eval
[ "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 503 , 503 ]
- - - no_error_log
[ error ]
2019-06-19 13:06:03 +08:00
2019-07-03 11:36:14 +08:00
=== TEST 16 : disable plugin
2019-06-19 13:06:03 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"plugins" : {
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2019-07-03 11:36:14 +08:00
=== TEST 17 : up the limit
2019-06-19 13:06:03 +08:00
- - - pipelined_requests eval
[ "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 200 , 200 ]
- - - no_error_log
[ error ]
2019-08-18 08:01:01 +08:00
=== TEST 18 : set route ( key: server_addr )
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"plugins" : {
"limit-count" : {
"count" : 2 ,
"time_window" : 60 ,
"rejected_code" : 503 ,
"key" : "server_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2019-08-19 13:35:16 +08:00
=== TEST 19 : up the limit
- - - pipelined_requests eval
[ "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 503 , 503 ]
- - - no_error_log
[ error ]
2020-06-11 15:30:14 +08:00
=== TEST 20 : default rejected_code
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"plugins" : {
"limit-count" : {
"count" : 2 ,
"time_window" : 60 ,
"key" : "remote_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ] ,
[ [ {
"node" : {
"value" : {
"plugins" : {
"limit-count" : {
"rejected_code" : 503
}
}
}
}
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
2020-09-06 21:52:13 +08:00
=== TEST 21 : when the count is changed , check the limit is correct
- - - config
location / t1 {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"plugins" : {
"limit-count" : {
"count" : 1 ,
"time_window" : 60 ,
"key" : "remote_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ] ,
[ [ {
"node" : {
"value" : {
"plugins" : {
"limit-count" : {
"rejected_code" : 503
}
}
}
}
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
2020-12-15 08:56:20 +08:00
}
2020-09-06 21:52:13 +08:00
- - - pipelined_requests eval
[ "GET /hello" , "GET /hello" , "GET /hello" , "GET /t1" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 503 , 200 , 200 , 503 ]
- - - no_error_log
[ error ]
=== TEST 22 : when the count is changed , check the limit is correct ( from 1 to 2 )
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"plugins" : {
"limit-count" : {
"count" : 2 ,
"time_window" : 60 ,
"key" : "remote_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ] ,
[ [ {
"node" : {
"value" : {
"plugins" : {
"limit-count" : {
"rejected_code" : 503
}
}
}
}
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
location / t1 {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"plugins" : {
"limit-count" : {
"count" : 1 ,
"time_window" : 60 ,
"key" : "remote_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ] ,
[ [ {
"node" : {
"value" : {
"plugins" : {
"limit-count" : {
"rejected_code" : 503
}
}
}
}
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - pipelined_requests eval
[ "GET /t1" , "GET /hello" , "GET /hello" , "GET /t" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 503 , 200 , 200 , 200 , 503 ]
- - - no_error_log
[ error ]
=== TEST 23 : when the count is changed , check the limit is correct ( from 2 to 2 )
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"plugins" : {
"limit-count" : {
"count" : 2 ,
"time_window" : 60 ,
"key" : "remote_addr"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ] ,
[ [ {
"node" : {
"value" : {
"plugins" : {
"limit-count" : {
"rejected_code" : 503
}
}
}
}
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - pipelined_requests eval
[ "GET /t" , "GET /hello" , "GET /hello" , "GET /hello" , "GET /t" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 200 , 503 , 200 , 200 , 200 , 503 ]
- - - no_error_log
[ error ]
2020-10-17 19:24:55 +08:00
=== TEST 24 : create consumer and bind key - auth plugin
2020-12-15 08:56:20 +08:00
- - - config
2020-10-17 19:24:55 +08:00
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/consumers' ,
ngx . HTTP_PUT ,
[ [ {
"username" : "consumer_jack" ,
"plugins" : {
"key-auth" : {
"key" : "auth-jack"
}
}
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
=== TEST 25 : create route and consumer_name is consumer_jack
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"plugins" : {
"key-auth" : { } ,
"limit-count" : {
"count" : 2 ,
"time_window" : 60 ,
"rejected_code" : 503 ,
"key" : "consumer_name"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
=== TEST 26 : up the limit
- - - more_headers
apikey: auth - jack
- - - pipelined_requests eval
[ "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 503 , 503 ]
- - - no_error_log
[ error ]
2020-10-27 10:41:07 +08:00
=== TEST 27 : set service ( id: 1 ) and binding limit - count plugin
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/services/1' ,
ngx . HTTP_PUT ,
[ [ {
"plugins" : {
"limit-count" : {
"count" : 2 ,
"time_window" : 60 ,
"rejected_code" : 503 ,
"key" : "service_id"
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
}
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
=== TEST 28 : set route ( id: 1 ) and bind service
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello" ,
"service_id" : 1
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
=== TEST 29 : the number of requests exceeds the limit
- - - pipelined_requests eval
[ "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 503 , 503 ]
- - - no_error_log
[ error ]
=== TEST 30 : set service ( id: 1 ) , and no limit - count plugin configured
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/services/1' ,
ngx . HTTP_PUT ,
[ [ { } ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
=== TEST 31 : set route ( id: 1 ) and bind service
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"plugins" : {
"limit-count" : {
"count" : 2 ,
"time_window" : 60 ,
"rejected_code" : 503 ,
"key" : "service_id"
}
2020-12-15 08:56:20 +08:00
} ,
2020-10-27 10:41:07 +08:00
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello" ,
"service_id" : 1
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
=== TEST 32 : the number of requests exceeds the limit
- - - pipelined_requests eval
[ "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 503 , 503 ]
- - - no_error_log
[ error ]
=== TEST 33 : delete route ( id: 1 )
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' , 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-11-03 13:59:01 +08:00
=== TEST 34 : delete service ( id: 1 )
2020-10-27 10:41:07 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/services/1' , 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-02 17:04:31 +08:00
=== TEST 35 : use 'remote_addr' as default key
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"plugins" : {
"limit-count" : {
"count" : 2 ,
"time_window" : 60 ,
"rejected_code" : 503
}
} ,
"upstream" : {
"nodes" : {
"127.0.0.1:1980" : 1
} ,
"type" : "roundrobin"
} ,
"uri" : "/hello"
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
=== TEST 36 : up the limit
- - - pipelined_requests eval
[ "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 503 , 503 ]
- - - no_error_log
[ error ]
2020-12-29 11:25:25 +08:00
=== TEST 37 : add service and route , upstream is the domain name
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/services/1' ,
ngx . HTTP_PUT ,
[ [ {
"plugins" : {
"limit-count" : {
"count" : 3 ,
"time_window" : 60 ,
"rejected_code" : 503
}
} ,
"upstream" : {
"nodes" : {
"test.com:1980" : 1 ,
"foo.com:1981" : 1
} ,
"type" : "roundrobin"
}
} ] ]
)
if code >= 300 then
ngx . status = code
ngx . say ( body )
end
code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"uri" : "/hello" ,
"service_id" : 1
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
=== TEST 38 : normal , the result is as expected
- - - init_by_lua_block
require "resty.core"
apisix = require ( "apisix" )
core = require ( "apisix.core" )
apisix . http_init ( )
local utils = require ( "apisix.core.utils" )
2021-02-02 09:07:40 +08:00
utils . dns_parse = function ( domain ) - - mock: DNS parser
2020-12-29 11:25:25 +08:00
if domain == "test.com" then
return { address = "127.0.0.1" }
end
if domain == "foo.com" then
return { address = "127.0.0.1" }
end
error ( "unknown domain: " .. domain )
end
- - - pipelined_requests eval
[ "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 200 , 503 , 503 ]
- - - no_error_log
[ error ]
=== TEST 39 : plugin is bound to the route and upstream is the domain name
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/routes/1' ,
ngx . HTTP_PUT ,
[ [ {
"methods" : [ "GET" ] ,
"uri" : "/hello" ,
"plugins" : {
"limit-count" : {
"count" : 3 ,
"time_window" : 60 ,
"rejected_code" : 503
}
} ,
"upstream" : {
"nodes" : {
"test.com:1980" : 1 ,
"foo.com:1981" : 1
} ,
"type" : "roundrobin"
}
} ] ]
)
if code >= 300 then
ngx . status = code
end
ngx . say ( body )
}
}
- - - request
GET / t
- - - response_body
passed
- - - no_error_log
[ error ]
=== TEST 40 : normal , the result is as expected
- - - init_by_lua_block
require "resty.core"
apisix = require ( "apisix" )
core = require ( "apisix.core" )
apisix . http_init ( )
local utils = require ( "apisix.core.utils" )
2021-02-02 09:07:40 +08:00
utils . dns_parse = function ( domain ) - - mock: DNS parser
2020-12-29 11:25:25 +08:00
if domain == "test.com" then
return { address = "127.0.0.1" }
end
if domain == "foo.com" then
return { address = "127.0.0.1" }
end
error ( "unknown domain: " .. domain )
end
- - - pipelined_requests eval
[ "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" , "GET /hello" ]
- - - error_code eval
[ 200 , 200 , 200 , 503 , 503 ]
- - - no_error_log
[ error ]
2021-01-29 22:31:01 +08:00
=== TEST 41 : check_schema failed ( the `count` attribute is equal to 0 )
- - - config
location / t {
content_by_lua_block {
local plugin = require ( "apisix.plugins.limit-count" )
local ok , err = plugin . check_schema ( { count = 0 , time_window = 60 , rejected_code = 503 , key = 'remote_addr' } )
if not ok then
ngx . say ( err )
end
ngx . say ( "done" )
}
}
- - - request
GET / t
- - - response_body eval
2021-03-14 22:53:34 +08:00
qr/property \"count\" validation failed: expected 0 to be strictly greater than 0/
2021-01-29 22:31:01 +08:00
- - - no_error_log
[ error ]
=== TEST 42 : check_schema failed ( the `time_window` attribute is equal to 0 )
- - - config
location / t {
content_by_lua_block {
local plugin = require ( "apisix.plugins.limit-count" )
local ok , err = plugin . check_schema ( { count = 2 , time_window = 0 , rejected_code = 503 , key = 'remote_addr' } )
if not ok then
ngx . say ( err )
end
ngx . say ( "done" )
}
}
- - - request
GET / t
- - - response_body eval
2021-03-14 22:53:34 +08:00
qr/property \"time_window\" validation failed: expected 0 to be strictly greater than 0/
2021-01-29 22:31:01 +08:00
- - - no_error_log
[ error ]