grntest 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +45 -0
 - data/doc/text/news.md +15 -0
 - data/lib/grntest/execution-context.rb +15 -1
 - data/lib/grntest/executors/base-executor.rb +77 -3
 - data/lib/grntest/executors/http-executor.rb +3 -12
 - data/lib/grntest/executors/standard-io-executor.rb +13 -8
 - data/lib/grntest/query-log-entry.rb +19 -0
 - data/lib/grntest/query-log-parser.rb +63 -0
 - data/lib/grntest/reporters.rb +4 -1
 - data/lib/grntest/reporters/base-reporter.rb +6 -4
 - data/lib/grntest/reporters/buffered-mark-reporter.rb +41 -0
 - data/lib/grntest/reporters/mark-reporter.rb +23 -11
 - data/lib/grntest/test-runner.rb +14 -8
 - data/lib/grntest/tester.rb +14 -4
 - data/lib/grntest/version.rb +1 -1
 - data/lib/grntest/worker.rb +4 -4
 - metadata +8 -5
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: c677198eaacb9883f7cd6ca46f7b7cf0ee6d5aea
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 8b50e54a05791eaf15370b1951eac4b831a52e31
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d8d191e4fd6029fedfa9a4b346514f280ad133266e8acb236a0c0f46ee9b35a6e8cff38e7b84c3f8d13c894ab82c20a610ed4d9c7ab1d62d2fe18552c50efa69
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 0421f9e8c25fce0adbcaa43c6503737c71c8bcd2c49f167ef57c3333eabc00a7172314599c2dcb945cf0deaf56ba80e6fa8c2fc11db02253f22cf8e1991c560a
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -219,6 +219,8 @@ Here are available `NAME` s: 
     | 
|
| 
       219 
219 
     | 
    
         
             
            * `omit`
         
     | 
| 
       220 
220 
     | 
    
         
             
            * `add-important-log-levels`
         
     | 
| 
       221 
221 
     | 
    
         
             
            * `remove-important-log-levels`
         
     | 
| 
      
 222 
     | 
    
         
            +
            * `sleep`
         
     | 
| 
      
 223 
     | 
    
         
            +
            * `collect-query-log`
         
     | 
| 
       222 
224 
     | 
    
         | 
| 
       223 
225 
     | 
    
         
             
            `ARGUMENTS...` are depends on directive. A directive doesn't require
         
     | 
| 
       224 
226 
     | 
    
         
             
            any arguments but a directive requires arguments.
         
     | 
| 
         @@ -357,6 +359,9 @@ Usage: 
     | 
|
| 
       357 
359 
     | 
    
         
             
            It copies a path from `SOURCE` to `DESTINATION`. You can use it for
         
     | 
| 
       358 
360 
     | 
    
         
             
            both file and directory. It is useful for using fixture data.
         
     | 
| 
       359 
361 
     | 
    
         | 
| 
      
 362 
     | 
    
         
            +
            You can use `#{db_path}` in `SOURCE` and `DESTINATION`. `#{db_path}`
         
     | 
| 
      
 363 
     | 
    
         
            +
            is expanded to the path of the database.
         
     | 
| 
      
 364 
     | 
    
         
            +
             
     | 
| 
       360 
365 
     | 
    
         
             
            Example:
         
     | 
| 
       361 
366 
     | 
    
         | 
| 
       362 
367 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -510,6 +515,46 @@ log_put --level debug --message "This is a message" 
     | 
|
| 
       510 
515 
     | 
    
         
             
            # No message is collected by grntest
         
     | 
| 
       511 
516 
     | 
    
         
             
            ```
         
     | 
| 
       512 
517 
     | 
    
         | 
| 
      
 518 
     | 
    
         
            +
            #### `sleep`
         
     | 
| 
      
 519 
     | 
    
         
            +
             
     | 
| 
      
 520 
     | 
    
         
            +
            Usage:
         
     | 
| 
      
 521 
     | 
    
         
            +
             
     | 
| 
      
 522 
     | 
    
         
            +
            ```
         
     | 
| 
      
 523 
     | 
    
         
            +
            #@sleep SECOND
         
     | 
| 
      
 524 
     | 
    
         
            +
            ```
         
     | 
| 
      
 525 
     | 
    
         
            +
             
     | 
| 
      
 526 
     | 
    
         
            +
            It stops execution while the specified seconds.
         
     | 
| 
      
 527 
     | 
    
         
            +
             
     | 
| 
      
 528 
     | 
    
         
            +
            Example:
         
     | 
| 
      
 529 
     | 
    
         
            +
             
     | 
| 
      
 530 
     | 
    
         
            +
            ```
         
     | 
| 
      
 531 
     | 
    
         
            +
            load --table Users
         
     | 
| 
      
 532 
     | 
    
         
            +
            [
         
     | 
| 
      
 533 
     | 
    
         
            +
            {"_key": "User1"}
         
     | 
| 
      
 534 
     | 
    
         
            +
            ]
         
     | 
| 
      
 535 
     | 
    
         
            +
            #@sleep 1.5
         
     | 
| 
      
 536 
     | 
    
         
            +
            # Run select after 1.5 sec.
         
     | 
| 
      
 537 
     | 
    
         
            +
            select Users --query _key:User1
         
     | 
| 
      
 538 
     | 
    
         
            +
            ```
         
     | 
| 
      
 539 
     | 
    
         
            +
             
     | 
| 
      
 540 
     | 
    
         
            +
            #### `collect-query-log`
         
     | 
| 
      
 541 
     | 
    
         
            +
             
     | 
| 
      
 542 
     | 
    
         
            +
            Usage:
         
     | 
| 
      
 543 
     | 
    
         
            +
             
     | 
| 
      
 544 
     | 
    
         
            +
            ```
         
     | 
| 
      
 545 
     | 
    
         
            +
            #@collect-query-log [true|false]
         
     | 
| 
      
 546 
     | 
    
         
            +
            ```
         
     | 
| 
      
 547 
     | 
    
         
            +
             
     | 
| 
      
 548 
     | 
    
         
            +
            It collects messages from query log and prints them.
         
     | 
| 
      
 549 
     | 
    
         
            +
             
     | 
| 
      
 550 
     | 
    
         
            +
            Example:
         
     | 
| 
      
 551 
     | 
    
         
            +
             
     | 
| 
      
 552 
     | 
    
         
            +
            ```
         
     | 
| 
      
 553 
     | 
    
         
            +
            #@collect-query-log true
         
     | 
| 
      
 554 
     | 
    
         
            +
            select Users --query _key:User1
         
     | 
| 
      
 555 
     | 
    
         
            +
            #@collect-query-log false
         
     | 
| 
      
 556 
     | 
    
         
            +
            ```
         
     | 
| 
      
 557 
     | 
    
         
            +
             
     | 
| 
       513 
558 
     | 
    
         
             
            ## Options
         
     | 
| 
       514 
559 
     | 
    
         | 
| 
       515 
560 
     | 
    
         
             
            Grntest has many options. You don't need to specify many of them
         
     | 
    
        data/doc/text/news.md
    CHANGED
    
    | 
         @@ -1,5 +1,20 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # News
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            ## 1.1.3: 2016-03-20
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ### Improvements
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              * Added `sleep` directive.
         
     | 
| 
      
 8 
     | 
    
         
            +
              * Added `collect-query-log` directive.
         
     | 
| 
      
 9 
     | 
    
         
            +
              * Added `buffered-mark` reporter. You can use it by
         
     | 
| 
      
 10 
     | 
    
         
            +
                `--runner=buffered-mark`.
         
     | 
| 
      
 11 
     | 
    
         
            +
              * Improved OS X support.
         
     | 
| 
      
 12 
     | 
    
         
            +
              * Supported `#{db_path}` in `copy-path` directive argument.
         
     | 
| 
      
 13 
     | 
    
         
            +
              * Supported SEGV detection on exit.
         
     | 
| 
      
 14 
     | 
    
         
            +
              * Supported `--columns` option of `load` command.
         
     | 
| 
      
 15 
     | 
    
         
            +
              * Suppressed omit logs by default. You can enable it by
         
     | 
| 
      
 16 
     | 
    
         
            +
                `--no-suppress-omit-log`.
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       3 
18 
     | 
    
         
             
            ## 1.1.2: 2015-07-08
         
     | 
| 
       4 
19 
     | 
    
         | 
| 
       5 
20 
     | 
    
         
             
            ### Improvements
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # -*- coding: utf-8 -*-
         
     | 
| 
       2 
2 
     | 
    
         
             
            #
         
     | 
| 
       3 
     | 
    
         
            -
            # Copyright (C) 2012- 
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (C) 2012-2015  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
       4 
4 
     | 
    
         
             
            #
         
     | 
| 
       5 
5 
     | 
    
         
             
            # This program is free software: you can redistribute it and/or modify
         
     | 
| 
       6 
6 
     | 
    
         
             
            # it under the terms of the GNU General Public License as published by
         
     | 
| 
         @@ -24,6 +24,7 @@ module Grntest 
     | 
|
| 
       24 
24 
     | 
    
         
             
                attr_accessor :output_type
         
     | 
| 
       25 
25 
     | 
    
         
             
                attr_accessor :on_error
         
     | 
| 
       26 
26 
     | 
    
         
             
                attr_accessor :abort_tag
         
     | 
| 
      
 27 
     | 
    
         
            +
                attr_writer :collect_query_log
         
     | 
| 
       27 
28 
     | 
    
         
             
                def initialize
         
     | 
| 
       28 
29 
     | 
    
         
             
                  @logging = true
         
     | 
| 
       29 
30 
     | 
    
         
             
                  @base_directory = Pathname(".")
         
     | 
| 
         @@ -37,12 +38,17 @@ module Grntest 
     | 
|
| 
       37 
38 
     | 
    
         
             
                  @on_error = :default
         
     | 
| 
       38 
39 
     | 
    
         
             
                  @abort_tag = nil
         
     | 
| 
       39 
40 
     | 
    
         
             
                  @omitted = false
         
     | 
| 
      
 41 
     | 
    
         
            +
                  @collect_query_log = false
         
     | 
| 
       40 
42 
     | 
    
         
             
                end
         
     | 
| 
       41 
43 
     | 
    
         | 
| 
       42 
44 
     | 
    
         
             
                def logging?
         
     | 
| 
       43 
45 
     | 
    
         
             
                  @logging
         
     | 
| 
       44 
46 
     | 
    
         
             
                end
         
     | 
| 
       45 
47 
     | 
    
         | 
| 
      
 48 
     | 
    
         
            +
                def collect_query_log?
         
     | 
| 
      
 49 
     | 
    
         
            +
                  @collect_query_log
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
       46 
52 
     | 
    
         
             
                def execute
         
     | 
| 
       47 
53 
     | 
    
         
             
                  @n_nested += 1
         
     | 
| 
       48 
54 
     | 
    
         
             
                  yield
         
     | 
| 
         @@ -62,6 +68,14 @@ module Grntest 
     | 
|
| 
       62 
68 
     | 
    
         
             
                  @log ||= File.open(log_path.to_s, "a+")
         
     | 
| 
       63 
69 
     | 
    
         
             
                end
         
     | 
| 
       64 
70 
     | 
    
         | 
| 
      
 71 
     | 
    
         
            +
                def query_log_path
         
     | 
| 
      
 72 
     | 
    
         
            +
                  @temporary_directory_path + "groonga.query.log"
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                def query_log
         
     | 
| 
      
 76 
     | 
    
         
            +
                  @query_log ||= File.open(query_log_path.to_s, "a+")
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
       65 
79 
     | 
    
         
             
                def relative_db_path
         
     | 
| 
       66 
80 
     | 
    
         
             
                  @db_path.relative_path_from(@temporary_directory_path)
         
     | 
| 
       67 
81 
     | 
    
         
             
                end
         
     | 
| 
         @@ -21,6 +21,7 @@ require "groonga/command/parser" 
     | 
|
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
            require "grntest/error"
         
     | 
| 
       23 
23 
     | 
    
         
             
            require "grntest/log-parser"
         
     | 
| 
      
 24 
     | 
    
         
            +
            require "grntest/query-log-parser"
         
     | 
| 
       24 
25 
     | 
    
         
             
            require "grntest/execution-context"
         
     | 
| 
       25 
26 
     | 
    
         
             
            require "grntest/response-parser"
         
     | 
| 
       26 
27 
     | 
    
         | 
| 
         @@ -71,7 +72,34 @@ module Grntest 
     | 
|
| 
       71 
72 
     | 
    
         
             
                    @context.result
         
     | 
| 
       72 
73 
     | 
    
         
             
                  end
         
     | 
| 
       73 
74 
     | 
    
         | 
| 
      
 75 
     | 
    
         
            +
                  def shutdown(pid)
         
     | 
| 
      
 76 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 77 
     | 
    
         
            +
                      send_command(command("shutdown"))
         
     | 
| 
      
 78 
     | 
    
         
            +
                    rescue
         
     | 
| 
      
 79 
     | 
    
         
            +
                      return false
         
     | 
| 
      
 80 
     | 
    
         
            +
                    end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                    status = nil
         
     | 
| 
      
 83 
     | 
    
         
            +
                    timeout = 1
         
     | 
| 
      
 84 
     | 
    
         
            +
                    total_sleep_time = 0
         
     | 
| 
      
 85 
     | 
    
         
            +
                    sleep_time = 0.05
         
     | 
| 
      
 86 
     | 
    
         
            +
                    loop do
         
     | 
| 
      
 87 
     | 
    
         
            +
                      _, status = Process.waitpid2(pid, Process::WNOHANG)
         
     | 
| 
      
 88 
     | 
    
         
            +
                      break if status
         
     | 
| 
      
 89 
     | 
    
         
            +
                      sleep(sleep_time)
         
     | 
| 
      
 90 
     | 
    
         
            +
                      total_sleep_time += sleep_time
         
     | 
| 
      
 91 
     | 
    
         
            +
                      return false if total_sleep_time > timeout
         
     | 
| 
      
 92 
     | 
    
         
            +
                    end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                    log_error(read_all_log) unless status.success?
         
     | 
| 
      
 95 
     | 
    
         
            +
                    true
         
     | 
| 
      
 96 
     | 
    
         
            +
                  end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
       74 
98 
     | 
    
         
             
                  private
         
     | 
| 
      
 99 
     | 
    
         
            +
                  def command(command_line)
         
     | 
| 
      
 100 
     | 
    
         
            +
                    Groonga::Command::Parser.parse(command_line)
         
     | 
| 
      
 101 
     | 
    
         
            +
                  end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
       75 
103 
     | 
    
         
             
                  def create_parser
         
     | 
| 
       76 
104 
     | 
    
         
             
                    parser = Groonga::Command::Parser.new
         
     | 
| 
       77 
105 
     | 
    
         
             
                    parser.on_command do |command|
         
     | 
| 
         @@ -127,6 +155,17 @@ module Grntest 
     | 
|
| 
       127 
155 
     | 
    
         
             
                    execute_script(Pathname(path))
         
     | 
| 
       128 
156 
     | 
    
         
             
                  end
         
     | 
| 
       129 
157 
     | 
    
         | 
| 
      
 158 
     | 
    
         
            +
                  def expand_variables(string)
         
     | 
| 
      
 159 
     | 
    
         
            +
                    string.gsub(/\#{(.+?)}/) do |matched|
         
     | 
| 
      
 160 
     | 
    
         
            +
                      case $1
         
     | 
| 
      
 161 
     | 
    
         
            +
                      when "db_path"
         
     | 
| 
      
 162 
     | 
    
         
            +
                        @context.db_path.to_s
         
     | 
| 
      
 163 
     | 
    
         
            +
                      else
         
     | 
| 
      
 164 
     | 
    
         
            +
                        matched
         
     | 
| 
      
 165 
     | 
    
         
            +
                      end
         
     | 
| 
      
 166 
     | 
    
         
            +
                    end
         
     | 
| 
      
 167 
     | 
    
         
            +
                  end
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
       130 
169 
     | 
    
         
             
                  def execute_directive_copy_path(line, content, options)
         
     | 
| 
       131 
170 
     | 
    
         
             
                    source, destination, = options
         
     | 
| 
       132 
171 
     | 
    
         
             
                    if source.nil? or destination.nil?
         
     | 
| 
         @@ -139,8 +178,8 @@ module Grntest 
     | 
|
| 
       139 
178 
     | 
    
         
             
                      end
         
     | 
| 
       140 
179 
     | 
    
         
             
                      return
         
     | 
| 
       141 
180 
     | 
    
         
             
                    end
         
     | 
| 
       142 
     | 
    
         
            -
                    source = resolve_path(Pathname(source))
         
     | 
| 
       143 
     | 
    
         
            -
                    destination = resolve_path(Pathname(destination))
         
     | 
| 
      
 181 
     | 
    
         
            +
                    source = resolve_path(Pathname(expand_variables(source)))
         
     | 
| 
      
 182 
     | 
    
         
            +
                    destination = resolve_path(Pathname(expand_variables(destination)))
         
     | 
| 
       144 
183 
     | 
    
         
             
                    FileUtils.cp_r(source.to_s, destination.to_s)
         
     | 
| 
       145 
184 
     | 
    
         
             
                  end
         
     | 
| 
       146 
185 
     | 
    
         | 
| 
         @@ -210,6 +249,15 @@ module Grntest 
     | 
|
| 
       210 
249 
     | 
    
         
             
                    level[0]
         
     | 
| 
       211 
250 
     | 
    
         
             
                  end
         
     | 
| 
       212 
251 
     | 
    
         | 
| 
      
 252 
     | 
    
         
            +
                  def execute_directive_sleep(line, content, options)
         
     | 
| 
      
 253 
     | 
    
         
            +
                    time = options[0].to_f
         
     | 
| 
      
 254 
     | 
    
         
            +
                    sleep(time) if time >= 0
         
     | 
| 
      
 255 
     | 
    
         
            +
                  end
         
     | 
| 
      
 256 
     | 
    
         
            +
             
     | 
| 
      
 257 
     | 
    
         
            +
                  def execute_directive_collect_query_log(line, content, options)
         
     | 
| 
      
 258 
     | 
    
         
            +
                    @context.collect_query_log = (options[0] == "true")
         
     | 
| 
      
 259 
     | 
    
         
            +
                  end
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
       213 
261 
     | 
    
         
             
                  def execute_directive(line, content)
         
     | 
| 
       214 
262 
     | 
    
         
             
                    command, *options = Shellwords.split(content)
         
     | 
| 
       215 
263 
     | 
    
         
             
                    case command
         
     | 
| 
         @@ -233,6 +281,10 @@ module Grntest 
     | 
|
| 
       233 
281 
     | 
    
         
             
                      execute_directive_add_important_log_levels(line, content, options)
         
     | 
| 
       234 
282 
     | 
    
         
             
                    when "remove-important-log-levels"
         
     | 
| 
       235 
283 
     | 
    
         
             
                      execute_directive_remove_important_log_levels(line, content, options)
         
     | 
| 
      
 284 
     | 
    
         
            +
                    when "sleep"
         
     | 
| 
      
 285 
     | 
    
         
            +
                      execute_directive_sleep(line, content, options)
         
     | 
| 
      
 286 
     | 
    
         
            +
                    when "collect-query-log"
         
     | 
| 
      
 287 
     | 
    
         
            +
                      execute_directive_collect_query_log(line, content, options)
         
     | 
| 
       236 
288 
     | 
    
         
             
                    else
         
     | 
| 
       237 
289 
     | 
    
         
             
                      log_input(line)
         
     | 
| 
       238 
290 
     | 
    
         
             
                      log_error("#|e| unknown directive: <#{command}>")
         
     | 
| 
         @@ -284,6 +336,7 @@ module Grntest 
     | 
|
| 
       284 
336 
     | 
    
         
             
                      type = @output_type
         
     | 
| 
       285 
337 
     | 
    
         
             
                      log_output(response)
         
     | 
| 
       286 
338 
     | 
    
         
             
                      log_error(extract_important_messages(read_all_log))
         
     | 
| 
      
 339 
     | 
    
         
            +
                      log_query_log_content(read_all_query_log)
         
     | 
| 
       287 
340 
     | 
    
         | 
| 
       288 
341 
     | 
    
         
             
                      @context.error if error_response?(response, type)
         
     | 
| 
       289 
342 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -293,6 +346,10 @@ module Grntest 
     | 
|
| 
       293 
346 
     | 
    
         
             
                    read_all_readable_content(context.log, :first_timeout => 0)
         
     | 
| 
       294 
347 
     | 
    
         
             
                  end
         
     | 
| 
       295 
348 
     | 
    
         | 
| 
      
 349 
     | 
    
         
            +
                  def read_all_query_log
         
     | 
| 
      
 350 
     | 
    
         
            +
                    read_all_readable_content(context.query_log, :first_timeout => 0)
         
     | 
| 
      
 351 
     | 
    
         
            +
                  end
         
     | 
| 
      
 352 
     | 
    
         
            +
             
     | 
| 
       296 
353 
     | 
    
         
             
                  def extract_important_messages(log)
         
     | 
| 
       297 
354 
     | 
    
         
             
                    important_messages = []
         
     | 
| 
       298 
355 
     | 
    
         
             
                    parser = LogParser.new
         
     | 
| 
         @@ -306,7 +363,7 @@ module Grntest 
     | 
|
| 
       306 
363 
     | 
    
         | 
| 
       307 
364 
     | 
    
         
             
                  def read_all_readable_content(output, options={})
         
     | 
| 
       308 
365 
     | 
    
         
             
                    content = ""
         
     | 
| 
       309 
     | 
    
         
            -
                    first_timeout = options[:first_timeout] ||  
     | 
| 
      
 366 
     | 
    
         
            +
                    first_timeout = options[:first_timeout] || 5
         
     | 
| 
       310 
367 
     | 
    
         
             
                    timeout = first_timeout
         
     | 
| 
       311 
368 
     | 
    
         
             
                    while IO.select([output], [], [], timeout)
         
     | 
| 
       312 
369 
     | 
    
         
             
                      break if output.eof?
         
     | 
| 
         @@ -329,6 +386,10 @@ module Grntest 
     | 
|
| 
       329 
386 
     | 
    
         
             
                      true
         
     | 
| 
       330 
387 
     | 
    
         
             
                    when /\Agroonga\(\) \[0x[\da-f]+\]\z/
         
     | 
| 
       331 
388 
     | 
    
         
             
                      true
         
     | 
| 
      
 389 
     | 
    
         
            +
                    when /\A\d+\s+(?:lib\S+\.dylib|\S+\.so|groonga|nginx|\?\?\?)\s+
         
     | 
| 
      
 390 
     | 
    
         
            +
                            0x[\da-f]+\s
         
     | 
| 
      
 391 
     | 
    
         
            +
                            \S+\s\+\s\d+\z/x
         
     | 
| 
      
 392 
     | 
    
         
            +
                      true
         
     | 
| 
       332 
393 
     | 
    
         
             
                    else
         
     | 
| 
       333 
394 
     | 
    
         
             
                      false
         
     | 
| 
       334 
395 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -372,6 +433,19 @@ module Grntest 
     | 
|
| 
       372 
433 
     | 
    
         
             
                    log_force(:error, content, {})
         
     | 
| 
       373 
434 
     | 
    
         
             
                  end
         
     | 
| 
       374 
435 
     | 
    
         | 
| 
      
 436 
     | 
    
         
            +
                  def log_query(content)
         
     | 
| 
      
 437 
     | 
    
         
            +
                    log_force(:query, content, {})
         
     | 
| 
      
 438 
     | 
    
         
            +
                  end
         
     | 
| 
      
 439 
     | 
    
         
            +
             
     | 
| 
      
 440 
     | 
    
         
            +
                  def log_query_log_content(content)
         
     | 
| 
      
 441 
     | 
    
         
            +
                    return unless @context.collect_query_log?
         
     | 
| 
      
 442 
     | 
    
         
            +
             
     | 
| 
      
 443 
     | 
    
         
            +
                    parser = QueryLogParser.new
         
     | 
| 
      
 444 
     | 
    
         
            +
                    parser.parse(content) do |entry|
         
     | 
| 
      
 445 
     | 
    
         
            +
                      log_query("\##{entry.mark}#{entry.message}")
         
     | 
| 
      
 446 
     | 
    
         
            +
                    end
         
     | 
| 
      
 447 
     | 
    
         
            +
                  end
         
     | 
| 
      
 448 
     | 
    
         
            +
             
     | 
| 
       375 
449 
     | 
    
         
             
                  def default_long_timeout
         
     | 
| 
       376 
450 
     | 
    
         
             
                    180
         
     | 
| 
       377 
451 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -49,22 +49,11 @@ module Grntest 
     | 
|
| 
       49 
49 
     | 
    
         
             
                    end
         
     | 
| 
       50 
50 
     | 
    
         
             
                  end
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                  def shutdown
         
     | 
| 
       53 
     | 
    
         
            -
                    begin
         
     | 
| 
       54 
     | 
    
         
            -
                      send_command(command("shutdown"))
         
     | 
| 
       55 
     | 
    
         
            -
                    rescue Error
         
     | 
| 
       56 
     | 
    
         
            -
                    end
         
     | 
| 
       57 
     | 
    
         
            -
                  end
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
52 
     | 
    
         
             
                  def create_sub_executor(context)
         
     | 
| 
       60 
53 
     | 
    
         
             
                    self.class.new(@host, @port, context)
         
     | 
| 
       61 
54 
     | 
    
         
             
                  end
         
     | 
| 
       62 
55 
     | 
    
         | 
| 
       63 
56 
     | 
    
         
             
                  private
         
     | 
| 
       64 
     | 
    
         
            -
                  def command(command_line)
         
     | 
| 
       65 
     | 
    
         
            -
                    Groonga::Command::Parser.parse(command_line)
         
     | 
| 
       66 
     | 
    
         
            -
                  end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
57 
     | 
    
         
             
                  MAX_URI_SIZE = 4096
         
     | 
| 
       69 
58 
     | 
    
         
             
                  def send_load_command(command)
         
     | 
| 
       70 
59 
     | 
    
         
             
                    lines = command.original_source.lines
         
     | 
| 
         @@ -74,7 +63,9 @@ module Grntest 
     | 
|
| 
       74 
63 
     | 
    
         | 
| 
       75 
64 
     | 
    
         
             
                    values = command.arguments.delete(:values)
         
     | 
| 
       76 
65 
     | 
    
         
             
                    if lines.size >= 2 and lines[1].start_with?("[")
         
     | 
| 
       77 
     | 
    
         
            -
                       
     | 
| 
      
 66 
     | 
    
         
            +
                      unless /\s--columns\s/ =~ lines.first
         
     | 
| 
      
 67 
     | 
    
         
            +
                        command.arguments.delete(:columns)
         
     | 
| 
      
 68 
     | 
    
         
            +
                      end
         
     | 
| 
       78 
69 
     | 
    
         
             
                      body = lines[1..-1].join
         
     | 
| 
       79 
70 
     | 
    
         
             
                    else
         
     | 
| 
       80 
71 
     | 
    
         
             
                      body = values
         
     | 
| 
         @@ -27,8 +27,8 @@ module Grntest 
     | 
|
| 
       27 
27 
     | 
    
         
             
                  end
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
                  def send_command(command)
         
     | 
| 
       30 
     | 
    
         
            -
                    command_line =  
     | 
| 
       31 
     | 
    
         
            -
                     
     | 
| 
      
 30 
     | 
    
         
            +
                    command_line = command.original_source
         
     | 
| 
      
 31 
     | 
    
         
            +
                    if !command.key?(:output_type) and @output_type
         
     | 
| 
       32 
32 
     | 
    
         
             
                      command_line = command_line.sub(/$/, " --output_type #{@output_type}")
         
     | 
| 
       33 
33 
     | 
    
         
             
                    end
         
     | 
| 
       34 
34 
     | 
    
         
             
                    begin
         
     | 
| 
         @@ -39,7 +39,7 @@ module Grntest 
     | 
|
| 
       39 
39 
     | 
    
         
             
                      message = "failed to write to groonga: <#{command_line}>: #{$!}"
         
     | 
| 
       40 
40 
     | 
    
         
             
                      raise Error.new(message)
         
     | 
| 
       41 
41 
     | 
    
         
             
                    end
         
     | 
| 
       42 
     | 
    
         
            -
                    read_output
         
     | 
| 
      
 42 
     | 
    
         
            +
                    read_output(command)
         
     | 
| 
       43 
43 
     | 
    
         
             
                  end
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         
             
                  def ensure_groonga_ready
         
     | 
| 
         @@ -53,19 +53,24 @@ module Grntest 
     | 
|
| 
       53 
53 
     | 
    
         
             
                  end
         
     | 
| 
       54 
54 
     | 
    
         | 
| 
       55 
55 
     | 
    
         
             
                  private
         
     | 
| 
       56 
     | 
    
         
            -
                  def read_output
         
     | 
| 
      
 56 
     | 
    
         
            +
                  def read_output(command)
         
     | 
| 
       57 
57 
     | 
    
         
             
                    options = {}
         
     | 
| 
       58 
     | 
    
         
            -
                     
     | 
| 
      
 58 
     | 
    
         
            +
                    if may_slow_command?(command)
         
     | 
| 
      
 59 
     | 
    
         
            +
                      options[:first_timeout] = @long_timeout
         
     | 
| 
      
 60 
     | 
    
         
            +
                    elsif command.name == "dump"
         
     | 
| 
      
 61 
     | 
    
         
            +
                      options[:first_timeout] = 0.1
         
     | 
| 
      
 62 
     | 
    
         
            +
                    end
         
     | 
| 
       59 
63 
     | 
    
         
             
                    read_all_readable_content(@output, options)
         
     | 
| 
       60 
64 
     | 
    
         
             
                  end
         
     | 
| 
       61 
65 
     | 
    
         | 
| 
       62 
66 
     | 
    
         
             
                  MAY_SLOW_COMMANDS = [
         
     | 
| 
       63 
67 
     | 
    
         
             
                    "column_create",
         
     | 
| 
       64 
     | 
    
         
            -
                    "register",
         
     | 
| 
       65 
68 
     | 
    
         
             
                    "load",
         
     | 
| 
      
 69 
     | 
    
         
            +
                    "plugin_register",
         
     | 
| 
      
 70 
     | 
    
         
            +
                    "register",
         
     | 
| 
       66 
71 
     | 
    
         
             
                  ]
         
     | 
| 
       67 
     | 
    
         
            -
                  def may_slow_command?
         
     | 
| 
       68 
     | 
    
         
            -
                    MAY_SLOW_COMMANDS.include?( 
     | 
| 
      
 72 
     | 
    
         
            +
                  def may_slow_command?(command)
         
     | 
| 
      
 73 
     | 
    
         
            +
                    MAY_SLOW_COMMANDS.include?(command.name)
         
     | 
| 
       69 
74 
     | 
    
         
             
                  end
         
     | 
| 
       70 
75 
     | 
    
         
             
                end
         
     | 
| 
       71 
76 
     | 
    
         
             
              end
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Copyright (C) 2015  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # This program is free software: you can redistribute it and/or modify
         
     | 
| 
      
 4 
     | 
    
         
            +
            # it under the terms of the GNU General Public License as published by
         
     | 
| 
      
 5 
     | 
    
         
            +
            # the Free Software Foundation, either version 3 of the License, or
         
     | 
| 
      
 6 
     | 
    
         
            +
            # (at your option) any later version.
         
     | 
| 
      
 7 
     | 
    
         
            +
            #
         
     | 
| 
      
 8 
     | 
    
         
            +
            # This program is distributed in the hope that it will be useful,
         
     | 
| 
      
 9 
     | 
    
         
            +
            # but WITHOUT ANY WARRANTY; without even the implied warranty of
         
     | 
| 
      
 10 
     | 
    
         
            +
            # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         
     | 
| 
      
 11 
     | 
    
         
            +
            # GNU General Public License for more details.
         
     | 
| 
      
 12 
     | 
    
         
            +
            #
         
     | 
| 
      
 13 
     | 
    
         
            +
            # You should have received a copy of the GNU General Public License
         
     | 
| 
      
 14 
     | 
    
         
            +
            # along with this program.  If not, see <http://www.gnu.org/licenses/>.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            module Grntest
         
     | 
| 
      
 17 
     | 
    
         
            +
              class QueryLogEntry < Struct.new(:timestamp, :mark, :message)
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,63 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Copyright (C) 2015  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # This program is free software: you can redistribute it and/or modify
         
     | 
| 
      
 4 
     | 
    
         
            +
            # it under the terms of the GNU General Public License as published by
         
     | 
| 
      
 5 
     | 
    
         
            +
            # the Free Software Foundation, either version 3 of the License, or
         
     | 
| 
      
 6 
     | 
    
         
            +
            # (at your option) any later version.
         
     | 
| 
      
 7 
     | 
    
         
            +
            #
         
     | 
| 
      
 8 
     | 
    
         
            +
            # This program is distributed in the hope that it will be useful,
         
     | 
| 
      
 9 
     | 
    
         
            +
            # but WITHOUT ANY WARRANTY; without even the implied warranty of
         
     | 
| 
      
 10 
     | 
    
         
            +
            # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         
     | 
| 
      
 11 
     | 
    
         
            +
            # GNU General Public License for more details.
         
     | 
| 
      
 12 
     | 
    
         
            +
            #
         
     | 
| 
      
 13 
     | 
    
         
            +
            # You should have received a copy of the GNU General Public License
         
     | 
| 
      
 14 
     | 
    
         
            +
            # along with this program.  If not, see <http://www.gnu.org/licenses/>.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            require "grntest/query-log-entry"
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            module Grntest
         
     | 
| 
      
 19 
     | 
    
         
            +
              class QueryLogParser
         
     | 
| 
      
 20 
     | 
    
         
            +
                def parse(log)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  log.each_line do |line|
         
     | 
| 
      
 22 
     | 
    
         
            +
                    case line
         
     | 
| 
      
 23 
     | 
    
         
            +
                    when /\A(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+)\|.+?\|(.)/
         
     | 
| 
      
 24 
     | 
    
         
            +
                      timestamp = $1
         
     | 
| 
      
 25 
     | 
    
         
            +
                      mark = $2
         
     | 
| 
      
 26 
     | 
    
         
            +
                      message = normalize_message(mark, $POSTMATCH.chomp)
         
     | 
| 
      
 27 
     | 
    
         
            +
                      entry = QueryLogEntry.new(timestamp, mark, message)
         
     | 
| 
      
 28 
     | 
    
         
            +
                      yield(entry)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    end
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                private
         
     | 
| 
      
 34 
     | 
    
         
            +
                def normalize_message(mark, message)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  case mark
         
     | 
| 
      
 36 
     | 
    
         
            +
                  when ">"
         
     | 
| 
      
 37 
     | 
    
         
            +
                    message = normalize_command(message)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  else
         
     | 
| 
      
 39 
     | 
    
         
            +
                    message = normalize_elapsed_time(message)
         
     | 
| 
      
 40 
     | 
    
         
            +
                    message = normalize_cache_content(message)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                  message
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                def normalize_command(message)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  command = Groonga::Command::Parser.parse(message)
         
     | 
| 
      
 47 
     | 
    
         
            +
                  if command.output_type == :json
         
     | 
| 
      
 48 
     | 
    
         
            +
                    command[:output_type] = nil
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
                  command.to_command_format
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                def normalize_elapsed_time(message)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  message.gsub(/\A\d{15} /, "0" * 15 + " ")
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                def normalize_cache_content(message)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  message.gsub(/\A(0{15}) (cache\()\d+(\))\z/) do
         
     | 
| 
      
 59 
     | 
    
         
            +
                    "#{$1} #{$2}0#{$3}"
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
              end
         
     | 
| 
      
 63 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/grntest/reporters.rb
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # -*- coding: utf-8 -*-
         
     | 
| 
       2 
2 
     | 
    
         
             
            #
         
     | 
| 
       3 
     | 
    
         
            -
            # Copyright (C) 2012- 
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (C) 2012-2015  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
       4 
4 
     | 
    
         
             
            #
         
     | 
| 
       5 
5 
     | 
    
         
             
            # This program is free software: you can redistribute it and/or modify
         
     | 
| 
       6 
6 
     | 
    
         
             
            # it under the terms of the GNU General Public License as published by
         
     | 
| 
         @@ -16,6 +16,7 @@ 
     | 
|
| 
       16 
16 
     | 
    
         
             
            # along with this program.  If not, see <http://www.gnu.org/licenses/>.
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
            require "grntest/reporters/mark-reporter"
         
     | 
| 
      
 19 
     | 
    
         
            +
            require "grntest/reporters/buffered-mark-reporter"
         
     | 
| 
       19 
20 
     | 
    
         
             
            require "grntest/reporters/stream-reporter"
         
     | 
| 
       20 
21 
     | 
    
         
             
            require "grntest/reporters/inplace-reporter"
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
         @@ -26,6 +27,8 @@ module Grntest 
     | 
|
| 
       26 
27 
     | 
    
         
             
                    case tester.reporter
         
     | 
| 
       27 
28 
     | 
    
         
             
                    when :mark
         
     | 
| 
       28 
29 
     | 
    
         
             
                      MarkReporter.new(tester)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    when :"buffered-mark"
         
     | 
| 
      
 31 
     | 
    
         
            +
                      BufferedMarkReporter.new(tester)
         
     | 
| 
       29 
32 
     | 
    
         
             
                    when :stream
         
     | 
| 
       30 
33 
     | 
    
         
             
                      StreamReporter.new(tester)
         
     | 
| 
       31 
34 
     | 
    
         
             
                    when :inplace
         
     | 
| 
         @@ -1,6 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
       2 
     | 
    
         
            -
            #
         
     | 
| 
       3 
     | 
    
         
            -
            # Copyright (C) 2012-2013  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
      
 1 
     | 
    
         
            +
            # Copyright (C) 2012-2015  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
       4 
2 
     | 
    
         
             
            #
         
     | 
| 
       5 
3 
     | 
    
         
             
            # This program is free software: you can redistribute it and/or modify
         
     | 
| 
       6 
4 
     | 
    
         
             
            # it under the terms of the GNU General Public License as published by
         
     | 
| 
         @@ -155,7 +153,7 @@ module Grntest 
     | 
|
| 
       155 
153 
     | 
    
         
             
                  end
         
     | 
| 
       156 
154 
     | 
    
         | 
| 
       157 
155 
     | 
    
         
             
                  def print(message)
         
     | 
| 
       158 
     | 
    
         
            -
                     
     | 
| 
      
 156 
     | 
    
         
            +
                    increment_current_column(message)
         
     | 
| 
       159 
157 
     | 
    
         
             
                    @output.print(message)
         
     | 
| 
       160 
158 
     | 
    
         
             
                  end
         
     | 
| 
       161 
159 
     | 
    
         | 
| 
         @@ -164,6 +162,10 @@ module Grntest 
     | 
|
| 
       164 
162 
     | 
    
         
             
                    @output.puts(*messages)
         
     | 
| 
       165 
163 
     | 
    
         
             
                  end
         
     | 
| 
       166 
164 
     | 
    
         | 
| 
      
 165 
     | 
    
         
            +
                  def increment_current_column(message)
         
     | 
| 
      
 166 
     | 
    
         
            +
                    @current_column += string_width(message.to_s)
         
     | 
| 
      
 167 
     | 
    
         
            +
                  end
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
       167 
169 
     | 
    
         
             
                  def reset_current_column
         
     | 
| 
       168 
170 
     | 
    
         
             
                    @current_column = 0
         
     | 
| 
       169 
171 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Copyright (C) 2015  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # This program is free software: you can redistribute it and/or modify
         
     | 
| 
      
 4 
     | 
    
         
            +
            # it under the terms of the GNU General Public License as published by
         
     | 
| 
      
 5 
     | 
    
         
            +
            # the Free Software Foundation, either version 3 of the License, or
         
     | 
| 
      
 6 
     | 
    
         
            +
            # (at your option) any later version.
         
     | 
| 
      
 7 
     | 
    
         
            +
            #
         
     | 
| 
      
 8 
     | 
    
         
            +
            # This program is distributed in the hope that it will be useful,
         
     | 
| 
      
 9 
     | 
    
         
            +
            # but WITHOUT ANY WARRANTY; without even the implied warranty of
         
     | 
| 
      
 10 
     | 
    
         
            +
            # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         
     | 
| 
      
 11 
     | 
    
         
            +
            # GNU General Public License for more details.
         
     | 
| 
      
 12 
     | 
    
         
            +
            #
         
     | 
| 
      
 13 
     | 
    
         
            +
            # You should have received a copy of the GNU General Public License
         
     | 
| 
      
 14 
     | 
    
         
            +
            # along with this program.  If not, see <http://www.gnu.org/licenses/>.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            require "grntest/reporters/mark-reporter"
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            module Grntest
         
     | 
| 
      
 19 
     | 
    
         
            +
              module Reporters
         
     | 
| 
      
 20 
     | 
    
         
            +
                class BufferedMarkReporter < MarkReporter
         
     | 
| 
      
 21 
     | 
    
         
            +
                  def initialize(tester)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    super
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @buffer = ""
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  private
         
     | 
| 
      
 27 
     | 
    
         
            +
                  def print_new_line
         
     | 
| 
      
 28 
     | 
    
         
            +
                    puts(@buffer)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    @buffer.clear
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  def print_mark(mark)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    increment_current_column(mark)
         
     | 
| 
      
 34 
     | 
    
         
            +
                    @buffer << mark
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  def flush_mark
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # -*- coding: utf-8 -*-
         
     | 
| 
       2 
2 
     | 
    
         
             
            #
         
     | 
| 
       3 
     | 
    
         
            -
            # Copyright (C) 2012- 
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (C) 2012-2015  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
       4 
4 
     | 
    
         
             
            #
         
     | 
| 
       5 
5 
     | 
    
         
             
            # This program is free software: you can redistribute it and/or modify
         
     | 
| 
       6 
6 
     | 
    
         
             
            # it under the terms of the GNU General Public License as published by
         
     | 
| 
         @@ -45,7 +45,7 @@ module Grntest 
     | 
|
| 
       45 
45 
     | 
    
         
             
                  def on_test_failure(worker, result)
         
     | 
| 
       46 
46 
     | 
    
         
             
                    synchronize do
         
     | 
| 
       47 
47 
     | 
    
         
             
                      report_test_result_mark("F", result)
         
     | 
| 
       48 
     | 
    
         
            -
                       
     | 
| 
      
 48 
     | 
    
         
            +
                      print_new_line
         
     | 
| 
       49 
49 
     | 
    
         
             
                      report_test(worker, result)
         
     | 
| 
       50 
50 
     | 
    
         
             
                      report_failure(result)
         
     | 
| 
       51 
51 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -54,7 +54,7 @@ module Grntest 
     | 
|
| 
       54 
54 
     | 
    
         
             
                  def on_test_leak(worker, result)
         
     | 
| 
       55 
55 
     | 
    
         
             
                    synchronize do
         
     | 
| 
       56 
56 
     | 
    
         
             
                      report_test_result_mark("L(#{result.n_leaked_objects})", result)
         
     | 
| 
       57 
     | 
    
         
            -
                       
     | 
| 
      
 57 
     | 
    
         
            +
                      print_new_line
         
     | 
| 
       58 
58 
     | 
    
         
             
                      report_test(worker, result)
         
     | 
| 
       59 
59 
     | 
    
         
             
                      if result.checked?
         
     | 
| 
       60 
60 
     | 
    
         
             
                        report_actual(result)
         
     | 
| 
         @@ -67,7 +67,7 @@ module Grntest 
     | 
|
| 
       67 
67 
     | 
    
         
             
                  def on_test_omission(worker, result)
         
     | 
| 
       68 
68 
     | 
    
         
             
                    synchronize do
         
     | 
| 
       69 
69 
     | 
    
         
             
                      report_test_result_mark("O", result)
         
     | 
| 
       70 
     | 
    
         
            -
                       
     | 
| 
      
 70 
     | 
    
         
            +
                      print_new_line
         
     | 
| 
       71 
71 
     | 
    
         
             
                      report_test(worker, result)
         
     | 
| 
       72 
72 
     | 
    
         
             
                      report_actual(result)
         
     | 
| 
       73 
73 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -76,7 +76,7 @@ module Grntest 
     | 
|
| 
       76 
76 
     | 
    
         
             
                  def on_test_no_check(worker, result)
         
     | 
| 
       77 
77 
     | 
    
         
             
                    synchronize do
         
     | 
| 
       78 
78 
     | 
    
         
             
                      report_test_result_mark("N", result)
         
     | 
| 
       79 
     | 
    
         
            -
                       
     | 
| 
      
 79 
     | 
    
         
            +
                      print_new_line
         
     | 
| 
       80 
80 
     | 
    
         
             
                      report_test(worker, result)
         
     | 
| 
       81 
81 
     | 
    
         
             
                      report_actual(result)
         
     | 
| 
       82 
82 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -92,23 +92,35 @@ module Grntest 
     | 
|
| 
       92 
92 
     | 
    
         
             
                  end
         
     | 
| 
       93 
93 
     | 
    
         | 
| 
       94 
94 
     | 
    
         
             
                  def on_finish(result)
         
     | 
| 
       95 
     | 
    
         
            -
                     
     | 
| 
       96 
     | 
    
         
            -
                     
     | 
| 
      
 95 
     | 
    
         
            +
                    print_new_line
         
     | 
| 
      
 96 
     | 
    
         
            +
                    print_new_line
         
     | 
| 
       97 
97 
     | 
    
         
             
                    report_summary(result)
         
     | 
| 
       98 
98 
     | 
    
         
             
                  end
         
     | 
| 
       99 
99 
     | 
    
         | 
| 
       100 
100 
     | 
    
         
             
                  private
         
     | 
| 
       101 
101 
     | 
    
         
             
                  def report_test_result_mark(mark, result)
         
     | 
| 
       102 
102 
     | 
    
         
             
                    if @term_width < @current_column + mark.bytesize
         
     | 
| 
       103 
     | 
    
         
            -
                       
     | 
| 
      
 103 
     | 
    
         
            +
                      print_new_line
         
     | 
| 
       104 
104 
     | 
    
         
             
                    end
         
     | 
| 
       105 
     | 
    
         
            -
                     
     | 
| 
      
 105 
     | 
    
         
            +
                    print_mark(colorize(mark, result))
         
     | 
| 
       106 
106 
     | 
    
         
             
                    if @term_width <= @current_column
         
     | 
| 
       107 
     | 
    
         
            -
                       
     | 
| 
      
 107 
     | 
    
         
            +
                      print_new_line
         
     | 
| 
       108 
108 
     | 
    
         
             
                    else
         
     | 
| 
       109 
     | 
    
         
            -
                       
     | 
| 
      
 109 
     | 
    
         
            +
                      flush_mark
         
     | 
| 
       110 
110 
     | 
    
         
             
                    end
         
     | 
| 
       111 
111 
     | 
    
         
             
                  end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                  def print_new_line
         
     | 
| 
      
 114 
     | 
    
         
            +
                    puts
         
     | 
| 
      
 115 
     | 
    
         
            +
                  end
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
                  def print_mark(mark)
         
     | 
| 
      
 118 
     | 
    
         
            +
                    print(mark)
         
     | 
| 
      
 119 
     | 
    
         
            +
                  end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                  def flush_mark
         
     | 
| 
      
 122 
     | 
    
         
            +
                    @output.flush
         
     | 
| 
      
 123 
     | 
    
         
            +
                  end
         
     | 
| 
       112 
124 
     | 
    
         
             
                end
         
     | 
| 
       113 
125 
     | 
    
         
             
              end
         
     | 
| 
       114 
126 
     | 
    
         
             
            end
         
     | 
    
        data/lib/grntest/test-runner.rb
    CHANGED
    
    | 
         @@ -204,7 +204,11 @@ module Grntest 
     | 
|
| 
       204 
204 
     | 
    
         
             
                                                                   groonga_output,
         
     | 
| 
       205 
205 
     | 
    
         
             
                                                                   context)
         
     | 
| 
       206 
206 
     | 
    
         
             
                      executor.ensure_groonga_ready
         
     | 
| 
       207 
     | 
    
         
            -
                       
     | 
| 
      
 207 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 208 
     | 
    
         
            +
                        yield(executor)
         
     | 
| 
      
 209 
     | 
    
         
            +
                      ensure
         
     | 
| 
      
 210 
     | 
    
         
            +
                        pid = nil if executor.shutdown(pid)
         
     | 
| 
      
 211 
     | 
    
         
            +
                      end
         
     | 
| 
       208 
212 
     | 
    
         
             
                    end
         
     | 
| 
       209 
213 
     | 
    
         
             
                  ensure
         
     | 
| 
       210 
214 
     | 
    
         
             
                    Process.waitpid(pid) if pid
         
     | 
| 
         @@ -284,6 +288,7 @@ call chdir("#{context.temporary_directory_path}") 
     | 
|
| 
       284 
288 
     | 
    
         
             
                  command_line = command_command_line(@tester.groonga, context,
         
     | 
| 
       285 
289 
     | 
    
         
             
                                                      spawn_options)
         
     | 
| 
       286 
290 
     | 
    
         
             
                  command_line << "--log-path=#{context.log_path}"
         
     | 
| 
      
 291 
     | 
    
         
            +
                  command_line << "--query-log-path=#{context.query_log_path}"
         
     | 
| 
       287 
292 
     | 
    
         
             
                  command_line << "--working-directory=#{context.temporary_directory_path}"
         
     | 
| 
       288 
293 
     | 
    
         
             
                  command_line
         
     | 
| 
       289 
294 
     | 
    
         
             
                end
         
     | 
| 
         @@ -338,7 +343,7 @@ call chdir("#{context.temporary_directory_path}") 
     | 
|
| 
       338 
343 
     | 
    
         
             
                      end
         
     | 
| 
       339 
344 
     | 
    
         
             
                      yield(executor)
         
     | 
| 
       340 
345 
     | 
    
         
             
                    ensure
         
     | 
| 
       341 
     | 
    
         
            -
                      executor.shutdown
         
     | 
| 
      
 346 
     | 
    
         
            +
                      pid = nil if executor.shutdown(pid)
         
     | 
| 
       342 
347 
     | 
    
         
             
                      if wait_groonga_http_shutdown(pid_file_path, shutdown_wait_timeout)
         
     | 
| 
       343 
348 
     | 
    
         
             
                        pid = nil if wait_pid(pid, shutdown_wait_timeout)
         
     | 
| 
       344 
349 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -450,6 +455,7 @@ http { 
     | 
|
| 
       450 
455 
     | 
    
         
             
                         location /d/ {
         
     | 
| 
       451 
456 
     | 
    
         
             
                                 groonga_database #{context.relative_db_path};
         
     | 
| 
       452 
457 
     | 
    
         
             
                                 groonga_log_path #{context.log_path};
         
     | 
| 
      
 458 
     | 
    
         
            +
                                 groonga_query_log_path #{context.query_log_path};
         
     | 
| 
       453 
459 
     | 
    
         
             
                                 groonga on;
         
     | 
| 
       454 
460 
     | 
    
         
             
                        }
         
     | 
| 
       455 
461 
     | 
    
         
             
                 }
         
     | 
| 
         @@ -487,6 +493,8 @@ http { 
     | 
|
| 
       487 
493 
     | 
    
         
             
                      normalized_result << normalize_output(content, options)
         
     | 
| 
       488 
494 
     | 
    
         
             
                    when :error
         
     | 
| 
       489 
495 
     | 
    
         
             
                      normalized_result << normalize_error(content)
         
     | 
| 
      
 496 
     | 
    
         
            +
                    when :query
         
     | 
| 
      
 497 
     | 
    
         
            +
                      normalized_result << normalize_raw_content(content)
         
     | 
| 
       490 
498 
     | 
    
         
             
                    when :n_leaked_objects
         
     | 
| 
       491 
499 
     | 
    
         
             
                      result.n_leaked_objects = content
         
     | 
| 
       492 
500 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -534,6 +542,8 @@ http { 
     | 
|
| 
       534 
542 
     | 
    
         
             
                  when "xml"
         
     | 
| 
       535 
543 
     | 
    
         
             
                    normalized_xml = normalize_output_xml(content, options)
         
     | 
| 
       536 
544 
     | 
    
         
             
                    normalize_raw_content(normalized_xml)
         
     | 
| 
      
 545 
     | 
    
         
            +
                  when "groonga-command"
         
     | 
| 
      
 546 
     | 
    
         
            +
                    normalize_raw_content(content.chomp)
         
     | 
| 
       537 
547 
     | 
    
         
             
                  else
         
     | 
| 
       538 
548 
     | 
    
         
             
                    normalize_raw_content(content)
         
     | 
| 
       539 
549 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -578,14 +588,10 @@ http { 
     | 
|
| 
       578 
588 
     | 
    
         | 
| 
       579 
589 
     | 
    
         
             
                def normalize_path_in_error_message(content)
         
     | 
| 
       580 
590 
     | 
    
         
             
                  case content
         
     | 
| 
       581 
     | 
    
         
            -
                  when /\A( 
     | 
| 
      
 591 
     | 
    
         
            +
                  when /\A(.*: fopen: failed to open mruby script file: )<(.+?)>?\z/
         
     | 
| 
       582 
592 
     | 
    
         
             
                    pre = $1
         
     | 
| 
       583 
593 
     | 
    
         
             
                    path = $2
         
     | 
| 
       584 
     | 
    
         
            -
                     
     | 
| 
       585 
     | 
    
         
            -
                    normalized_path = File.basename(path)
         
     | 
| 
       586 
     | 
    
         
            -
                    post = post.gsub(/\[\d+\]\z/, "[?]")
         
     | 
| 
       587 
     | 
    
         
            -
                    post = "" unless /[\)\]]\z/ =~ post
         
     | 
| 
       588 
     | 
    
         
            -
                    "#{pre}<#{normalized_path}>'#{post}"
         
     | 
| 
      
 594 
     | 
    
         
            +
                    "#{pre}<PATH>"
         
     | 
| 
       589 
595 
     | 
    
         
             
                  else
         
     | 
| 
       590 
596 
     | 
    
         
             
                    content
         
     | 
| 
       591 
597 
     | 
    
         
             
                  end
         
     | 
    
        data/lib/grntest/tester.rb
    CHANGED
    
    | 
         @@ -1,6 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
       2 
     | 
    
         
            -
            #
         
     | 
| 
       3 
     | 
    
         
            -
            # Copyright (C) 2012-2015  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
      
 1 
     | 
    
         
            +
            # Copyright (C) 2012-2016  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
       4 
2 
     | 
    
         
             
            #
         
     | 
| 
       5 
3 
     | 
    
         
             
            # This program is free software: you can redistribute it and/or modify
         
     | 
| 
       6 
4 
     | 
    
         
             
            # it under the terms of the GNU General Public License as published by
         
     | 
| 
         @@ -116,7 +114,7 @@ module Grntest 
     | 
|
| 
       116 
114 
     | 
    
         
             
                      diff_option_is_specified = true
         
     | 
| 
       117 
115 
     | 
    
         
             
                    end
         
     | 
| 
       118 
116 
     | 
    
         | 
| 
       119 
     | 
    
         
            -
                    available_reporters = [:mark, :stream, :inplace]
         
     | 
| 
      
 117 
     | 
    
         
            +
                    available_reporters = [:mark, :"buffered-mark", :stream, :inplace]
         
     | 
| 
       120 
118 
     | 
    
         
             
                    available_reporter_labels = available_reporters.join(", ")
         
     | 
| 
       121 
119 
     | 
    
         
             
                    parser.on("--reporter=REPORTER", available_reporters,
         
     | 
| 
       122 
120 
     | 
    
         
             
                              "Report test result by REPORTER",
         
     | 
| 
         @@ -188,6 +186,12 @@ module Grntest 
     | 
|
| 
       188 
186 
     | 
    
         
             
                      tester.stop_on_failure = boolean
         
     | 
| 
       189 
187 
     | 
    
         
             
                    end
         
     | 
| 
       190 
188 
     | 
    
         | 
| 
      
 189 
     | 
    
         
            +
                    parser.on("--no-suppress-omit-log",
         
     | 
| 
      
 190 
     | 
    
         
            +
                              "Suppress omit logs",
         
     | 
| 
      
 191 
     | 
    
         
            +
                              "(#{tester.suppress_omit_log?})") do |boolean|
         
     | 
| 
      
 192 
     | 
    
         
            +
                      tester.suppress_omit_log = boolean
         
     | 
| 
      
 193 
     | 
    
         
            +
                    end
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
       191 
195 
     | 
    
         
             
                    parser.on("--output=OUTPUT",
         
     | 
| 
       192 
196 
     | 
    
         
             
                              "Output to OUTPUT",
         
     | 
| 
       193 
197 
     | 
    
         
             
                              "(stdout)") do |output|
         
     | 
| 
         @@ -228,6 +232,7 @@ module Grntest 
     | 
|
| 
       228 
232 
     | 
    
         
             
                attr_writer :valgrind_gen_suppressions
         
     | 
| 
       229 
233 
     | 
    
         
             
                attr_writer :reporter, :keep_database, :use_color
         
     | 
| 
       230 
234 
     | 
    
         
             
                attr_writer :stop_on_failure
         
     | 
| 
      
 235 
     | 
    
         
            +
                attr_writer :suppress_omit_log
         
     | 
| 
       231 
236 
     | 
    
         
             
                attr_reader :test_patterns, :test_suite_patterns
         
     | 
| 
       232 
237 
     | 
    
         
             
                attr_reader :exclude_test_patterns, :exclude_test_suite_patterns
         
     | 
| 
       233 
238 
     | 
    
         
             
                def initialize
         
     | 
| 
         @@ -245,6 +250,7 @@ module Grntest 
     | 
|
| 
       245 
250 
     | 
    
         
             
                  @keep_database = false
         
     | 
| 
       246 
251 
     | 
    
         
             
                  @use_color = nil
         
     | 
| 
       247 
252 
     | 
    
         
             
                  @stop_on_failure = false
         
     | 
| 
      
 253 
     | 
    
         
            +
                  @suppress_omit_log = true
         
     | 
| 
       248 
254 
     | 
    
         
             
                  @test_patterns = []
         
     | 
| 
       249 
255 
     | 
    
         
             
                  @test_suite_patterns = []
         
     | 
| 
       250 
256 
     | 
    
         
             
                  @exclude_test_patterns = []
         
     | 
| 
         @@ -289,6 +295,10 @@ module Grntest 
     | 
|
| 
       289 
295 
     | 
    
         
             
                  @stop_on_failure
         
     | 
| 
       290 
296 
     | 
    
         
             
                end
         
     | 
| 
       291 
297 
     | 
    
         | 
| 
      
 298 
     | 
    
         
            +
                def suppress_omit_log?
         
     | 
| 
      
 299 
     | 
    
         
            +
                  @suppress_omit_log
         
     | 
| 
      
 300 
     | 
    
         
            +
                end
         
     | 
| 
      
 301 
     | 
    
         
            +
             
     | 
| 
       292 
302 
     | 
    
         
             
                def valgrind_gen_suppressions?
         
     | 
| 
       293 
303 
     | 
    
         
             
                  @valgrind_gen_suppressions
         
     | 
| 
       294 
304 
     | 
    
         
             
                end
         
     | 
    
        data/lib/grntest/version.rb
    CHANGED
    
    
    
        data/lib/grntest/worker.rb
    CHANGED
    
    | 
         @@ -1,6 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
       2 
     | 
    
         
            -
            #
         
     | 
| 
       3 
     | 
    
         
            -
            # Copyright (C) 2012-2013  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
      
 1 
     | 
    
         
            +
            # Copyright (C) 2012-2016  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
       4 
2 
     | 
    
         
             
            #
         
     | 
| 
       5 
3 
     | 
    
         
             
            # This program is free software: you can redistribute it and/or modify
         
     | 
| 
       6 
4 
     | 
    
         
             
            # it under the terms of the GNU General Public License as published by
         
     | 
| 
         @@ -148,7 +146,9 @@ module Grntest 
     | 
|
| 
       148 
146 
     | 
    
         
             
                def on_test_omission(result)
         
     | 
| 
       149 
147 
     | 
    
         
             
                  @status = "omitted"
         
     | 
| 
       150 
148 
     | 
    
         
             
                  @result.on_test_omission
         
     | 
| 
       151 
     | 
    
         
            -
                  @ 
     | 
| 
      
 149 
     | 
    
         
            +
                  unless @tester.suppress_omit_log?
         
     | 
| 
      
 150 
     | 
    
         
            +
                    @reporter.on_test_omission(self, result)
         
     | 
| 
      
 151 
     | 
    
         
            +
                  end
         
     | 
| 
       152 
152 
     | 
    
         
             
                end
         
     | 
| 
       153 
153 
     | 
    
         | 
| 
       154 
154 
     | 
    
         
             
                def on_test_no_check(result)
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: grntest
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.3
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Kouhei Sutou
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date:  
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2016-03-20 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: json
         
     | 
| 
         @@ -163,8 +163,11 @@ files: 
     | 
|
| 
       163 
163 
     | 
    
         
             
            - lib/grntest/executors/standard-io-executor.rb
         
     | 
| 
       164 
164 
     | 
    
         
             
            - lib/grntest/log-entry.rb
         
     | 
| 
       165 
165 
     | 
    
         
             
            - lib/grntest/log-parser.rb
         
     | 
| 
      
 166 
     | 
    
         
            +
            - lib/grntest/query-log-entry.rb
         
     | 
| 
      
 167 
     | 
    
         
            +
            - lib/grntest/query-log-parser.rb
         
     | 
| 
       166 
168 
     | 
    
         
             
            - lib/grntest/reporters.rb
         
     | 
| 
       167 
169 
     | 
    
         
             
            - lib/grntest/reporters/base-reporter.rb
         
     | 
| 
      
 170 
     | 
    
         
            +
            - lib/grntest/reporters/buffered-mark-reporter.rb
         
     | 
| 
       168 
171 
     | 
    
         
             
            - lib/grntest/reporters/inplace-reporter.rb
         
     | 
| 
       169 
172 
     | 
    
         
             
            - lib/grntest/reporters/mark-reporter.rb
         
     | 
| 
       170 
173 
     | 
    
         
             
            - lib/grntest/reporters/stream-reporter.rb
         
     | 
| 
         @@ -198,14 +201,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       198 
201 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       199 
202 
     | 
    
         
             
            requirements: []
         
     | 
| 
       200 
203 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       201 
     | 
    
         
            -
            rubygems_version: 2. 
     | 
| 
      
 204 
     | 
    
         
            +
            rubygems_version: 2.5.1
         
     | 
| 
       202 
205 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       203 
206 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       204 
207 
     | 
    
         
             
            summary: Grntest is a testing framework for Groonga. You can write a test for Groonga
         
     | 
| 
       205 
208 
     | 
    
         
             
              by writing Groonga commands and expected result.
         
     | 
| 
       206 
209 
     | 
    
         
             
            test_files:
         
     | 
| 
       207 
     | 
    
         
            -
            - test/test 
     | 
| 
      
 210 
     | 
    
         
            +
            - test/run-test.rb
         
     | 
| 
       208 
211 
     | 
    
         
             
            - test/executors/test-base-executor.rb
         
     | 
| 
       209 
212 
     | 
    
         
             
            - test/executors/test-standard-io-executor.rb
         
     | 
| 
       210 
     | 
    
         
            -
            - test/ 
     | 
| 
      
 213 
     | 
    
         
            +
            - test/test-log-parser.rb
         
     | 
| 
       211 
214 
     | 
    
         
             
            has_rdoc: 
         
     |