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-07-01 13:29:21 +08:00
repeat_each ( 1 ) ;
no_long_string ( ) ;
no_root_location ( ) ;
no_shuffle ( ) ;
log_level ( "info" ) ;
2020-11-30 10:32:35 +08:00
add_block_preprocessor ( sub {
my ( $ block ) = @ _ ;
if ( ! defined $ block - > request ) {
$ block - > set_value ( "request" , "GET /t" ) ;
}
$ block ;
} ) ;
2019-07-01 13:29:21 +08:00
run_tests ;
__DATA__
=== TEST 1 : get plugins ' name
- - - request
GET /apisix/ admin /plugins/ list
2019-07-24 16:59:37 +08:00
- - - response_body_like eval
2021-01-04 20:18:21 +08:00
qr/\["zipkin","request-id","fault-injection","serverless-pre-function","batch-requests","cors","ip-restriction","referer-restriction","uri-blocker","request-validation","openid-connect","wolf-rbac","hmac-auth","basic-auth","jwt-auth","key-auth","consumer-restriction","authz-keycloak","proxy-mirror","proxy-cache","proxy-rewrite","api-breaker","limit-conn","limit-count","limit-req","server-info","traffic-split","redirect","response-rewrite","grpc-transcode","prometheus","echo","http-logger","sls-logger","tcp-logger","kafka-logger","syslog","udp-logger","example-plugin","serverless-post-function"\]/
2019-07-01 13:29:21 +08:00
- - - no_error_log
[ error ]
2020-02-28 16:26:39 +08:00
=== TEST 2 : wrong path
- - - request
GET /apisix/ admin / plugins
- - - error_code: 400
- - - response_body
{ "error_msg" : "not found plugin name" }
- - - no_error_log
[ error ]
=== TEST 3 : get plugin schema
2020-11-30 10:32:35 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/plugins/limit-req' ,
ngx . HTTP_GET ,
nil ,
[ [
2020-10-06 18:18:22 +08:00
{ "properties" : { "rate" : { "minimum" : 0 , "type" : "number" } , "burst" : { "minimum" : 0 , "type" : "number" } , "key" : { "enum" : [ "remote_addr" , "server_addr" , "http_x_real_ip" , "http_x_forwarded_for" , "consumer_name" ] , "type" : "string" } , "rejected_code" : { "type" : "integer" , "default" : 503 , "minimum" : 200 } } , "required" : [ "rate" , "burst" , "key" ] , "type" : "object" }
2020-11-30 10:32:35 +08:00
] ]
)
ngx . status = code
}
}
2020-02-28 16:26:39 +08:00
- - - no_error_log
[ error ]
2020-03-14 09:34:34 +08:00
=== TEST 4 : get plugin node - status schema
2020-12-04 22:25:11 +08:00
- - - extra_yaml_config
plugins:
- node - status
2020-11-30 10:32:35 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/plugins/node-status' ,
ngx . HTTP_GET ,
nil ,
[ [
2020-09-17 22:31:02 +08:00
{ "properties" : { "disable" : { "type" : "boolean" } } , "additionalProperties" : false , "type" : "object" }
2020-11-30 10:32:35 +08:00
] ]
)
ngx . status = code
}
}
2020-03-14 09:34:34 +08:00
- - - no_error_log
2020-09-17 22:31:02 +08:00
[ error ]
=== TEST 5 : get plugin prometheus schema
2020-11-30 10:32:35 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/plugins/prometheus' ,
ngx . HTTP_GET ,
nil ,
[ [
2020-09-17 22:31:02 +08:00
{ "properties" : { "disable" : { "type" : "boolean" } } , "additionalProperties" : false , "type" : "object" }
2020-11-30 10:32:35 +08:00
] ]
)
ngx . status = code
}
}
2020-09-17 22:31:02 +08:00
- - - no_error_log
[ error ]
2020-10-29 09:26:59 +08:00
=== TEST 6 : get plugin basic - auth schema
2020-11-30 10:32:35 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/plugins/basic-auth' ,
ngx . HTTP_GET ,
nil ,
[ [
2020-10-29 09:26:59 +08:00
{ "properties" : { "disable" : { "type" : "boolean" } } , "title" : "work with route or service object" , "additionalProperties" : false , "type" : "object" }
2020-11-30 10:32:35 +08:00
] ]
)
ngx . status = code
}
}
2020-10-29 09:26:59 +08:00
- - - no_error_log
[ error ]
=== TEST 7 : get plugin basic - auth schema by schema_type
2020-11-30 10:32:35 +08:00
- - - config
location / t {
content_by_lua_block {
local t = require ( "lib.test_admin" ) . test
local code , body = t ( '/apisix/admin/plugins/basic-auth?schema_type=consumer' ,
ngx . HTTP_GET ,
nil ,
[ [
2020-10-29 09:26:59 +08:00
{ "title" : "work with consumer object" , "additionalProperties" : false , "required" : [ "username" , "password" ] , "properties" : { "username" : { "type" : "string" } , "password" : { "type" : "string" } } , "type" : "object" }
2020-11-30 10:32:35 +08:00
] ]
)
ngx . status = code
}
}
2020-10-29 09:26:59 +08:00
- - - no_error_log
[ error ]
2020-12-29 11:01:12 +08:00
=== TEST 8 : confirm the name , priority , schema , type and version of plugin
- - - config
location / t {
content_by_lua_block {
local json = require ( "toolkit.json" )
local t = require ( "lib.test_admin" ) . test
2020-12-29 15:55:53 +08:00
local code , message , res = t ( '/apisix/admin/plugins?all=true' ,
2020-12-29 11:01:12 +08:00
ngx . HTTP_GET
)
if code >= 300 then
ngx . status = code
ngx . say ( message )
return
end
res = json . decode ( res )
for k , v in pairs ( res ) do
if k == "example-plugin" then
ngx . say ( json . encode ( v ) )
end
end
}
}
- - - response_body eval
2021-01-15 11:40:49 +08:00
qr/\{"metadata_schema":\{"additionalProperties":false,"properties":\{"ikey":\{"minimum":0,"type":"number"\},"skey":\{"type":"string"\}\},"required":\["ikey","skey"\],"type":"object"\},"priority":0,"schema":\{"\$comment":"this is a mark for our injected plugin schema","properties":\{"disable":\{"type":"boolean"\},"i":\{"minimum":0,"type":"number"\},"ip":\{"type":"string"\},"port":\{"type":"integer"\},"s":\{"type":"string"\},"t":\{"minItems":1,"type":"array"\}\},"required":\["i"\],"type":"object"\},"version":0.1\}/
2020-12-29 11:01:12 +08:00
- - - no_error_log
[ error ]
=== TEST 9 : confirm the plugin of auth type
- - - config
location / t {
content_by_lua_block {
local json = require ( "toolkit.json" )
local t = require ( "lib.test_admin" ) . test
2020-12-29 15:55:53 +08:00
local code , message , res = t ( '/apisix/admin/plugins?all=true' ,
2020-12-29 11:01:12 +08:00
ngx . HTTP_GET
)
if code >= 300 then
ngx . status = code
ngx . say ( message )
return
end
res = json . decode ( res )
local auth_plugins = { }
for k , v in pairs ( res ) do
if v . type == "auth" then
local plugin = { }
plugin . name = k
plugin . priority = v . priority
table . insert ( auth_plugins , plugin )
end
end
table . sort ( auth_plugins , function ( l , r )
return l . priority > r . priority
end )
ngx . say ( json . encode ( auth_plugins ) )
}
}
- - - response_body eval
qr/\[\{"name":"wolf-rbac","priority":2555\},\{"name":"hmac-auth","priority":2530\},\{"name":"basic-auth","priority":2520\},\{"name":"jwt-auth","priority":2510\},\{"name":"key-auth","priority":2500\}\]/
- - - no_error_log
[ error ]
=== TEST 10 : confirm the consumer_schema of plugin
- - - config
location / t {
content_by_lua_block {
local json = require ( "toolkit.json" )
local t = require ( "lib.test_admin" ) . test
2020-12-29 15:55:53 +08:00
local code , message , res = t ( '/apisix/admin/plugins?all=true' ,
2020-12-29 11:01:12 +08:00
ngx . HTTP_GET
)
if code >= 300 then
ngx . status = code
ngx . say ( message )
return
end
res = json . decode ( res )
local consumer_schema
for k , v in pairs ( res ) do
if k == "basic-auth" then
consumer_schema = v . consumer_schema
end
end
ngx . say ( json . encode ( consumer_schema ) )
}
}
- - - response_body eval
qr/\{"additionalProperties":false,"properties":\{"password":\{"type":"string"\},"username":\{"type":"string"\}\},"required":\["username","password"\],"title":"work with consumer object","type":"object"\}/
- - - no_error_log
[ error ]