[Groonga-commit] groonga/grntest [master] Add omitted status

Back to archive index

Kouhei Sutou null+****@clear*****
Wed Nov 21 11:36:07 JST 2012


Kouhei Sutou	2012-11-21 11:36:07 +0900 (Wed, 21 Nov 2012)

  New Revision: cb875fd40ec51c0a53e4a87b3eb308b692247767
  https://github.com/groonga/grntest/commit/cb875fd40ec51c0a53e4a87b3eb308b692247767

  Log:
    Add omitted status
    
    With "#@on-error omit", the script is aborted when an error is
    occurred. The rest commands are not ran.

  Modified files:
    lib/grntest/tester.rb

  Modified: lib/grntest/tester.rb (+142 -39)
===================================================================
--- lib/grntest/tester.rb    2012-11-19 15:41:22 +0900 (ff42c10)
+++ lib/grntest/tester.rb    2012-11-21 11:36:07 +0900 (dab1b2b)
@@ -407,13 +407,14 @@ module Grntest
 
     class WorkerResult < Result
       attr_reader :n_tests, :n_passed_tests, :n_leaked_tests
-      attr_reader :n_not_checked_tests
+      attr_reader :n_omitted_tests, :n_not_checked_tests
       attr_reader :failed_tests
       def initialize
         super
         @n_tests = 0
         @n_passed_tests = 0
         @n_leaked_tests = 0
+        @n_omitted_tests = 0
         @n_not_checked_tests = 0
         @failed_tests = []
       end
@@ -438,6 +439,10 @@ module Grntest
         @n_leaked_tests += 1
       end
 
+      def test_omitted
+        @n_omitted_tests += 1
+      end
+
       def test_not_checked
         @n_not_checked_tests += 1
       end
@@ -523,6 +528,12 @@ module Grntest
         @reporter.leaked_test(self, result)
       end
 
+      def omitted_test(result)
+        @status = "omitted"
+        @result.test_omitted
+        @reporter.omitted_test(self, result)
+      end
+
       def not_checked_test(result)
         @status = "not checked"
         @result.test_not_checked
@@ -571,6 +582,10 @@ module Grntest
         collect_count(:n_leaked_tests)
       end
 
+      def n_omitted_tests
+        collect_count(:n_omitted_tests)
+      end
+
       def n_not_checked_tests
         collect_count(:n_not_checked_tests)
       end
@@ -660,6 +675,7 @@ module Grntest
     class TestResult < Result
       attr_accessor :worker_id, :test_name
       attr_accessor :expected, :actual, :n_leaked_objects
+      attr_writer :omitted
       def initialize(worker)
         super()
         @worker_id = worker.id
@@ -667,9 +683,12 @@ module Grntest
         @actual = nil
         @expected = nil
         @n_leaked_objects = 0
+        @omitted = false
       end
 
       def status
+        return :omitted if omitted?
+
         if @expected
           if @actual == @expected
             if @n_leaked_objects.zero?
@@ -688,6 +707,51 @@ module Grntest
           end
         end
       end
+
+      def omitted?
+        @omitted
+      end
+    end
+
+    class ResponseParser
+      class << self
+        def parse(content, type)
+          parser = new(type)
+          parser.parse(content)
+        end
+      end
+
+      def initialize(type)
+        @type = type
+      end
+
+      def parse(content)
+        case @type
+        when "json", "msgpack"
+          parse_result(content.chomp)
+        else
+          content
+        end
+      end
+
+      def parse_result(result)
+        case @type
+        when "json"
+          begin
+            JSON.parse(result)
+          rescue JSON::ParserError
+            raise ParseError.new(@type, result, $!.message)
+          end
+        when "msgpack"
+          begin
+            MessagePack.unpack(result.chomp)
+          rescue MessagePack::UnpackError, NoMemoryError
+            raise ParseError.new(@type, result, $!.message)
+          end
+        else
+          raise ParseError.new(@type, result, "unknown type")
+        end
+      end
     end
 
     class TestRunner
@@ -698,7 +762,6 @@ module Grntest
         @worker = worker
         @max_n_columns = MAX_N_COLUMNS
         @id = nil
-        @on_error = :default
       end
 
       def run
@@ -707,7 +770,7 @@ module Grntest
         @worker.start_test
         result = TestResult.new(@worker)
         result.measure do
-          result.actual = execute_groonga_script
+          execute_groonga_script(result)
         end
         normalize_actual_result(result)
         result.expected = read_expected_result
@@ -716,16 +779,14 @@ module Grntest
           @worker.pass_test(result)
           remove_reject_file
         when :failure
-          if @on_error == :omit
-            @worker.not_checked_test(result)
-          else
-            @worker.fail_test(result)
-            output_reject_file(result.actual)
-            succeeded = false
-          end
+          @worker.fail_test(result)
+          output_reject_file(result.actual)
+          succeeded = false
         when :leaked
           @worker.leaked_test(result)
           succeeded = false
+        when :omitted
+          @worker.omitted_test(result)
         else
           @worker.not_checked_test(result)
           output_actual_file(result.actual)
@@ -736,7 +797,7 @@ module Grntest
       end
 
       private
-      def execute_groonga_script
+      def execute_groonga_script(result)
         create_temporary_directory do |directory_path|
           if****@teste*****_path
             db_path = Pathname(@tester.database_path).expand_path
@@ -754,10 +815,10 @@ module Grntest
           context.output_type =****@teste*****_type
           run_groonga(context) do |executor|
             executor.execute(test_script_path)
-            @on_error = context.on_error
           end
           check_memory_leak(context)
-          context.result
+          result.omitted = context.omitted?
+          result.actual = context.result
         end
       end
 
@@ -787,11 +848,14 @@ module Grntest
           create_empty_database(context.db_path.to_s)
         end
 
-        case****@teste*****
-        when :stdio
-          run_groonga_stdio(context, &block)
-        when :http
-          run_groonga_http(context, &block)
+        catch do |tag|
+          context.abort_tag = tag
+          case****@teste*****
+          when :stdio
+            run_groonga_stdio(context, &block)
+          when :http
+            run_groonga_http(context, &block)
+          end
         end
       end
 
@@ -1028,7 +1092,7 @@ EOF
           status = nil
           values = nil
           begin
-            status, *values = parse_result(content.chomp, type)
+            status, *values = ResponseParser.parse(content.chomp, type)
           rescue ParseError
             return $!.message
           end
@@ -1044,25 +1108,6 @@ EOF
         end
       end
 
-      def parse_result(result, type)
-        case type
-        when "json"
-          begin
-            JSON.parse(result)
-          rescue JSON::ParserError
-            raise ParseError.new(type, result, $!.message)
-          end
-        when "msgpack"
-          begin
-            MessagePack.unpack(result.chomp)
-          rescue MessagePack::UnpackError, NoMemoryError
-            raise ParseError.new(type, result, $!.message)
-          end
-        else
-          raise ParseError.new(type, result, "unknown type")
-        end
-      end
-
       def normalize_status(status)
         return_code, started_time, elapsed_time, *rest = status
         _ = started_time = elapsed_time # for suppress warnings
@@ -1142,6 +1187,7 @@ EOF
         attr_accessor :result
         attr_accessor :output_type
         attr_accessor :on_error
+        attr_accessor :abort_tag
         def initialize
           @logging = true
           @base_directory = Pathname(".")
@@ -1153,6 +1199,8 @@ EOF
           @output_type = "json"
           @log = nil
           @on_error = :default
+          @abort_tag = nil
+          @omitted = false
         end
 
         def logging?
@@ -1181,6 +1229,22 @@ EOF
         def relative_db_path
           @db_path.relative_path_from(@temporary_directory_path)
         end
+
+        def omitted?
+          @omitted
+        end
+
+        def error
+          case @on_error
+          when :omit
+            @omitted = true
+            throw @abort_tag
+          end
+        end
+      end
+
+      module ReturnCode
+        SUCCESS = 0
       end
 
       attr_reader :context
@@ -1428,8 +1492,12 @@ EOF
       end
 
       def execute_command(command)
-        log_output(send_command(command))
+        response = send_command(command)
+        type = @output_type
+        log_output(response)
         log_error(read_error_log)
+
+        @context.error if error_response?(response, type)
       end
 
       def read_error_log
@@ -1467,6 +1535,18 @@ EOF
         message.start_with?("/")
       end
 
+      def error_response?(response, type)
+        status = nil
+        begin
+          status, = ResponseParser.parse(response, type)
+        rescue ParseError
+          return false
+        end
+
+        return_code, = status
+        return_code != ReturnCode::SUCCESS
+      end
+
       def log(tag, content, options={})
         return unles****@conte*****?
         log_force(tag, content, options)
@@ -1701,6 +1781,7 @@ EOF
           "passes",
           "failures",
           "leaked",
+          "omitted",
           "!checked",
         ]
         "  " + ((["%-9s"] * items.size).join(" | ") % items) + " |"
@@ -1713,6 +1794,7 @@ EOF
           "%9d" % result.n_passed_tests,
           "%9d" % result.n_failed_tests,
           "%9d" % result.n_leaked_tests,
+          "%9d" % result.n_omitted_tests,
           "%9d" % result.n_not_checked_tests,
         ]
         "  " + items.join(" | ") + " |"
@@ -2042,6 +2124,15 @@ EOF
         end
       end
 
+      def omitted_test(worker, result)
+        synchronize do
+          report_test_result_mark("O", result)
+          puts
+          report_test(worker, result)
+          report_actual(result)
+        end
+      end
+
       def not_checked_test(worker, result)
         synchronize do
           report_test_result_mark("N", result)
@@ -2118,6 +2209,11 @@ EOF
         report_test_result(result, worker.status)
       end
 
+      def omitted_test(worker, result)
+        report_test_result(result, worker.status)
+        report_actual(result)
+      end
+
       def not_checked_test(worker, result)
         report_test_result(result, worker.status)
         report_actual(result)
@@ -2178,6 +2274,13 @@ EOF
         end
       end
 
+      def omitted_test(worker, result)
+        redraw do
+          report_test(worker, result)
+          report_actual(result)
+        end
+      end
+
       def not_checked_test(worker, result)
         redraw do
           report_test(worker, result)
-------------- next part --------------
HTML����������������������������...
Télécharger 



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