From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.9 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: yahns-public@yhbt.net Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 046BC1FD7D for ; Tue, 3 Mar 2015 07:59:35 +0000 (UTC) From: Eric Wong To: yahns-public@yhbt.net Subject: [PATCH 3/3] extras/proxy_pass: flesh out upload support + tests Date: Tue, 3 Mar 2015 07:59:30 +0000 Message-Id: <1425369570-28427-4-git-send-email-e@80x24.org> In-Reply-To: <1425369570-28427-1-git-send-email-e@80x24.org> References: <1425369570-28427-1-git-send-email-e@80x24.org> List-Id: This module will probably become an official part of yahns soon, so finally add tests for this module. --- extras/proxy_pass.rb | 9 ++------- test/test_extras_proxy_pass.rb | 24 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/extras/proxy_pass.rb b/extras/proxy_pass.rb index de6a2b1..0bec4ee 100644 --- a/extras/proxy_pass.rb +++ b/extras/proxy_pass.rb @@ -135,12 +135,7 @@ class ProxyPass # :nodoc: end def call(env) - case request_method = env["REQUEST_METHOD"] - when "GET", "HEAD" # OK - else - return [ 405, [%w(Content-Length 0), %w(Content-Length 0)], [] ] - end - + request_method = env['REQUEST_METHOD'] req = Rack::Request.new(env) path = @path.gsub(/\$(\w+)/) { req.__send__($1.to_sym) } req = "#{request_method} #{path} HTTP/1.1\r\n" \ @@ -204,7 +199,7 @@ class ProxyPass # :nodoc: buf.replace("#{buf.size.to_s(16)}\r\n#{buf}\r\n") ures.req_write(buf, @timeout) end - ures.req_write("0\r\n\r\n") + ures.req_write("0\r\n\r\n", @timeout) else # common if we hit uploads while input.read(16384, buf) ures.req_write(buf, @timeout) diff --git a/test/test_extras_proxy_pass.rb b/test/test_extras_proxy_pass.rb index 513e574..8842683 100644 --- a/test/test_extras_proxy_pass.rb +++ b/test/test_extras_proxy_pass.rb @@ -59,6 +59,8 @@ class TestExtrasProxyPass < Testcase end end + gplv3 = File.open('COPYING') + Net::HTTP.start(host, port) do |http| res = http.request(Net::HTTP::Get.new('/')) assert_equal 200, res.code.to_i @@ -69,9 +71,29 @@ class TestExtrasProxyPass < Testcase assert_equal n, res['Content-Length'].to_i assert_nil res.body - res = http.put(Net::HTTP::Put.new('/')) + # chunked encoding + req = Net::HTTP::Put.new('/') + req.body_stream = gplv3 + req.content_type = 'application/octet-stream' + req['Transfer-Encoding'] = 'chunked' + res = http.request(req) + gplv3.rewind + assert_equal gplv3.read, res.body + assert_equal 201, res.code.to_i + + # normal content-length + gplv3.rewind + req = Net::HTTP::Put.new('/') + req.body_stream = gplv3 + req.content_type = 'application/octet-stream' + req.content_length = gplv3.size + res = http.request(req) + gplv3.rewind + assert_equal gplv3.read, res.body + assert_equal 201, res.code.to_i end ensure + gplv3.close if gplv3 quit_wait pid quit_wait pid2 end -- EW