| # vi:filetype= |
| |
| use lib 'lib'; |
| use Test::Nginx::Socket; |
| |
| repeat_each(2); |
| |
| plan tests => repeat_each() * 113; |
| |
| #master_on(); |
| #workers(2); |
| log_level("warn"); |
| no_diff; |
| |
| run_tests(); |
| |
| __DATA__ |
| |
| === TEST 1: simple set (1 arg) |
| --- config |
| location /foo { |
| echo hi; |
| more_set_headers 'X-Foo: Blah'; |
| } |
| --- request |
| GET /foo |
| --- response_headers |
| X-Foo: Blah |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 2: simple set (2 args) |
| --- config |
| location /foo { |
| echo hi; |
| more_set_headers 'X-Foo: Blah' 'X-Bar: hi'; |
| } |
| --- request |
| GET /foo |
| --- response_headers |
| X-Foo: Blah |
| X-Bar: hi |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 3: two sets in a single location |
| --- config |
| location /two { |
| echo hi; |
| more_set_headers 'X-Foo: Blah' |
| more_set_headers 'X-Bar: hi'; |
| } |
| --- request |
| GET /two |
| --- response_headers |
| X-Foo: Blah |
| X-Bar: hi |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 4: two sets in a single location (for 404 too) |
| --- config |
| location /two { |
| more_set_headers 'X-Foo: Blah' |
| more_set_headers 'X-Bar: hi'; |
| return 404; |
| } |
| --- request |
| GET /two |
| --- response_headers |
| X-Foo: Blah |
| X-Bar: hi |
| --- response_body_like: 404 Not Found |
| --- error_code: 404 |
| |
| |
| |
| === TEST 5: set a header then clears it (500) |
| --- config |
| location /two { |
| more_set_headers 'X-Foo: Blah'; |
| more_set_headers 'X-Foo:'; |
| return 500; |
| } |
| --- request |
| GET /two |
| --- response_headers |
| ! X-Foo |
| ! X-Bar |
| --- response_body_like: 500 Internal Server Error |
| --- error_code: 500 |
| |
| |
| |
| === TEST 6: set a header only when 500 (matched) |
| --- config |
| location /bad { |
| more_set_headers -s 500 'X-Mine: Hiya'; |
| more_set_headers -s 404 'X-Yours: Blah'; |
| return 500; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-Mine: Hiya |
| ! X-Yours |
| --- response_body_like: 500 Internal Server Error |
| --- error_code: 500 |
| |
| |
| |
| === TEST 7: set a header only when 500 (not matched with 200) |
| --- config |
| location /bad { |
| more_set_headers -s 500 'X-Mine: Hiya'; |
| more_set_headers -s 404 'X-Yours: Blah'; |
| echo hello; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| ! X-Mine |
| ! X-Yours |
| --- response_body |
| hello |
| --- error_code: 200 |
| |
| |
| |
| === TEST 8: set a header only when 500 (not matched with 404) |
| --- config |
| location /bad { |
| more_set_headers -s 500 'X-Mine: Hiya'; |
| more_set_headers -s 404 'X-Yours: Blah'; |
| return 404; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| ! X-Mine |
| X-Yours: Blah |
| --- response_body_like: 404 Not Found |
| --- error_code: 404 |
| |
| |
| |
| === TEST 9: more conditions |
| --- config |
| location /bad { |
| more_set_headers -s '503 404' 'X-Mine: Hiya'; |
| more_set_headers -s ' 404 413 ' 'X-Yours: Blah'; |
| return 503; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-Mine: Hiya |
| ! X-Yours |
| --- response_body_like: 503 Service |
| --- error_code: 503 |
| |
| |
| |
| === TEST 10: more conditions |
| --- config |
| location /bad { |
| more_set_headers -s '503 404' 'X-Mine: Hiya'; |
| more_set_headers -s ' 404 413 ' 'X-Yours: Blah'; |
| return 404; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-Mine: Hiya |
| X-Yours: Blah |
| --- response_body_like: 404 Not Found |
| --- error_code: 404 |
| |
| |
| |
| === TEST 11: more conditions |
| --- config |
| location /bad { |
| more_set_headers -s '503 404' 'X-Mine: Hiya'; |
| more_set_headers -s ' 404 413 ' 'X-Yours: Blah'; |
| return 413; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| ! X-Mine |
| X-Yours: Blah |
| --- response_body_like: 413 Request Entity Too Large |
| --- error_code: 413 |
| |
| |
| |
| === TEST 12: simple -t |
| --- config |
| location /bad { |
| default_type 'text/css'; |
| more_set_headers -t 'text/css' 'X-CSS: yes'; |
| echo hi; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-CSS: yes |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 13: simple -t (not matched) |
| --- config |
| location /bad { |
| default_type 'text/plain'; |
| more_set_headers -t 'text/css' 'X-CSS: yes'; |
| echo hi; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| ! X-CSS |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 14: multiple -t (not matched) |
| --- config |
| location /bad { |
| default_type 'text/plain'; |
| more_set_headers -t 'text/javascript' -t 'text/css' 'X-CSS: yes'; |
| echo hi; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| ! X-CSS |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 15: multiple -t (matched) |
| --- config |
| location /bad { |
| default_type 'text/plain'; |
| more_set_headers -t 'text/javascript' -t 'text/plain' 'X-CSS: yes'; |
| echo hi; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-CSS: yes |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 16: multiple -t (matched) |
| --- config |
| location /bad { |
| default_type 'text/javascript'; |
| more_set_headers -t 'text/javascript' -t 'text/plain' 'X-CSS: yes'; |
| echo hi; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-CSS: yes |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 17: multiple -t (matched) with extra spaces |
| --- config |
| location /bad { |
| default_type 'text/javascript'; |
| more_set_headers -t ' text/javascript ' -t 'text/plain' 'X-CSS: yes'; |
| echo hi; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-CSS: yes |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 18: multiple -t merged |
| --- config |
| location /bad { |
| default_type 'text/javascript'; |
| more_set_headers -t ' text/javascript text/plain' 'X-CSS: yes'; |
| echo hi; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-CSS: yes |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 19: multiple -t merged (2) |
| --- config |
| location /bad { |
| default_type 'text/plain'; |
| more_set_headers -t ' text/javascript text/plain' 'X-CSS: yes'; |
| echo hi; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-CSS: yes |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 20: multiple -s option in a directive (not matched) |
| --- config |
| location /bad { |
| more_set_headers -s 404 -s 500 'X-status: howdy'; |
| echo hi; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| ! X-status |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 21: multiple -s option in a directive (matched 404) |
| --- config |
| location /bad { |
| more_set_headers -s 404 -s 500 'X-status: howdy'; |
| return 404; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-status: howdy |
| --- response_body_like: 404 Not Found |
| --- error_code: 404 |
| |
| |
| |
| === TEST 22: multiple -s option in a directive (matched 500) |
| --- config |
| location /bad { |
| more_set_headers -s 404 -s 500 'X-status: howdy'; |
| return 500; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-status: howdy |
| --- response_body_like: 500 Internal Server Error |
| --- error_code: 500 |
| |
| |
| |
| === TEST 23: -s mixed with -t |
| --- config |
| location /bad { |
| default_type 'text/html'; |
| more_set_headers -s 404 -s 200 -t 'text/html' 'X-status: howdy2'; |
| return 404; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-status: howdy2 |
| --- response_body_like: 404 Not Found |
| --- error_code: 404 |
| |
| |
| |
| === TEST 24: -s mixed with -t |
| --- config |
| location /bad { |
| default_type 'text/html'; |
| more_set_headers -s 404 -s 200 -t 'text/plain' 'X-status: howdy2'; |
| return 404; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| ! X-status |
| --- response_body_like: 404 Not Found |
| --- error_code: 404 |
| |
| |
| |
| === TEST 25: -s mixed with -t |
| --- config |
| location /bad { |
| default_type 'text/html'; |
| more_set_headers -s 404 -s 200 -t 'text/html' 'X-status: howdy2'; |
| echo hi; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-status: howdy2 |
| --- response_body |
| hi |
| --- error_code: 200 |
| |
| |
| |
| === TEST 26: -s mixed with -t |
| --- config |
| location /bad { |
| default_type 'text/html'; |
| more_set_headers -s 500 -s 200 -t 'text/html' 'X-status: howdy2'; |
| return 404; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| ! X-status |
| --- response_body_like: 404 Not Found |
| --- error_code: 404 |
| |
| |
| |
| === TEST 27: merge from the upper level |
| --- config |
| more_set_headers -s 404 -t 'text/html' 'X-status2: howdy3'; |
| location /bad { |
| default_type 'text/html'; |
| more_set_headers -s 500 -s 200 -t 'text/html' 'X-status: howdy2'; |
| return 404; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-status2: howdy3 |
| ! X-status |
| --- response_body_like: 404 Not Found |
| --- error_code: 404 |
| |
| |
| |
| === TEST 28: merge from the upper level |
| --- config |
| more_set_headers -s 404 -t 'text/html' 'X-status2: howdy3'; |
| location /bad { |
| default_type 'text/html'; |
| more_set_headers -s 500 -s 200 -t 'text/html' 'X-status: howdy2'; |
| echo yeah; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| ! X-status2 |
| X-status: howdy2 |
| --- response_body |
| yeah |
| --- error_code: 200 |
| |
| |
| |
| === TEST 29: override settings by inheritance |
| --- config |
| more_set_headers -s 404 -t 'text/html' 'X-status: yeah'; |
| location /bad { |
| default_type 'text/html'; |
| more_set_headers -s 404 -t 'text/html' 'X-status: nope'; |
| return 404; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-status: nope |
| --- response_body_like: 404 Not Found |
| --- error_code: 404 |
| |
| |
| |
| === TEST 30: append settings by inheritance |
| --- config |
| more_set_headers -s 404 -t 'text/html' 'X-status: yeah'; |
| location /bad { |
| default_type 'text/html'; |
| more_set_headers -s 404 -t 'text/html' 'X-status2: nope'; |
| return 404; |
| } |
| --- request |
| GET /bad |
| --- response_headers |
| X-status: yeah |
| X-status2: nope |
| --- response_body_like: 404 Not Found |
| --- error_code: 404 |
| |
| |
| |
| === TEST 31: clear headers with wildcard |
| --- config |
| location = /backend { |
| add_header X-Hidden-One "i am hidden"; |
| add_header X-Hidden-Two "me 2"; |
| echo hi; |
| } |
| location /hello { |
| more_clear_headers 'X-Hidden-*'; |
| proxy_pass http://127.0.0.1:$server_port/backend; |
| } |
| --- request |
| GET /hello |
| --- response_headers |
| ! X-Hidden-One |
| ! X-Hidden-Two |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 32: clear duplicate headers |
| --- config |
| location = /backend { |
| add_header pragma no-cache; |
| add_header pragma no-cache; |
| echo hi; |
| } |
| location /hello { |
| more_clear_headers 'pragma'; |
| proxy_pass http://127.0.0.1:$server_port/backend; |
| } |
| --- request |
| GET /hello |
| --- response_headers |
| !pragma |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 33: HTTP 0.9 (set) |
| --- config |
| location /foo { |
| more_set_headers 'X-Foo: howdy'; |
| echo ok; |
| } |
| --- raw_request eval |
| "GET /foo\r\n" |
| --- response_headers |
| ! X-Foo |
| --- response_body |
| ok |
| --- http09 |
| |