drntest 1.1.0 → 1.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 04d9acd495e58d18289127e4bb88eb63b2a4ef6d
4
- data.tar.gz: 233acd50bd676565e1ec6e0151184912d8068b8a
3
+ metadata.gz: 2b3b80ccd126e2d0a6a7ad3e382dba7b649e8bdd
4
+ data.tar.gz: 357a79d56578bbcd180923738cb4347b939b1da7
5
5
  SHA512:
6
- metadata.gz: 414223a7360b5f2502f9ea5da7ca759bfee4d8216e05ab6688ceb0a796b0f8da97e1dc1b8086ff82bdbc01e283f0e181ae4dff35be14e26f97e8a21a72a87b18
7
- data.tar.gz: cbd23eb74bf5ae7bf7991d5b382cf453cd220ed02cfa882cc659a6fe1da562eec1595c7522d7c32590a446a26a3923e8ec1ec37a51574a2f45f3bdcc23d0c842
6
+ metadata.gz: 6be667ad7d2f5cc435c094c598290e70f91711c846daa547fe68351972b2084aff707b0ad3558fa59dfe154f8a67d4442bf8f88b65391e07e45cc689bb273ccf
7
+ data.tar.gz: 4e89a601e6f3f91a71eaeb488d0155fa8a27a07a2d7e4f9fdfe50e8aedec952914acce61ea8ada086c9458da253b89a0724d2a143d96e7dff7243fa55e56a42c
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  # -*- mode: ruby; coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2013 Droonga Project
3
+ # Copyright (C) 2013-2014 Droonga Project
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
@@ -17,8 +17,8 @@
17
17
 
18
18
  task :default => :test
19
19
 
20
- require "rubygems"
21
20
  require "bundler/gem_helper"
21
+ require "packnga"
22
22
 
23
23
  base_dir = File.join(File.dirname(__FILE__))
24
24
 
@@ -30,6 +30,11 @@ end
30
30
  helper.install
31
31
  spec = helper.gemspec
32
32
 
33
+ Packnga::DocumentTask.new(spec) do |task|
34
+ task.original_language = "en"
35
+ task.translate_languages = ["ja"]
36
+ end
37
+
33
38
  desc "Run tests"
34
39
  task :test do
35
40
  # No test
data/drntest.gemspec CHANGED
@@ -42,8 +42,10 @@ Gem::Specification.new do |spec|
42
42
 
43
43
  spec.add_runtime_dependency("json")
44
44
  spec.add_runtime_dependency("yajl-ruby")
45
- spec.add_runtime_dependency("droonga-client", ">= 0.1.0")
45
+ spec.add_runtime_dependency("droonga-client", ">= 0.1.1")
46
46
 
47
47
  spec.add_development_dependency("bundler")
48
48
  spec.add_development_dependency("rake")
49
+ spec.add_development_dependency("packnga")
50
+ spec.add_development_dependency("kramdown")
49
51
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 Droonga Project
1
+ # Copyright (C) 2014 Droonga Project
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -14,8 +14,27 @@
14
14
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
15
 
16
16
  module Drntest
17
- module Path
18
- SUITE = "suite"
19
- CONFIG = "config"
17
+ class Configuration
18
+ attr_accessor :port, :host, :tag
19
+ attr_accessor :base_path, :engine_config
20
+ attr_accessor :fluentd, :fluentd_options
21
+
22
+ def initialize
23
+ @port = 24224
24
+ @host = "localhost"
25
+ @tag = "droonga"
26
+ @base_path = Pathname(Dir.pwd)
27
+ @engine_config = "default"
28
+ @fluentd = "fluentd"
29
+ @fluentd_options = []
30
+ end
31
+
32
+ def suite_path
33
+ @base_path + "suite"
34
+ end
35
+
36
+ def engine_config_path
37
+ @base_path + "config" + @engine_config
38
+ end
20
39
  end
21
40
  end
@@ -0,0 +1,136 @@
1
+ # Copyright (C) 2014 Droonga Project
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 "json"
17
+ require "yajl"
18
+ require "pathname"
19
+ require "fileutils"
20
+
21
+ module Drntest
22
+ class Engine
23
+ def initialize(config)
24
+ @config = config
25
+ end
26
+
27
+ def start
28
+ prepare
29
+ setup
30
+ end
31
+
32
+ def stop
33
+ teardown
34
+ end
35
+
36
+ def config_file
37
+ @config.engine_config_path + "fluentd.conf"
38
+ end
39
+
40
+ def catalog_file
41
+ @config.engine_config_path + "catalog.json"
42
+ end
43
+
44
+ private
45
+ def prepare
46
+ if catalog_file.exist?
47
+ catalog_json = JSON.parse(catalog_file.read, :symbolize_names => true)
48
+ zone = catalog_json[:zones].first
49
+ /\A([^:]+):(\d+)\/(.+)\z/ =~ zone
50
+ @config.host = "localhost" # $1
51
+ @config.port = $2.to_i
52
+ @config.tag = $3
53
+ end
54
+ end
55
+
56
+ def setup
57
+ return unless temporary?
58
+
59
+ setup_temporary_dir
60
+
61
+ temporary_config = temporary_dir + "fluentd.conf"
62
+ FileUtils.cp(config_file, temporary_config)
63
+ temporary_catalog = temporary_dir + "catalog.json"
64
+ FileUtils.cp(catalog_file, temporary_catalog)
65
+
66
+ command = [
67
+ @config.fluentd,
68
+ "--config", temporary_config.to_s,
69
+ *@config.fluentd_options,
70
+ ]
71
+ env = {
72
+ "DROONGA_CATALOG" => temporary_catalog.to_s,
73
+ }
74
+ options = {
75
+ :chdir => temporary_dir.to_s,
76
+ STDERR => STDOUT,
77
+ }
78
+ arguments = [env, *command]
79
+ arguments << options
80
+ @pid = Process.spawn(*arguments)
81
+
82
+ wait_until_ready
83
+ end
84
+
85
+ def teardown
86
+ return unless temporary?
87
+
88
+ Process.kill(:TERM, @pid)
89
+ Process.wait(@pid)
90
+
91
+ teardown_temporary_dir
92
+ end
93
+
94
+ def setup_temporary_dir
95
+ tmpfs = Pathname("/run/shm")
96
+ if tmpfs.directory? and tmpfs.writable?
97
+ FileUtils.rm_rf(temporary_base_dir)
98
+ FileUtils.ln_s(tmpfs.to_s, temporary_base_dir.to_s)
99
+ end
100
+ FileUtils.rm_rf(temporary_dir)
101
+ FileUtils.mkdir_p(temporary_dir)
102
+ end
103
+
104
+ def teardown_temporary_dir
105
+ FileUtils.rm_rf(temporary_dir.to_s)
106
+ end
107
+
108
+ def temporary_base_dir
109
+ @config.base_path + "tmp"
110
+ end
111
+
112
+ def temporary_dir
113
+ temporary_base_dir + "drntest"
114
+ end
115
+
116
+ def temporary?
117
+ @config.fluentd && config_file.exist?
118
+ end
119
+
120
+ def ready?
121
+ begin
122
+ socket = TCPSocket.new(@config.host, @config.port)
123
+ socket.close
124
+ true
125
+ rescue Errno::ECONNREFUSED
126
+ false
127
+ end
128
+ end
129
+
130
+ def wait_until_ready
131
+ until ready?
132
+ sleep 1
133
+ end
134
+ end
135
+ end
136
+ end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 Droonga Project
1
+ # Copyright (C) 2013-2014 Droonga Project
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -24,28 +24,30 @@ module Drntest
24
24
  return @response if @response.nil?
25
25
 
26
26
  normalized_response = @response.dup
27
- normalize_envelope!(normalized_response)
28
- normalize_body!(normalized_response)
27
+ normalize_fluent_message!(normalized_response)
28
+ normalize_droonga_message!(normalized_response[2])
29
29
  normalized_response
30
30
  end
31
31
 
32
32
  private
33
- def normalize_envelope!(normalized_response)
33
+ def normalize_fluent_message!(fluent_message)
34
34
  normalized_start_time = 0
35
- normalized_response[1] = normalized_start_time
35
+ fluent_message[1] = normalized_start_time
36
36
  end
37
37
 
38
- def normalize_body!(normalized_response)
38
+ def normalize_droonga_message!(droonga_message)
39
+ normalize_droonga_message_envelope!(droonga_message)
40
+ normalize_droonga_message_body!(droonga_message["body"])
41
+ end
42
+
43
+ def normalize_droonga_message_body!(body)
39
44
  return unless groonga_command?
40
- begin
41
- normalize_groonga_command_response!(normalized_response[2])
42
- rescue StandardError => error
43
- p error
44
- end
45
+ normalize_groonga_command_response!(body)
45
46
  end
46
47
 
47
48
  GROONGA_COMMANDS = [
48
49
  "table_create",
50
+ "table_remove",
49
51
  "column_create",
50
52
  "select",
51
53
  ]
@@ -53,8 +55,26 @@ module Drntest
53
55
  GROONGA_COMMANDS.include?(@request["type"])
54
56
  end
55
57
 
58
+ def normalize_droonga_message_envelope!(message)
59
+ normalized_in_reply_to = "request-id"
60
+ in_reply_to = message["inReplyTo"]
61
+ message["inReplyTo"] = normalized_in_reply_to if in_reply_to
62
+
63
+ errors = message["errors"]
64
+ message["errors"] = normalize_errors(errors) if errors
65
+ end
66
+
67
+ def normalize_errors(errors)
68
+ normalized_errors = {}
69
+ error_details = errors.values
70
+ errors.keys.each_with_index do |source, index|
71
+ normalized_errors["sources#{index}"] = error_details[index]
72
+ end
73
+ normalized_errors
74
+ end
75
+
56
76
  def normalize_groonga_command_response!(response)
57
- normalize_groonga_command_header!(response["body"][0])
77
+ normalize_groonga_command_header!(response[0])
58
78
  end
59
79
 
60
80
  def normalize_groonga_command_header!(header)
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 Droonga Project
1
+ # Copyright (C) 2013-2014 Droonga Project
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -20,15 +20,13 @@ require "drntest/response-normalizer"
20
20
 
21
21
  module Drntest
22
22
  class TestExecutor
23
- attr_reader :owner, :test_path
24
-
25
- def initialize(owner, test_path)
26
- @owner = owner
23
+ def initialize(config, test_path)
24
+ @config = config
27
25
  @test_path = test_path
28
26
  end
29
27
 
30
28
  def execute
31
- Droonga::Client.open(tag: owner.tag, port: owner.port) do |client|
29
+ Droonga::Client.open(tag: @config.tag, port: @config.port) do |client|
32
30
  context = Context.new(client)
33
31
  operations.each do |operation|
34
32
  context.execute(operation)
@@ -40,7 +38,7 @@ module Drntest
40
38
 
41
39
  private
42
40
  def operations
43
- loader = TestLoader.new(@owner, @test_path)
41
+ loader = TestLoader.new(@config, @test_path)
44
42
  loader.load
45
43
  end
46
44
 
@@ -80,11 +78,23 @@ module Drntest
80
78
 
81
79
  def execute_request(request)
82
80
  if @logging
83
- response = @client.connection.execute(request)
84
- @responses << normalize_response(request, response)
81
+ request_process = @client.request(request) do |response|
82
+ begin
83
+ @responses << normalize_response(request, response)
84
+ rescue
85
+ @responses << {
86
+ "error" => {
87
+ "message" => "failed to normalize response",
88
+ "detail" => "#{$!.message} (#{$!.class})",
89
+ "backtrace" => $!.backtrace,
90
+ "response" => response,
91
+ },
92
+ }
93
+ end
94
+ end
95
+ request_process.wait
85
96
  else
86
- @requests << @client.connection.execute(request,
87
- :connect_timeout => 2) do
97
+ @requests << @client.request(request) do
88
98
  end
89
99
  end
90
100
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 Droonga Project
1
+ # Copyright (C) 2013-2014 Droonga Project
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -18,10 +18,8 @@ require "drntest/directive"
18
18
 
19
19
  module Drntest
20
20
  class TestLoader
21
- attr_reader :owner, :test_path
22
-
23
- def initialize(owner, test_path)
24
- @owner = owner
21
+ def initialize(config, test_path)
22
+ @config = config
25
23
  @test_path = test_path
26
24
  end
27
25
 
@@ -33,7 +31,7 @@ module Drntest
33
31
  def resolve_relative_path(path)
34
32
  path = path.to_s
35
33
  path = path[2..-1] if path[0..1] == "./"
36
- Pathname(path).expand_path(@owner.base_path)
34
+ Pathname(path).expand_path(@config.base_path)
37
35
  end
38
36
 
39
37
  def load_test_file(path)
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 Droonga Project
1
+ # Copyright (C) 2013-2014 Droonga Project
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -15,27 +15,24 @@
15
15
 
16
16
  module Drntest
17
17
  class TestResults
18
- attr_accessor :name, :actuals, :expecteds
18
+ attr_accessor :name, :actuals, :expecteds, :errors
19
19
 
20
20
  def initialize(name)
21
21
  @name = name
22
22
  @actuals = []
23
23
  @expecteds = []
24
+ @errors = []
24
25
  end
25
26
 
26
27
  def status
27
- unless @actuals.empty?
28
- unless @expecteds.empty?
29
- if @actuals == @expecteds
30
- :success
31
- else
32
- :failure
33
- end
34
- else
35
- :not_checked
36
- end
28
+ return :error unless @errors.empty?
29
+ return :no_response if @actuals.empty?
30
+ return :not_checked if @expecteds.empty?
31
+
32
+ if @actuals == @expecteds
33
+ :success
37
34
  else
38
- :no_response
35
+ :failure
39
36
  end
40
37
  end
41
38
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 Droonga Project
1
+ # Copyright (C) 2013-2014 Droonga Project
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -19,138 +19,40 @@ require "tempfile"
19
19
  require "pp"
20
20
  require "fileutils"
21
21
 
22
- require "drntest/path"
23
22
  require "drntest/test-results"
24
23
  require "drntest/test-executor"
25
24
  require "drntest/json-loader"
25
+ require "drntest/engine"
26
26
 
27
27
  module Drntest
28
28
  class TestRunner
29
- attr_reader :owner, :base_path, :target_path
30
-
31
- def initialize(owner, target)
32
- @owner = owner
33
- @base_path = Pathname(owner.base_path)
29
+ def initialize(config, target)
30
+ @config = config
34
31
  @target_path = Pathname(target)
32
+ @engine = Engine.new(@config)
35
33
  end
36
34
 
37
35
  def run
38
36
  print "#{@target_path}: "
39
- prepare
40
- setup
37
+ @engine.start
41
38
  begin
42
39
  results = process_requests
43
40
  ensure
44
- teardown
41
+ @engine.stop
45
42
  end
46
43
  results
47
44
  end
48
45
 
49
- def config_dir
50
- (@base_path + Path::CONFIG) + @owner.config
51
- end
52
-
53
- def config_file
54
- config_dir + "fluentd.conf"
55
- end
56
-
57
- def catalog_file
58
- config_dir + "catalog.json"
59
- end
60
-
61
- def port
62
- @port || @owner.port
63
- end
64
-
65
- def host
66
- @host || @owner.host
67
- end
68
-
69
- def tag
70
- @tag || @owner.tag
71
- end
72
-
73
46
  private
74
- def prepare
75
- if catalog_file.exist?
76
- catalog_json = JSON.parse(catalog_file.read, :symbolize_names => true)
77
- zone = catalog_json[:zones].first
78
- /\A([^:]+):(\d+)\/(.+)\z/ =~ zone
79
- @host = "localhost" # $1
80
- @port = $2.to_i
81
- @tag = $3
82
- end
83
- end
84
-
85
- def setup
86
- return unless temporary_engine?
87
-
88
- setup_temporary_dir
89
-
90
- temporary_config = temporary_dir + "fluentd.conf"
91
- FileUtils.cp(config_file, temporary_config)
92
- temporary_catalog = temporary_dir + "catalog.json"
93
- FileUtils.cp(catalog_file, temporary_catalog)
94
-
95
- engine_command = [
96
- @owner.fluentd,
97
- "--config", temporary_config.to_s,
98
- *@owner.fluentd_options,
99
- ]
100
- engine_env = {
101
- "DROONGA_CATALOG" => temporary_catalog.to_s,
102
- }
103
- engine_options = {
104
- :chdir => temporary_dir.to_s,
105
- STDERR => STDOUT,
106
- }
107
- arguments = [engine_env, *engine_command]
108
- arguments << engine_options
109
- @engine_pid = Process.spawn(*arguments)
110
-
111
- wait_until_engine_ready
112
- end
113
-
114
- def teardown
115
- return unless temporary_engine?
116
-
117
- Process.kill(:TERM, @engine_pid)
118
- Process.wait(@engine_pid)
119
-
120
- teardown_temporary_dir
121
- end
122
-
123
- def setup_temporary_dir
124
- tmpfs = Pathname("/run/shm")
125
- if tmpfs.directory? and tmpfs.writable?
126
- FileUtils.rm_rf(temporary_base_dir)
127
- FileUtils.ln_s(tmpfs.to_s, temporary_base_dir.to_s)
128
- end
129
- FileUtils.rm_rf(temporary_dir)
130
- FileUtils.mkdir_p(temporary_dir)
131
- end
132
-
133
- def teardown_temporary_dir
134
- FileUtils.rm_rf(temporary_dir.to_s)
135
- end
136
-
137
- def temporary_base_dir
138
- @base_path + "tmp"
139
- end
140
-
141
- def temporary_dir
142
- temporary_base_dir + "drntest"
143
- end
144
-
145
- def temporary_engine?
146
- @owner.fluentd && config_file.exist?
147
- end
148
-
149
47
  def process_requests
150
48
  results = TestResults.new(@target_path)
151
49
 
152
- executor = TestExecutor.new(self, @target_path)
153
- results.actuals = executor.execute
50
+ executor = TestExecutor.new(@config, @target_path)
51
+ begin
52
+ results.actuals = executor.execute
53
+ rescue
54
+ results.errors << $!
55
+ end
154
56
  if expected_exist?
155
57
  results.expecteds = load_expected_responses
156
58
  end
@@ -168,6 +70,9 @@ module Drntest
168
70
  when :not_checked
169
71
  puts "NOT CHECKED"
170
72
  output_actual_file(results.actuals)
73
+ when :error
74
+ puts "ERROR"
75
+ output_errors(results.errors)
171
76
  end
172
77
 
173
78
  results
@@ -260,19 +165,16 @@ module Drntest
260
165
  yield(file)
261
166
  end
262
167
 
263
- def engine_ready?
264
- begin
265
- socket = TCPSocket.new(@host, @port)
266
- socket.close
267
- true
268
- rescue Errno::ECONNREFUSED
269
- false
270
- end
271
- end
272
-
273
- def wait_until_engine_ready
274
- until engine_ready?
275
- sleep 1
168
+ def output_errors(errors)
169
+ return if errors.empty?
170
+ n_digits = (Math.log10(errors.size) + 1).ceil
171
+ mark = "=" * 78
172
+ errors.each_with_index do |error, i|
173
+ puts(mark)
174
+ formatted_nth = "%*d)" % [n_digits, i + 1]
175
+ puts("#{formatted_nth} #{error.message} (#{error.class})")
176
+ puts(error.backtrace)
177
+ puts(mark)
276
178
  end
277
179
  end
278
180
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2013 Droonga Project
1
+ # Copyright (C) 2013-2014 Droonga Project
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -18,7 +18,7 @@ require "optparse"
18
18
  require "pathname"
19
19
 
20
20
  require "drntest/version"
21
- require "drntest/path"
21
+ require "drntest/configuration"
22
22
  require "drntest/test-runner"
23
23
  require "drntest/test-suites-result"
24
24
 
@@ -28,99 +28,27 @@ module Drntest
28
28
  def run(argv=nil)
29
29
  argv ||= ARGV.dup
30
30
  tester = new
31
- option_parser = create_option_parser(tester)
32
- targets = option_parser.parse!(argv)
31
+ *targets = tester.parse_command_line_options(argv)
33
32
  tester.run(*targets)
34
33
  end
35
-
36
- private
37
- def create_option_parser(tester)
38
- parser = OptionParser.new
39
-
40
- parser.banner += " TEST_FILE..."
41
-
42
- parser.on("--port=PORT",
43
- "Connect to fluent-plugin-droonga on PORT",
44
- "(#{tester.port})") do |port|
45
- tester.port = port
46
- end
47
-
48
- parser.on("--host=HOST",
49
- "Connect to fluent-plugin-droonga on HOST",
50
- "(#{tester.host})") do |host|
51
- tester.host = host
52
- end
53
-
54
- parser.on("--tag=TAG",
55
- "Send messages to fluent-plugin-droonga with TAG",
56
- "(#{tester.tag})") do |tag|
57
- tester.tag = tag
58
- end
59
-
60
- parser.on("--base-path=PATH",
61
- "Path to the base directory including test suite, config and fixture",
62
- "(#{tester.base_path})") do |base_path|
63
- tester.base_path = Pathname(base_path).expand_path(Dir.pwd)
64
- end
65
-
66
- parser.on("--config=NAME",
67
- "Name of the configuration directory for Droonga engine",
68
- "(#{tester.config})") do |config|
69
- tester.config = config
70
- end
71
-
72
- parser.on("--fluentd=PATH",
73
- "Path to the fluentd executable",
74
- "(#{tester.fluentd})") do |fluentd|
75
- tester.fluentd = fluentd
76
- end
77
-
78
- parser.on("--fluentd-options=OPTIONS",
79
- "Options for fluentd",
80
- "You can specify this option multiple times") do |options|
81
- tester.fluentd_options.concat(Shellwords.split(options))
82
- end
83
-
84
- parser.on("--test=PATTERN",
85
- "Run only tests which have a name matched to the given PATTERN") do |pattern|
86
- if /\A\/(.+)\/\z/ =~ pattern
87
- pattern = Regexp.new($1)
88
- end
89
- tester.test_pattern = pattern
90
- end
91
-
92
- parser.on("--test-suite=PATTERN",
93
- "Run only test suites which have a path matched to the given PATTERN") do |pattern|
94
- if /\A\/(.+)\/\z/ =~ pattern
95
- pattern = Regexp.new($1)
96
- end
97
- tester.suite_pattern = pattern
98
- end
99
-
100
- parser
101
- end
102
34
  end
103
35
 
104
- attr_accessor :port, :host, :tag, :fluentd, :fluentd_options
105
- attr_accessor :test_pattern, :suite_pattern, :base_path, :config
106
-
107
36
  def initialize
108
- @port = 24224
109
- @host = "localhost"
110
- @tag = "droonga"
111
- @base_path = Pathname(Dir.pwd)
112
- @config = "default"
113
- @fluentd = "fluentd"
114
- @fluentd_options = []
37
+ @config = Configuration.new
115
38
  @test_pattern = nil
116
39
  @suite_pattern = nil
117
40
  end
118
41
 
42
+ def parse_command_line_options(command_line_options)
43
+ option_parser = create_option_parser
44
+ option_parser.parse!(command_line_options)
45
+ end
46
+
119
47
  def run(*targets)
120
48
  test_suites_result = TestSuitesResult.new
121
49
  tests = load_tests(*targets)
122
50
  tests.each do |test|
123
- test_runner = TestRunner.new(self, test)
51
+ test_runner = TestRunner.new(@config, test)
124
52
  test_suites_result.test_results << test_runner.run
125
53
  end
126
54
 
@@ -140,8 +68,75 @@ module Drntest
140
68
  test_suites_result.success?
141
69
  end
142
70
 
71
+ private
72
+ def create_option_parser
73
+ parser = OptionParser.new
74
+
75
+ parser.banner += " TEST_FILE..."
76
+
77
+ parser.on("--port=PORT",
78
+ "Connect to fluent-plugin-droonga on PORT",
79
+ "(#{@config.port})") do |port|
80
+ @config.port = port
81
+ end
82
+
83
+ parser.on("--host=HOST",
84
+ "Connect to fluent-plugin-droonga on HOST",
85
+ "(#{@config.host})") do |host|
86
+ @config.host = host
87
+ end
88
+
89
+ parser.on("--tag=TAG",
90
+ "Send messages to fluent-plugin-droonga with TAG",
91
+ "(#{@config.tag})") do |tag|
92
+ @config.tag = tag
93
+ end
94
+
95
+ parser.on("--base-path=PATH",
96
+ "Path to the base directory including test suite, config and fixture",
97
+ "(#{@config.base_path})") do |base_path|
98
+ @config.base_path = Pathname(base_path).expand_path(Dir.pwd)
99
+ end
100
+
101
+ parser.on("--config=NAME",
102
+ "Name of the configuration directory for Droonga engine",
103
+ "(#{@config.engine_config})") do |config|
104
+ @config.engine_config = config
105
+ end
106
+
107
+ parser.on("--fluentd=PATH",
108
+ "Path to the fluentd executable",
109
+ "(#{@config.fluentd})") do |fluentd|
110
+ @config.fluentd = fluentd
111
+ end
112
+
113
+ parser.on("--fluentd-options=OPTIONS",
114
+ "Options for fluentd",
115
+ "You can specify this option multiple times") do |options|
116
+ @config.fluentd_options.concat(Shellwords.split(options))
117
+ end
118
+
119
+ parser.on("--test=PATTERN",
120
+ "Run only tests which have a name matched to the given PATTERN") do |pattern|
121
+ if /\A\/(.+)\/\z/ =~ pattern
122
+ pattern = Regexp.new($1)
123
+ end
124
+ @test_pattern = pattern
125
+ end
126
+
127
+ parser.on("--test-suite=PATTERN",
128
+ "Run only test suites which have a path matched to the given PATTERN") do |pattern|
129
+ if /\A\/(.+)\/\z/ =~ pattern
130
+ pattern = Regexp.new($1)
131
+ end
132
+ @suite_pattern = pattern
133
+ end
134
+
135
+ parser
136
+ end
137
+
143
138
  def load_tests(*targets)
144
- suite_path = @base_path + Path::SUITE
139
+ suite_path = @config.suite_path
145
140
  targets << suite_path if targets.empty?
146
141
 
147
142
  tests = []
@@ -14,5 +14,5 @@
14
14
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
15
 
16
16
  module Drntest
17
- VERSION = "1.1.0"
17
+ VERSION = "1.1.1"
18
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drntest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Droonga Project
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-29 00:00:00.000000000 Z
11
+ date: 2014-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - '>='
46
46
  - !ruby/object:Gem::Version
47
- version: 0.1.0
47
+ version: 0.1.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.1.0
54
+ version: 0.1.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: packnga
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: kramdown
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
83
111
  description: ''
84
112
  email:
85
113
  - droonga@groonga.org
@@ -92,17 +120,18 @@ files:
92
120
  - Rakefile
93
121
  - Gemfile
94
122
  - drntest.gemspec
95
- - lib/drntest/test-results.rb
96
- - lib/drntest/version.rb
123
+ - lib/drntest/test-runner.rb
124
+ - lib/drntest/tester.rb
97
125
  - lib/drntest/directive.rb
98
- - lib/drntest/test-suites-result.rb
99
- - lib/drntest/json-loader.rb
126
+ - lib/drntest/version.rb
127
+ - lib/drntest/test-results.rb
100
128
  - lib/drntest/test-loader.rb
101
- - lib/drntest/tester.rb
102
- - lib/drntest/path.rb
103
- - lib/drntest/response-normalizer.rb
104
- - lib/drntest/test-runner.rb
129
+ - lib/drntest/configuration.rb
130
+ - lib/drntest/json-loader.rb
131
+ - lib/drntest/test-suites-result.rb
105
132
  - lib/drntest/test-executor.rb
133
+ - lib/drntest/response-normalizer.rb
134
+ - lib/drntest/engine.rb
106
135
  - bin/drntest
107
136
  homepage: https://github.com/droonga/drntest
108
137
  licenses: