diff options
Diffstat (limited to 'test/test_ssl.rb')
-rw-r--r-- | test/test_ssl.rb | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/test/test_ssl.rb b/test/test_ssl.rb index 172d8e4..fe7e09e 100644 --- a/test/test_ssl.rb +++ b/test/test_ssl.rb @@ -63,12 +63,21 @@ AQjjxMXhwULlmuR/K+WwlaZPiLIBYalLAZQ7ZbOPeVkJ8ePao0eLAgEC def test_ssl_basic err, cfg, host, port = @err, Yahns::Config.new, @srv.addr[3], @srv.addr[1] + insecure = TCPServer.new(ENV["TEST_HOST"] || "127.0.0.1", 0) ctx = srv_ctx raw = File.read(__FILE__) pid = mkserver(cfg) do + ENV["YAHNS_FD"] += ",#{insecure.fileno.to_s}" cfg.instance_eval do ru = lambda do |env| - case env['PATH_INFO'] + case path_info = env['PATH_INFO'] + when '/rack.url_scheme', '/HTTPS' + s = env[path_info[1..-1]] # remove leading slash + s = s.inspect if s.nil? + [ 200, { + 'Content-Length' => s.bytesize.to_s, + 'Content-Type'=>'text/plain', + }, [ s ] ] when '/static' f = File.open(__FILE__) [ 200, { @@ -80,19 +89,36 @@ AQjjxMXhwULlmuR/K+WwlaZPiLIBYalLAZQ7ZbOPeVkJ8ePao0eLAgEC [ 200, {'Content-Length'=>'2'}, ['HI'] ] end end - app(:rack, ru) { listen "#{host}:#{port}", ssl_ctx: ctx } + app(:rack, ru) { + listen "#{host}:#{port}", ssl_ctx: ctx + listen "#{insecure.addr[3]}:#{insecure.addr[1]}" + } logger(Logger.new(err.path)) end end client = ssl_client(host, port) - client.write("GET / HTTP/1.1\r\nHost: example.com\r\n\r\n") buf = ''.dup - Timeout.timeout(60) do - buf << client.readpartial(111) until buf =~ /HI\z/ + { '/' => 'HI', + '/rack.url_scheme' => 'https', + '/HTTPS' => 'on' + }.each do |path, exp| + client.write("GET #{path} HTTP/1.1\r\nHost: example.com\r\n\r\n") + buf.clear + re = /#{Regexp.escape(exp)}\z/ + Timeout.timeout(60) do + buf << client.readpartial(111) until buf =~ re + end + head, body = buf.split("\r\n\r\n", 2) + assert_equal exp, body + assert_match %r{\AHTTP/1\.\d 200 OK\r\n}, head + end + + Net::HTTP.start(insecure.addr[3], insecure.addr[1]) do |h| + res = h.get('/rack.url_scheme') + assert_equal 'http', res.body + res = h.get('/HTTPS') + assert_equal 'nil', res.body end - head, body = buf.split("\r\n\r\n", 2) - assert_equal "HI", body - assert_match %r{\AHTTP/1\.\d 200 OK\r\n}, head # read static file client.write("GET /static HTTP/1.1\r\nHost: example.com\r\n\r\n") @@ -109,6 +135,7 @@ AQjjxMXhwULlmuR/K+WwlaZPiLIBYalLAZQ7ZbOPeVkJ8ePao0eLAgEC assert_equal "HI", body assert_match %r{\AHTTP/1\.\d 200 OK\r\n}, head ensure + insecure.close if insecure client.close if client quit_wait(pid) end |