Kouhei Sutou 2019-03-28 11:27:30 +0900 (Thu, 28 Mar 2019) Revision: 8a845cff47b1b4ec3da42fee9436bef862a15fc2 https://github.com/ranguba/chupa-text/commit/8a845cff47b1b4ec3da42fee9436bef862a15fc2 Message: http-server: add error handling Modified files: lib/chupa-text/decomposers/http-server.rb test/decomposers/test-http-server.rb Modified: lib/chupa-text/decomposers/http-server.rb (+23 -1) =================================================================== --- lib/chupa-text/decomposers/http-server.rb 2019-03-27 17:31:00 +0900 (fde562c) +++ lib/chupa-text/decomposers/http-server.rb 2019-03-28 11:27:30 +0900 (4f698cc) @@ -15,11 +15,14 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA require "net/http" +require "pp" require "uri" module ChupaText module Decomposers class HTTPServer < Decomposer + include Loggable + registry.register("http-server", self) @@default_url = nil @@ -74,7 +77,21 @@ module ChupaText ], "multipart/form-data") response = http.request(request) - # TODO: Check response + unless response.is_a?(Net::HTTPOK) + error do + message = "#{log_tag} Failed to process data in server: " + message << "#{@url}: " + message << "#{response.code}: #{response.message.strip}\n" + case response.content_type + when "application/json" + PP.pp(JSON.parse(response.body), message) + else + message << response.body + end + message + end + break + end extracted = JSON.parse(response.body) (extracted["texts"] || []).each do |text| text_data = TextData.new(text["body"], source_data: data) @@ -87,6 +104,11 @@ module ChupaText end end end + + private + def log_tag + "[decomposer][http-server]" + end end end end Modified: test/decomposers/test-http-server.rb (+39 -20) =================================================================== --- test/decomposers/test-http-server.rb 2019-03-27 17:31:00 +0900 (ec2c226) +++ test/decomposers/test-http-server.rb 2019-03-28 11:27:30 +0900 (6696971) @@ -33,9 +33,11 @@ class TestDecomposersHTTPServer < Test::Unit::TestCase @server = WEBrick::HTTPServer.new(Port: @port, Logger: logger, AccessLog: []) + @response_status = 200 @server.mount_proc(@path) do |request, response| - response["Content-Type"] = "application/json" - response.body = JSON.generate(@extracted) + response.status = @response_status + response.content_type = "application/json" + response.body = JSON.generate(@response) end @server_thread = Thread.new do @server.start @@ -51,24 +53,24 @@ Ruby,ChupaText @input_path = "/tmp/hello.csv" @extracted_text = @input_data.gsub(/,/, "\t") @extracted_path = @input_path.gsub(/\.csv\z/, ".txt") - @extracted = { - "mime-type" => @input_mime_type, - "uri" => "file://#{@input_path}", - "path" => @input_path, - "size" => @input_data.bytesize, - "texts" => [ - { - "mime-type" => "text/plain", - "uri" => "file://#{@extracted_path}", - "path" => @extracted_path, - "size" => @extracted_text.bytesize, - "source-mime-types" => [ - @input_mime_type, - ], - "body" => @extracted_text, - }, - ], - } + @response = { + "mime-type" => @input_mime_type, + "uri" => "file://#{@input_path}", + "path" => @input_path, + "size" => @input_data.bytesize, + "texts" => [ + { + "mime-type" => "text/plain", + "uri" => "file://#{@extracted_path}", + "path" => @extracted_path, + "size" => @extracted_text.bytesize, + "source-mime-types" => [ + @input_mime_type, + ], + "body" => @extracted_text, + }, + ], + } end @@ -91,6 +93,23 @@ Ruby,ChupaText decompose.collect(&:body)) end + def test_invalid + @response_status = 404 + messages = capture_log do + assert_equal([], decompose.collect(&:body)) + end + assert_equal([ + [ + :error, + "[decomposer][http-server] " + + "Failed to process data in server: " + + "#{@server_url}: " + + "#{@response_status}: Not Found", + ], + ], + messages) + end + def test_default_url ChupaText::Decomposers::HTTPServer.default_url = @server_url @decomposer = ChupaText::Decomposers::HTTPServer.new({}) -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20190328/7b0e2199/attachment-0001.html>