| # |
| # 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. |
| # |
| use t::APISIX 'no_plan'; |
| |
| repeat_each(2); |
| no_root_location(); |
| |
| run_tests; |
| |
| __DATA__ |
| |
| === TEST 1: sanity |
| --- config |
| location /t { |
| content_by_lua_block { |
| local encode_json = require("toolkit.json").encode |
| local config = require("apisix.core").config.local_conf() |
| |
| ngx.say("etcd host: ", config.etcd.host) |
| ngx.say("first plugin: ", encode_json(config.plugins[1])) |
| } |
| } |
| --- request |
| GET /t |
| --- response_body |
| etcd host: http://127.0.0.1:2379 |
| first plugin: "real-ip" |
| |
| |
| |
| === TEST 2: different elements in yaml |
| --- config |
| location /t { |
| content_by_lua_block { |
| local encode_json = require("toolkit.json").encode |
| 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: |
| host: |
| - "http://127.0.0.1:2379" # etcd address |
| 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 |
| exponential: 685.230_15e+03 |
| 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" |
| seq: {"Block style":["Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus","Neptune","Pluto"],"Flow style":["Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus","Neptune","Pluto"]} |
| |
| |
| |
| === 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: |
| worker_processes: 1 |
| --- request |
| GET /t |
| --- response_body |
| 1 |