mirror of
				https://github.com/openresty/openresty.git
				synced 2024-10-13 00:29:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			386 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			386 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| # vim:set ft= ts=4 sw=4 et fdm=marker:
 | |
| 
 | |
| use Test::Nginx::Socket::Lua;
 | |
| 
 | |
| #worker_connections(1014);
 | |
| #master_process_enabled(1);
 | |
| log_level('debug');
 | |
| 
 | |
| repeat_each(1);
 | |
| 
 | |
| plan tests => repeat_each() * (blocks() * 5);
 | |
| 
 | |
| #no_diff();
 | |
| no_long_string();
 | |
| 
 | |
| run_tests();
 | |
| 
 | |
| __DATA__
 | |
| 
 | |
| === TEST 1: use system resolver
 | |
| --- config
 | |
|     resolver local=on ipv6=off;
 | |
|     resolver_timeout 5s;
 | |
| 
 | |
|     location /t {
 | |
|         content_by_lua_block {
 | |
|             local sock = ngx.socket.tcp()
 | |
|             local ok, err = sock:connect("openresty.org", 80)
 | |
|             if not ok then
 | |
|                 ngx.say("failed to connect to openresty.org: ", err)
 | |
|                 return
 | |
|             end
 | |
|             ngx.say("successfully connected to openresty.org")
 | |
|             sock:close()
 | |
|         }
 | |
|     }
 | |
| --- request
 | |
| GET /t
 | |
| --- response_body
 | |
| successfully connected to openresty.org
 | |
| --- no_error_log
 | |
| [error]
 | |
| [crit]
 | |
| --- error_log
 | |
| parsed a resolver: "
 | |
| 
 | |
| 
 | |
| 
 | |
| === TEST 2: malformed file
 | |
| --- config
 | |
|     resolver local=../html/resolv.conf ipv6=off;
 | |
|     resolver_timeout 5s;
 | |
| 
 | |
|     location /t {
 | |
|         content_by_lua_block {
 | |
|             local sock = ngx.socket.tcp()
 | |
|             local ok, err = sock:connect("openresty.org", 80)
 | |
|             if not ok then
 | |
|                 ngx.say("failed to connect to openresty.org: ", err)
 | |
|                 return
 | |
|             end
 | |
|             ngx.say("successfully connected to openresty.org")
 | |
|             sock:close()
 | |
|         }
 | |
|     }
 | |
| --- user_files eval
 | |
| ">>> resolv.conf
 | |
| nameser 8.8.8.8"
 | |
| --- request
 | |
| GET /t
 | |
| --- must_die
 | |
| --- error_log
 | |
| no name servers defined
 | |
| --- no_error_log
 | |
| [error]
 | |
| [crit]
 | |
| parsed a resolver: "
 | |
| --- skip_nginx: 5: < 1.15.1
 | |
| 
 | |
| 
 | |
| 
 | |
| === TEST 3: disabled
 | |
| --- config
 | |
|     resolver local=off ipv6=off;
 | |
|     resolver_timeout 5s;
 | |
| 
 | |
|     location /t {
 | |
|         content_by_lua_block {
 | |
|             local sock = ngx.socket.tcp()
 | |
|             local ok, err = sock:connect("openresty.org", 80)
 | |
|             if not ok then
 | |
|                 ngx.say("failed to connect to openresty.org: ", err)
 | |
|                 return
 | |
|             end
 | |
|             ngx.say("successfully connected to openresty.org")
 | |
|             sock:close()
 | |
|         }
 | |
|     }
 | |
| --- user_files eval
 | |
| ">>> resolv.conf
 | |
| nameser 8.8.8.8"
 | |
| --- request
 | |
| GET /t
 | |
| --- must_die
 | |
| --- error_log
 | |
| no name servers defined
 | |
| --- no_error_log
 | |
| [error]
 | |
| [crit]
 | |
| parsed a resolver: "
 | |
| --- skip_nginx: 5: < 1.15.1
 | |
| 
 | |
| 
 | |
| 
 | |
| === TEST 4: multiple resolvers
 | |
| --- config
 | |
|     resolver local=../html/resolv.conf ipv6=off;
 | |
|     resolver_timeout 5s;
 | |
| 
 | |
|     location /t {
 | |
|         content_by_lua_block {
 | |
|             local sock = ngx.socket.tcp()
 | |
|             local ok, err = sock:connect("openresty.org", 80)
 | |
|             if not ok then
 | |
|                 ngx.say("failed to connect to openresty.org: ", err)
 | |
|                 return
 | |
|             end
 | |
|             ngx.say("successfully connected to openresty.org")
 | |
|             sock:close()
 | |
|         }
 | |
|     }
 | |
| --- user_files eval
 | |
| ">>> resolv.conf
 | |
| domain example.com
 | |
| nameserver 8.8.8.8
 | |
| nameserver 8.8.4.4"
 | |
| --- request
 | |
| GET /t
 | |
| --- response_body
 | |
| successfully connected to openresty.org
 | |
| --- no_error_log
 | |
| [error]
 | |
| [crit]
 | |
| --- grep_error_log eval: qr/parsed a resolver: ".+"/
 | |
| --- grep_error_log_out
 | |
| parsed a resolver: "8.8.8.8"
 | |
| parsed a resolver: "8.8.4.4"
 | |
| 
 | |
| 
 | |
| 
 | |
| === TEST 5: CRLF
 | |
| --- config
 | |
|     resolver local=../html/resolv.conf ipv6=off;
 | |
|     resolver_timeout 5s;
 | |
| 
 | |
|     location /t {
 | |
|         content_by_lua_block {
 | |
|             local sock = ngx.socket.tcp()
 | |
|             local ok, err = sock:connect("openresty.org", 80)
 | |
|             if not ok then
 | |
|                 ngx.say("failed to connect to openresty.org: ", err)
 | |
|                 return
 | |
|             end
 | |
|             ngx.say("successfully connected to openresty.org")
 | |
|             sock:close()
 | |
|         }
 | |
|     }
 | |
| --- user_files eval
 | |
| ">>> resolv.conf
 | |
| domain example.com\r\nnameserver 8.8.8.8\r\nnameserver 8.8.4.4"
 | |
| --- request
 | |
| GET /t
 | |
| --- response_body
 | |
| successfully connected to openresty.org
 | |
| --- no_error_log
 | |
| [error]
 | |
| [crit]
 | |
| --- grep_error_log eval: qr/parsed a resolver: ".+"/
 | |
| --- grep_error_log_out
 | |
| parsed a resolver: "8.8.8.8"
 | |
| parsed a resolver: "8.8.4.4"
 | |
| 
 | |
| 
 | |
| 
 | |
| === TEST 6: CR only, with comments
 | |
| --- config
 | |
|     resolver local=../html/resolv.conf ipv6=off;
 | |
|     resolver_timeout 5s;
 | |
| 
 | |
|     location /t {
 | |
|         content_by_lua_block {
 | |
|             local sock = ngx.socket.tcp()
 | |
|             local ok, err = sock:connect("openresty.org", 80)
 | |
|             if not ok then
 | |
|                 ngx.say("failed to connect to openresty.org: ", err)
 | |
|                 return
 | |
|             end
 | |
|             ngx.say("successfully connected to openresty.org")
 | |
|             sock:close()
 | |
|         }
 | |
|     }
 | |
| --- user_files eval
 | |
| ">>> resolv.conf
 | |
| #domain example.com\rnameserver 8.8.8.8\rnameserver 8.8.4.4"
 | |
| --- request
 | |
| GET /t
 | |
| --- response_body
 | |
| successfully connected to openresty.org
 | |
| --- no_error_log
 | |
| [error]
 | |
| [crit]
 | |
| --- grep_error_log eval: qr/parsed a resolver: ".+"/
 | |
| --- grep_error_log_out
 | |
| parsed a resolver: "8.8.8.8"
 | |
| parsed a resolver: "8.8.4.4"
 | |
| 
 | |
| 
 | |
| 
 | |
| === TEST 7: spaces and tabs before and after nameserver
 | |
| --- config
 | |
|     resolver local=../html/resolv.conf ipv6=off;
 | |
|     resolver_timeout 5s;
 | |
| 
 | |
|     location /t {
 | |
|         content_by_lua_block {
 | |
|             local sock = ngx.socket.tcp()
 | |
|             local ok, err = sock:connect("openresty.org", 80)
 | |
|             if not ok then
 | |
|                 ngx.say("failed to connect to openresty.org: ", err)
 | |
|                 return
 | |
|             end
 | |
|             ngx.say("successfully connected to openresty.org")
 | |
|             sock:close()
 | |
|         }
 | |
|     }
 | |
| --- user_files eval
 | |
| ">>> resolv.conf
 | |
| domain example.com
 | |
|   \t \t  \tnameserver \t   \t 8.8.8.8
 | |
|  \t  \t   \tnameserver\t   \t8.8.4.4"
 | |
| --- request
 | |
| GET /t
 | |
| --- response_body
 | |
| successfully connected to openresty.org
 | |
| --- no_error_log
 | |
| [error]
 | |
| [crit]
 | |
| --- grep_error_log eval: qr/parsed a resolver: ".+"/
 | |
| --- grep_error_log_out
 | |
| parsed a resolver: "8.8.8.8"
 | |
| parsed a resolver: "8.8.4.4"
 | |
| 
 | |
| 
 | |
| 
 | |
| === TEST 8: MAXNS is respected (in standard Glibc it is 3)
 | |
| --- config
 | |
|     resolver local=../html/resolv.conf ipv6=off;
 | |
|     resolver_timeout 5s;
 | |
| 
 | |
|     location /t {
 | |
|         content_by_lua_block {
 | |
|             local sock = ngx.socket.tcp()
 | |
|             local ok, err = sock:connect("openresty.org", 80)
 | |
|             if not ok then
 | |
|                 ngx.say("failed to connect to openresty.org: ", err)
 | |
|                 return
 | |
|             end
 | |
|             ngx.say("successfully connected to openresty.org")
 | |
|             sock:close()
 | |
|         }
 | |
|     }
 | |
| --- user_files eval
 | |
| ">>> resolv.conf
 | |
| domain example.com
 | |
| nameserver 8.8.8.8
 | |
| nameserver 8.8.4.4
 | |
| nameserver 208.67.222.222
 | |
| nameserver 208.67.220.220"
 | |
| --- request
 | |
| GET /t
 | |
| --- response_body
 | |
| successfully connected to openresty.org
 | |
| --- no_error_log
 | |
| [error]
 | |
| [crit]
 | |
| --- grep_error_log eval: qr/parsed a resolver: ".+"/
 | |
| --- grep_error_log_out
 | |
| parsed a resolver: "8.8.8.8"
 | |
| parsed a resolver: "8.8.4.4"
 | |
| parsed a resolver: "208.67.222.222"
 | |
| 
 | |
| 
 | |
| 
 | |
| === TEST 9: IPv6 is supported
 | |
| --- config
 | |
|     resolver local=../html/resolv.conf ipv6=off;
 | |
|     resolver_timeout 5s;
 | |
| 
 | |
|     location = /t {
 | |
|         content_by_lua_block {
 | |
|             ngx.say("done")
 | |
|         }
 | |
|     }
 | |
| --- user_files eval
 | |
| ">>> resolv.conf
 | |
| domain example.com
 | |
| nameserver 2001:4860:4860::8888
 | |
| nameserver 2001:4860:4860::8844"
 | |
| --- request
 | |
| GET /t
 | |
| --- response_body
 | |
| done
 | |
| --- no_error_log
 | |
| [crit]
 | |
| [error]
 | |
| --- grep_error_log eval: qr/parsed a resolver: ".+"/
 | |
| --- grep_error_log_out
 | |
| parsed a resolver: "[2001:4860:4860::8888]"
 | |
| parsed a resolver: "[2001:4860:4860::8844]"
 | |
| 
 | |
| 
 | |
| 
 | |
| === TEST 10: IPv6 with malformed and long address
 | |
| --- config
 | |
|     resolver local=../html/resolv.conf ipv6=off;
 | |
|     resolver_timeout 5s;
 | |
| 
 | |
|     location = /t {
 | |
|         content_by_lua_block {
 | |
|             ngx.say("done")
 | |
|         }
 | |
|     }
 | |
| --- user_files eval
 | |
| ">>> resolv.conf
 | |
| domain example.com
 | |
| nameserver 2001:4860:4860::8888:2001:4860:4860::8888:2001
 | |
| nameserver 2001:4860:4860::8844"
 | |
| --- request
 | |
| GET /t
 | |
| --- response_body
 | |
| done
 | |
| --- no_error_log
 | |
| [crit]
 | |
| [error]
 | |
| --- must_die
 | |
| --- error_log
 | |
| IPv6 resolver address is too long: "2001:4860:4860::8888:2001:4860:4860::8888:2001"
 | |
| unable to parse local resolver
 | |
| 
 | |
| 
 | |
| 
 | |
| === TEST 11: new line at the end of the file
 | |
| --- config
 | |
|     resolver local=../html/resolv.conf ipv6=off;
 | |
|     resolver_timeout 5s;
 | |
| 
 | |
|     location /t {
 | |
|         content_by_lua_block {
 | |
|             local sock = ngx.socket.tcp()
 | |
|             local ok, err = sock:connect("openresty.org", 80)
 | |
|             if not ok then
 | |
|                 ngx.say("failed to connect to openresty.org: ", err)
 | |
|                 return
 | |
|             end
 | |
|             ngx.say("successfully connected to openresty.org")
 | |
|             sock:close()
 | |
|         }
 | |
|     }
 | |
| --- user_files eval
 | |
| ">>> resolv.conf
 | |
| domain example.com
 | |
| nameserver 8.8.8.8
 | |
| nameserver 8.8.4.4
 | |
| "
 | |
| --- request
 | |
| GET /t
 | |
| --- response_body
 | |
| successfully connected to openresty.org
 | |
| --- no_error_log
 | |
| [error]
 | |
| [crit]
 | |
| --- grep_error_log eval: qr/parsed a resolver: ".+"/
 | |
| --- grep_error_log_out
 | |
| parsed a resolver: "8.8.8.8"
 | |
| parsed a resolver: "8.8.4.4"
 |