[Groonga-commit] ranguba/chupa-text at 8a845cf [master] http-server: add error handling

Back to archive index
Kouhei Sutou null+****@clear*****
Thu Mar 28 11:27:30 JST 2019


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>


More information about the Groonga-commit mailing list
Back to archive index