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-04-11 16:53:21 +08:00
|
|
|
|
2019-05-06 16:02:28 +08:00
|
|
|
repeat_each(2);
|
2019-06-13 12:01:36 +08:00
|
|
|
no_root_location();
|
2019-04-11 16:53:21 +08:00
|
|
|
|
|
|
|
run_tests;
|
|
|
|
|
|
|
|
__DATA__
|
|
|
|
|
|
|
|
=== TEST 1: sanity
|
|
|
|
--- config
|
|
|
|
location /t {
|
|
|
|
content_by_lua_block {
|
2020-11-30 10:32:35 +08:00
|
|
|
local encode_json = require("toolkit.json").encode
|
2019-05-22 09:19:25 +08:00
|
|
|
local config = require("apisix.core").config.local_conf()
|
2019-05-06 10:14:39 +08:00
|
|
|
|
2019-04-11 16:53:21 +08:00
|
|
|
ngx.say("etcd host: ", config.etcd.host)
|
2019-05-08 10:38:45 +08:00
|
|
|
ngx.say("first plugin: ", encode_json(config.plugins[1]))
|
2019-04-11 16:53:21 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
--- request
|
|
|
|
GET /t
|
|
|
|
--- response_body
|
|
|
|
etcd host: http://127.0.0.1:2379
|
2021-06-16 17:25:50 +08:00
|
|
|
first plugin: "client-control"
|
2019-07-12 10:33:17 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
=== TEST 2: different elements in yaml
|
|
|
|
--- config
|
|
|
|
location /t {
|
|
|
|
content_by_lua_block {
|
2020-11-30 10:32:35 +08:00
|
|
|
local encode_json = require("toolkit.json").encode
|
2019-07-12 10:33:17 +08:00
|
|
|
local config = require("apisix.core").config.local_conf()
|
|
|
|
|
|
|
|
ngx.say("etcd host: ", config.etcd.host)
|
|
|
|
ngx.say("first plugin: ", encode_json(config.plugins[1]))
|
|
|
|
ngx.say("seq: ", encode_json(config.seq))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--- yaml_config
|
|
|
|
etcd:
|
2020-08-18 20:18:55 +08:00
|
|
|
host:
|
|
|
|
- "http://127.0.0.1:2379" # etcd address
|
2019-07-12 10:33:17 +08:00
|
|
|
prefix: "/apisix" # apisix configurations prefix
|
|
|
|
timeout: 1
|
|
|
|
|
|
|
|
plugins:
|
|
|
|
- example-plugin
|
|
|
|
|
|
|
|
# Collection Types #############################################################
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
# http://yaml.org/type/map.html -----------------------------------------------#
|
|
|
|
|
|
|
|
map:
|
|
|
|
# Unordered set of key: value pairs.
|
|
|
|
Block style: !!map
|
|
|
|
Clark : Evans
|
|
|
|
Ingy : döt Net
|
|
|
|
Oren : Ben-Kiki
|
|
|
|
Flow style: !!map { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }
|
|
|
|
|
|
|
|
# http://yaml.org/type/omap.html ----------------------------------------------#
|
|
|
|
|
|
|
|
omap:
|
|
|
|
# Explicitly typed ordered map (dictionary).
|
|
|
|
Bestiary: !!omap
|
|
|
|
- aardvark: African pig-like ant eater. Ugly.
|
|
|
|
- anteater: South-American ant eater. Two species.
|
|
|
|
- anaconda: South-American constrictor snake. Scaly.
|
|
|
|
# Etc.
|
|
|
|
# Flow style
|
|
|
|
Numbers: !!omap [ one: 1, two: 2, three : 3 ]
|
|
|
|
|
|
|
|
# http://yaml.org/type/pairs.html ---------------------------------------------#
|
|
|
|
|
|
|
|
pairs:
|
|
|
|
# Explicitly typed pairs.
|
|
|
|
Block tasks: !!pairs
|
|
|
|
- meeting: with team.
|
|
|
|
- meeting: with boss.
|
|
|
|
- break: lunch.
|
|
|
|
- meeting: with client.
|
|
|
|
Flow tasks: !!pairs [ meeting: with team, meeting: with boss ]
|
|
|
|
|
|
|
|
# http://yaml.org/type/set.html -----------------------------------------------#
|
|
|
|
|
|
|
|
set:
|
|
|
|
# Explicitly typed set.
|
|
|
|
baseball players: !!set
|
|
|
|
? Mark McGwire
|
|
|
|
? Sammy Sosa
|
|
|
|
? Ken Griffey
|
|
|
|
# Flow style
|
|
|
|
baseball teams: !!set { Boston Red Sox, Detroit Tigers, New York Yankees }
|
|
|
|
|
|
|
|
# http://yaml.org/type/seq.html -----------------------------------------------#
|
|
|
|
|
|
|
|
seq:
|
|
|
|
# Ordered sequence of nodes
|
|
|
|
Block style: !!seq
|
|
|
|
- Mercury # Rotates - no light/dark sides.
|
|
|
|
- Venus # Deadliest. Aptly named.
|
|
|
|
- Earth # Mostly dirt.
|
|
|
|
- Mars # Seems empty.
|
|
|
|
- Jupiter # The king.
|
|
|
|
- Saturn # Pretty.
|
|
|
|
- Uranus # Where the sun hardly shines.
|
|
|
|
- Neptune # Boring. No rings.
|
|
|
|
- Pluto # You call this a planet?
|
|
|
|
Flow style: !!seq [ Mercury, Venus, Earth, Mars, # Rocks
|
|
|
|
Jupiter, Saturn, Uranus, Neptune, # Gas
|
|
|
|
Pluto ] # Overrated
|
|
|
|
|
|
|
|
|
|
|
|
# Scalar Types #################################################################
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
# http://yaml.org/type/bool.html ----------------------------------------------#
|
|
|
|
|
|
|
|
bool:
|
|
|
|
- true
|
|
|
|
- True
|
|
|
|
- TRUE
|
|
|
|
- false
|
|
|
|
- False
|
|
|
|
- FALSE
|
|
|
|
|
|
|
|
# http://yaml.org/type/float.html ---------------------------------------------#
|
|
|
|
|
|
|
|
float:
|
|
|
|
canonical: 6.8523015e+5
|
2021-03-14 22:53:34 +08:00
|
|
|
exponential: 685.230_15e+03
|
2019-07-12 10:33:17 +08:00
|
|
|
fixed: 685_230.15
|
|
|
|
sexagesimal: 190:20:30.15
|
|
|
|
negative infinity: -.inf
|
|
|
|
not a number: .NaN
|
|
|
|
|
|
|
|
# http://yaml.org/type/int.html -----------------------------------------------#
|
|
|
|
|
|
|
|
int:
|
|
|
|
canonical: 685230
|
|
|
|
decimal: +685_230
|
|
|
|
octal: 02472256
|
|
|
|
hexadecimal: 0x_0A_74_AE
|
|
|
|
binary: 0b1010_0111_0100_1010_1110
|
|
|
|
sexagesimal: 190:20:30
|
|
|
|
|
|
|
|
# http://yaml.org/type/merge.html ---------------------------------------------#
|
|
|
|
|
|
|
|
merge:
|
|
|
|
- &CENTER { x: 1, y: 2 }
|
|
|
|
- &LEFT { x: 0, y: 2 }
|
|
|
|
- &BIG { r: 10 }
|
|
|
|
- &SMALL { r: 1 }
|
|
|
|
|
|
|
|
# All the following maps are equal:
|
|
|
|
|
|
|
|
- # Explicit keys
|
|
|
|
x: 1
|
|
|
|
y: 2
|
|
|
|
r: 10
|
|
|
|
label: nothing
|
|
|
|
|
|
|
|
- # Merge one map
|
|
|
|
<< : *CENTER
|
|
|
|
r: 10
|
|
|
|
label: center
|
|
|
|
|
|
|
|
- # Merge multiple maps
|
|
|
|
<< : [ *CENTER, *BIG ]
|
|
|
|
label: center/big
|
|
|
|
|
|
|
|
- # Override
|
|
|
|
<< : [ *BIG, *LEFT, *SMALL ]
|
|
|
|
x: 1
|
|
|
|
label: big/left/small
|
|
|
|
|
|
|
|
# http://yaml.org/type/null.html ----------------------------------------------#
|
|
|
|
|
|
|
|
null:
|
|
|
|
# This mapping has four keys,
|
|
|
|
# one has a value.
|
|
|
|
empty:
|
|
|
|
canonical: ~
|
|
|
|
english: null
|
|
|
|
~: null key
|
|
|
|
# This sequence has five
|
|
|
|
# entries, two have values.
|
|
|
|
sparse:
|
|
|
|
- ~
|
|
|
|
- 2nd entry
|
|
|
|
-
|
|
|
|
- 4th entry
|
|
|
|
- Null
|
|
|
|
|
|
|
|
# http://yaml.org/type/str.html -----------------------------------------------#
|
|
|
|
|
|
|
|
string:
|
|
|
|
inline1: abcd
|
|
|
|
inline2: "abcd"
|
|
|
|
inline3: 'abcd'
|
|
|
|
block1: |
|
|
|
|
aaa
|
|
|
|
bbb
|
|
|
|
ccc
|
|
|
|
block2: |+
|
|
|
|
aaa
|
|
|
|
bbb
|
|
|
|
ccc
|
|
|
|
block3: |-
|
|
|
|
aaa
|
|
|
|
bbb
|
|
|
|
ccc
|
|
|
|
block4: >
|
|
|
|
aaa
|
|
|
|
bbb
|
|
|
|
ccc
|
|
|
|
text5: >+
|
|
|
|
aaa
|
|
|
|
bbb
|
|
|
|
ccc
|
|
|
|
text6: >-
|
|
|
|
aaa
|
|
|
|
bbb
|
|
|
|
ccc
|
|
|
|
# http://yaml.org/type/timestamp.html -----------------------------------------#
|
|
|
|
|
|
|
|
timestamp:
|
|
|
|
canonical: 2001-12-15T02:59:43.1Z
|
|
|
|
valid iso8601: 2001-12-14t21:59:43.10-05:00
|
|
|
|
space separated: 2001-12-14 21:59:43.10 -5
|
|
|
|
no time zone (Z): 2001-12-15 2:59:43.10
|
|
|
|
date (00:00:00Z): 2002-12-14
|
|
|
|
|
|
|
|
|
|
|
|
# JavaScript Specific Types ####################################################
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
# https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp
|
|
|
|
|
|
|
|
regexp:
|
|
|
|
simple: !!js/regexp foobar
|
|
|
|
modifiers: !!js/regexp /foobar/mi
|
|
|
|
|
|
|
|
# https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/undefined
|
|
|
|
|
|
|
|
undefined: !!js/undefined ~
|
|
|
|
|
|
|
|
# https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function
|
|
|
|
|
|
|
|
function: !!js/function >
|
|
|
|
function foobar() {
|
|
|
|
return 'Wow! JS-YAML Rocks!';
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Custom types #################################################################
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
|
|
|
|
# JS-YAML allows you to specify a custom YAML types for your structures.
|
|
|
|
# This is a simple example of custom constructor defined in `js/demo.js` for
|
|
|
|
# custom `!sexy` type:
|
|
|
|
#
|
|
|
|
# var SexyYamlType = new jsyaml.Type('!sexy', {
|
|
|
|
# kind: 'sequence',
|
|
|
|
# construct: function (data) {
|
|
|
|
# return data.map(function (string) { return 'sexy ' + string; });
|
|
|
|
# }
|
|
|
|
# });
|
|
|
|
#
|
|
|
|
# var SEXY_SCHEMA = jsyaml.Schema.create([ SexyYamlType ]);
|
|
|
|
#
|
|
|
|
# result = jsyaml.load(yourData, { schema: SEXY_SCHEMA });
|
|
|
|
|
|
|
|
foobar: !sexy
|
|
|
|
- bunny
|
|
|
|
- chocolate
|
|
|
|
--- request
|
|
|
|
GET /t
|
|
|
|
--- response_body
|
|
|
|
etcd host: http://127.0.0.1:2379
|
|
|
|
first plugin: "example-plugin"
|
2020-08-18 20:18:55 +08:00
|
|
|
seq: {"Block style":["Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus","Neptune","Pluto"],"Flow style":["Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus","Neptune","Pluto"]}
|
2020-12-10 15:48:47 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
=== TEST 3: allow environment variable
|
|
|
|
--- config
|
|
|
|
location /t {
|
|
|
|
content_by_lua_block {
|
|
|
|
local config = require("apisix.core").config.local_conf()
|
|
|
|
|
|
|
|
ngx.say(config.apisix.id)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--- main_config
|
|
|
|
env AID=3;
|
|
|
|
--- yaml_config
|
|
|
|
#nginx_config:
|
|
|
|
#env: AID=3
|
|
|
|
apisix:
|
|
|
|
id: ${{ AID }}
|
|
|
|
--- request
|
|
|
|
GET /t
|
|
|
|
--- response_body
|
|
|
|
3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
=== TEST 4: allow integer worker processes
|
|
|
|
--- config
|
|
|
|
location /t {
|
|
|
|
content_by_lua_block {
|
|
|
|
local config = require("apisix.core").config.local_conf()
|
|
|
|
|
|
|
|
ngx.say(config.nginx_config.worker_processes)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--- extra_yaml_config
|
|
|
|
nginx_config:
|
2020-12-15 08:56:20 +08:00
|
|
|
worker_processes: 1
|
2020-12-10 15:48:47 +08:00
|
|
|
--- request
|
|
|
|
GET /t
|
|
|
|
--- response_body
|
|
|
|
1
|