| # vi:filetype= |
| |
| use Test::Nginx::Socket; # 'no_plan'; |
| |
| repeat_each(2); |
| |
| plan tests => 43 * repeat_each(); |
| |
| no_diff; |
| |
| run_tests(); |
| |
| __DATA__ |
| |
| === TEST 1: set Server |
| --- config |
| #more_set_headers 'Last-Modified: x'; |
| more_clear_headers 'Last-Modified'; |
| --- request |
| GET /index.html |
| --- response_headers |
| ! Last-Modified |
| --- response_body_like: It works! |
| |
| |
| |
| === TEST 2: variables in the Ranges header |
| --- config |
| location /index.html { |
| set $rfrom 1; |
| set $rto 3; |
| more_set_input_headers 'Range: bytes=$rfrom - $rto'; |
| #more_set_input_headers 'Range: bytes=1 - 3'; |
| #echo $http_range; |
| } |
| --- request |
| GET /index.html |
| --- error_code: 206 |
| --- response_body chomp |
| htm |
| |
| |
| |
| === TEST 3: mime type overriding (inlined types) |
| --- config |
| more_clear_headers 'X-Powered-By' 'X-Runtime' 'ETag'; |
| |
| types { |
| text/html html htm shtml; |
| text/css css; |
| } |
| --- user_files |
| >>> a.css |
| hello |
| --- request |
| GET /a.css |
| --- error_code: 200 |
| --- response_headers |
| Content-Type: text/css |
| --- response_body |
| hello |
| |
| |
| |
| === TEST 4: mime type overriding (included types file) |
| --- config |
| more_clear_headers 'X-Powered-By' 'X-Runtime' 'ETag'; |
| include mime.types; |
| --- user_files |
| >>> a.css |
| hello |
| >>> ../conf/mime.types |
| types { |
| text/html html htm shtml; |
| text/css css; |
| } |
| --- request |
| GET /a.css |
| --- error_code: 200 |
| --- response_headers |
| Content-Type: text/css |
| --- response_body |
| hello |
| |
| |
| |
| === TEST 5: empty variable as the header value |
| --- config |
| location /foo { |
| more_set_headers 'X-Foo: $arg_foo'; |
| echo hi; |
| } |
| --- request |
| GET /foo |
| --- response_headers |
| ! X-Foo |
| --- response_body |
| hi |
| |
| |
| |
| === TEST 6: range bug |
| --- config |
| location /index.html { |
| more_clear_input_headers "Range*" ; |
| more_clear_input_headers "Content-Range*" ; |
| |
| more_set_input_headers 'Range: bytes=1-5'; |
| more_set_headers 'Content-Range: bytes 1-5/1000'; |
| } |
| --- request |
| GET /index.html |
| --- more_headers |
| Range: bytes=1-3 |
| --- raw_response_headers_like: Content-Range: bytes 1-5/1000$ |
| --- response_body chop |
| html> |
| --- error_code: 206 |
| --- SKIP |
| |
| |
| |
| === TEST 7: Allow-Ranges |
| --- config |
| location /index.html { |
| more_clear_headers 'Accept-Ranges'; |
| } |
| --- request |
| GET /index.html |
| --- response_headers |
| ! Accept-Ranges |
| --- response_body_like: It works |
| |
| |
| |
| === TEST 8: clear hand-written Allow-Ranges headers |
| --- config |
| location /index.html { |
| more_set_headers 'Accept-Ranges: bytes'; |
| more_clear_headers 'Accept-Ranges'; |
| } |
| --- request |
| GET /index.html |
| --- response_headers |
| ! Accept-Ranges |
| --- response_body_like: It works |
| |
| |
| |
| === TEST 9: clear first, then add |
| --- config |
| location /bug { |
| more_clear_headers 'Foo'; |
| more_set_headers 'Foo: a'; |
| echo hello; |
| } |
| --- request |
| GET /bug |
| --- raw_response_headers_like eval |
| ".*Foo: a.*" |
| --- response_body |
| hello |
| |
| |
| |
| === TEST 10: first add, then clear, then add again |
| --- config |
| location /bug { |
| more_set_headers 'Foo: a'; |
| more_clear_headers 'Foo'; |
| more_set_headers 'Foo: b'; |
| echo hello; |
| } |
| --- request |
| GET /bug |
| --- raw_response_headers_like eval |
| ".*Foo: b.*" |
| --- response_body |
| hello |
| |
| |
| |
| === TEST 11: override charset |
| --- config |
| location /foo { |
| charset iso-8859-1; |
| default_type "text/html"; |
| echo hiya; |
| } |
| |
| location /bug { |
| more_set_headers "Content-Type: text/html; charset=UTF-8"; |
| proxy_pass http://127.0.0.1:$server_port/foo; |
| } |
| --- request |
| GET /bug |
| --- response_body |
| hiya |
| --- response_headers |
| Content-Type: text/html; charset=UTF-8 |
| |
| |
| |
| === TEST 12: set multi-value header to a single value |
| --- config |
| location /main { |
| set $footer ''; |
| proxy_pass http://127.0.0.1:$server_port/foo; |
| more_set_headers 'Foo: b'; |
| header_filter_by_lua ' |
| ngx.var.footer = ngx.header.Foo |
| '; |
| echo_after_body $footer; |
| } |
| location /foo { |
| echo foo; |
| add_header Foo a; |
| add_header Foo c; |
| } |
| --- request |
| GET /main |
| --- response_headers |
| Foo: b |
| --- response_body |
| foo |
| b |
| |
| |
| |
| === TEST 13: set multi values to cache-control and override it with multiple values (to reproduce a bug) |
| --- config |
| location /lua { |
| content_by_lua ' |
| ngx.header.cache_control = { "private", "no-store", "foo", "bar", "baz" } |
| ngx.send_headers() |
| ngx.say("Cache-Control: ", ngx.var.sent_http_cache_control) |
| '; |
| more_clear_headers Cache-Control; |
| add_header Cache-Control "blah"; |
| } |
| --- request |
| GET /lua |
| --- response_headers |
| Cache-Control: blah |
| --- response_body |
| Cache-Control: blah |
| |
| |
| |
| === TEST 14: set 20+ headers |
| --- config |
| location /test { |
| more_clear_input_headers "Authorization"; |
| echo $http_a1; |
| echo $http_authorization; |
| echo $http_a2; |
| echo $http_a3; |
| echo $http_a23; |
| echo $http_a24; |
| echo $http_a25; |
| } |
| --- request |
| GET /test |
| --- more_headers eval |
| my $i = 1; |
| my $s; |
| while ($i <= 25) { |
| $s .= "A$i: $i\n"; |
| if ($i == 22) { |
| $s .= "Authorization: blah\n"; |
| } |
| $i++; |
| } |
| #warn $s; |
| $s |
| --- response_body |
| 1 |
| |
| 2 |
| 3 |
| 23 |
| 24 |
| 25 |
| |
| |
| |
| === TEST 15: github #20: segfault caused by the nasty optimization in the nginx core (set) |
| --- config |
| location = /t/ { |
| more_set_headers "Foo: 1"; |
| proxy_pass http://127.0.0.1:$server_port; |
| } |
| --- request |
| GET /t |
| --- more_headers |
| Foo: bar |
| Bah: baz |
| --- response_body_like: 301 Moved Permanently |
| --- error_code: 301 |
| --- no_error_log |
| [error] |
| |
| |
| |
| === TEST 16: github #20: segfault caused by the nasty optimization in the nginx core (clear) |
| --- config |
| location = /t/ { |
| more_clear_headers Foo; |
| proxy_pass http://127.0.0.1:$server_port; |
| } |
| --- request |
| GET /t |
| --- more_headers |
| Foo: bar |
| Bah: baz |
| --- response_body_like: 301 Moved Permanently |
| --- error_code: 301 |
| --- no_error_log |
| [error] |
| |