grntest 1.0.3 → 1.0.4
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 +7 -0
- data/doc/text/news.md +6 -0
- data/grntest.gemspec +2 -2
- data/lib/grntest/executors/base-executor.rb +27 -8
- data/lib/grntest/executors/http-executor.rb +51 -9
- data/lib/grntest/reporters.rb +1 -1
- data/lib/grntest/test-runner.rb +16 -2
- data/lib/grntest/test-suites-runner.rb +1 -1
- data/lib/grntest/version.rb +2 -2
- metadata +26 -46
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2c4da22645c51bc7a2f74a60d727f04fc123f9f3
|
4
|
+
data.tar.gz: 9f01ad9f0c434f3922fda5b2db584861a9e79a19
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1b740176e04d147d62c040eb1c98dc98619ffe033008aa44214e1475874b4308368d127d221784f4c8a52b85ec875755380c1f5a3837ed26de0dee34565f1ed8
|
7
|
+
data.tar.gz: 953b462900e9ecc68df27bf9bfd6996c1870450871a200774842aa9c9a5fa3df98bf9d28805893c6fb32c67a39bc6f201be763c071691ae02c2013e788ae419d
|
data/doc/text/news.md
CHANGED
data/grntest.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- mode: ruby; coding: utf-8 -*-
|
2
2
|
#
|
3
|
-
# Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
|
3
|
+
# Copyright (C) 2012-2013 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 @@ Gem::Specification.new do |spec|
|
|
45
45
|
|
46
46
|
spec.add_runtime_dependency("json")
|
47
47
|
spec.add_runtime_dependency("msgpack")
|
48
|
-
spec.add_runtime_dependency("groonga-command")
|
48
|
+
spec.add_runtime_dependency("groonga-command-parser")
|
49
49
|
|
50
50
|
spec.add_development_dependency("bundler")
|
51
51
|
spec.add_development_dependency("rake")
|
@@ -19,7 +19,7 @@ require "pathname"
|
|
19
19
|
require "fileutils"
|
20
20
|
require "shellwords"
|
21
21
|
|
22
|
-
require "groonga/command"
|
22
|
+
require "groonga/command/parser"
|
23
23
|
|
24
24
|
require "grntest/error"
|
25
25
|
require "grntest/execution-context"
|
@@ -54,10 +54,10 @@ module Grntest
|
|
54
54
|
script_file.each_line do |line|
|
55
55
|
begin
|
56
56
|
parser << line
|
57
|
-
rescue Error, Groonga::Command::
|
57
|
+
rescue Error, Groonga::Command::Parser::Error
|
58
58
|
line_info = "#{script_path}:#{script_file.lineno}:#{line.chomp}"
|
59
59
|
log_error("#{line_info}: #{$!.message}")
|
60
|
-
if $!.is_a?(Groonga::Command::
|
60
|
+
if $!.is_a?(Groonga::Command::Parser::Error)
|
61
61
|
@context.abort
|
62
62
|
else
|
63
63
|
log_error("#{line_info}: #{$!.message}")
|
@@ -77,7 +77,17 @@ module Grntest
|
|
77
77
|
parser.on_command do |command|
|
78
78
|
execute_command(command)
|
79
79
|
end
|
80
|
+
parser.on_load_value do |command, value|
|
81
|
+
command.values ||= []
|
82
|
+
command.values << value
|
83
|
+
end
|
80
84
|
parser.on_load_complete do |command|
|
85
|
+
if command.columns
|
86
|
+
command[:columns] = command.columns.join(", ")
|
87
|
+
end
|
88
|
+
if command.values
|
89
|
+
command[:values] = JSON.generate(command.values)
|
90
|
+
end
|
81
91
|
execute_command(command)
|
82
92
|
end
|
83
93
|
parser.on_comment do |comment|
|
@@ -240,12 +250,21 @@ module Grntest
|
|
240
250
|
def execute_command(command)
|
241
251
|
extract_command_info(command)
|
242
252
|
log_input("#{command.original_source}\n")
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
253
|
+
begin
|
254
|
+
response = send_command(command)
|
255
|
+
rescue => error
|
256
|
+
log_error("# error: #{error.class}: #{error.message}")
|
257
|
+
error.backtrace.each do |line|
|
258
|
+
log_error("# error: #{line}")
|
259
|
+
end
|
260
|
+
@context.error
|
261
|
+
else
|
262
|
+
type = @output_type
|
263
|
+
log_output(response)
|
264
|
+
log_error(extract_important_messages(read_all_log))
|
247
265
|
|
248
|
-
|
266
|
+
@context.error if error_response?(response, type)
|
267
|
+
end
|
249
268
|
end
|
250
269
|
|
251
270
|
def read_all_log
|
@@ -26,24 +26,21 @@ module Grntest
|
|
26
26
|
super(context)
|
27
27
|
@host = host
|
28
28
|
@port = port
|
29
|
+
@read_timeout = 3
|
29
30
|
end
|
30
31
|
|
31
32
|
def send_command(command)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
37
|
-
rescue OpenURI::HTTPError
|
38
|
-
message = "Failed to get response from groonga: #{$!}: <#{url}>"
|
39
|
-
raise Error.new(message)
|
33
|
+
if command.name == "load"
|
34
|
+
send_load_command(command)
|
35
|
+
else
|
36
|
+
send_normal_command(command)
|
40
37
|
end
|
41
38
|
end
|
42
39
|
|
43
40
|
def ensure_groonga_ready
|
44
41
|
n_retried = 0
|
45
42
|
begin
|
46
|
-
send_command("status")
|
43
|
+
send_command(command("status"))
|
47
44
|
rescue SystemCallError
|
48
45
|
n_retried += 1
|
49
46
|
sleep(0.1)
|
@@ -52,9 +49,54 @@ module Grntest
|
|
52
49
|
end
|
53
50
|
end
|
54
51
|
|
52
|
+
def shutdown
|
53
|
+
send_command(command("shutdown"))
|
54
|
+
end
|
55
|
+
|
55
56
|
def create_sub_executor(context)
|
56
57
|
self.class.new(@host, @port, context)
|
57
58
|
end
|
59
|
+
|
60
|
+
private
|
61
|
+
def command(command_line)
|
62
|
+
Groonga::Command::Parser.parse(command_line)
|
63
|
+
end
|
64
|
+
|
65
|
+
MAX_URI_SIZE = 4096
|
66
|
+
def send_load_command(command)
|
67
|
+
if command.to_uri_format.size <= MAX_URI_SIZE
|
68
|
+
return send_normal_command(command)
|
69
|
+
end
|
70
|
+
|
71
|
+
values = command.arguments.delete(:values)
|
72
|
+
request = Net::HTTP::Post.new(command.to_uri_format)
|
73
|
+
request.content_type = "application/json; charset=UTF-8"
|
74
|
+
request.body = values
|
75
|
+
response = Net::HTTP.start(@host, @port) do |http|
|
76
|
+
http.read_timeout = @read_timeout
|
77
|
+
http.request(request)
|
78
|
+
end
|
79
|
+
normalize_response_data(response.body)
|
80
|
+
end
|
81
|
+
|
82
|
+
def send_normal_command(command)
|
83
|
+
url = "http://#{@host}:#{@port}#{command.to_uri_format}"
|
84
|
+
begin
|
85
|
+
open(url, :read_timeout => @read_timeout) do |response|
|
86
|
+
normalize_response_data(response.read)
|
87
|
+
end
|
88
|
+
rescue OpenURI::HTTPError
|
89
|
+
$!.io.read
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def normalize_response_data(raw_response_data)
|
94
|
+
if raw_response_data.empty?
|
95
|
+
raw_response_data
|
96
|
+
else
|
97
|
+
"#{raw_response_data}\n"
|
98
|
+
end
|
99
|
+
end
|
58
100
|
end
|
59
101
|
end
|
60
102
|
end
|
data/lib/grntest/reporters.rb
CHANGED
data/lib/grntest/test-runner.rb
CHANGED
@@ -299,11 +299,25 @@ EOC
|
|
299
299
|
end
|
300
300
|
yield(executor)
|
301
301
|
ensure
|
302
|
-
executor.
|
302
|
+
executor.shutdown
|
303
303
|
wait_groonga_http_shutdown(pid_file_path)
|
304
304
|
end
|
305
305
|
ensure
|
306
|
-
|
306
|
+
ensure_process_finished(pid)
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
def ensure_process_finished(pid)
|
311
|
+
return if pid.nil?
|
312
|
+
|
313
|
+
n_retries = 0
|
314
|
+
loop do
|
315
|
+
finished_pid = Process.waitpid(pid, Process::WNOHANG)
|
316
|
+
break if finished_pid
|
317
|
+
n_retries += 1
|
318
|
+
break if n_retries > 10
|
319
|
+
Process.kill(:TERM, pid)
|
320
|
+
sleep(0.1)
|
307
321
|
end
|
308
322
|
end
|
309
323
|
|
data/lib/grntest/version.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
|
1
|
+
# Copyright (C) 2012-2013 Kouhei Sutou <kou@clear-code.com>
|
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,5 +14,5 @@
|
|
14
14
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
15
15
|
|
16
16
|
module Grntest
|
17
|
-
VERSION = "1.0.
|
17
|
+
VERSION = "1.0.4"
|
18
18
|
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grntest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Kouhei Sutou
|
@@ -10,150 +9,132 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2013-
|
12
|
+
date: 2013-12-16 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: json
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - '>='
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: '0'
|
23
21
|
type: :runtime
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
|
-
- -
|
25
|
+
- - '>='
|
29
26
|
- !ruby/object:Gem::Version
|
30
27
|
version: '0'
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
29
|
name: msgpack
|
33
30
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
31
|
requirements:
|
36
|
-
- -
|
32
|
+
- - '>='
|
37
33
|
- !ruby/object:Gem::Version
|
38
34
|
version: '0'
|
39
35
|
type: :runtime
|
40
36
|
prerelease: false
|
41
37
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
38
|
requirements:
|
44
|
-
- -
|
39
|
+
- - '>='
|
45
40
|
- !ruby/object:Gem::Version
|
46
41
|
version: '0'
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
|
-
name: groonga-command
|
43
|
+
name: groonga-command-parser
|
49
44
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
45
|
requirements:
|
52
|
-
- -
|
46
|
+
- - '>='
|
53
47
|
- !ruby/object:Gem::Version
|
54
48
|
version: '0'
|
55
49
|
type: :runtime
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
52
|
requirements:
|
60
|
-
- -
|
53
|
+
- - '>='
|
61
54
|
- !ruby/object:Gem::Version
|
62
55
|
version: '0'
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
57
|
name: bundler
|
65
58
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
59
|
requirements:
|
68
|
-
- -
|
60
|
+
- - '>='
|
69
61
|
- !ruby/object:Gem::Version
|
70
62
|
version: '0'
|
71
63
|
type: :development
|
72
64
|
prerelease: false
|
73
65
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
66
|
requirements:
|
76
|
-
- -
|
67
|
+
- - '>='
|
77
68
|
- !ruby/object:Gem::Version
|
78
69
|
version: '0'
|
79
70
|
- !ruby/object:Gem::Dependency
|
80
71
|
name: rake
|
81
72
|
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
73
|
requirements:
|
84
|
-
- -
|
74
|
+
- - '>='
|
85
75
|
- !ruby/object:Gem::Version
|
86
76
|
version: '0'
|
87
77
|
type: :development
|
88
78
|
prerelease: false
|
89
79
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
80
|
requirements:
|
92
|
-
- -
|
81
|
+
- - '>='
|
93
82
|
- !ruby/object:Gem::Version
|
94
83
|
version: '0'
|
95
84
|
- !ruby/object:Gem::Dependency
|
96
85
|
name: test-unit
|
97
86
|
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
87
|
requirements:
|
100
|
-
- -
|
88
|
+
- - '>='
|
101
89
|
- !ruby/object:Gem::Version
|
102
90
|
version: '0'
|
103
91
|
type: :development
|
104
92
|
prerelease: false
|
105
93
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
94
|
requirements:
|
108
|
-
- -
|
95
|
+
- - '>='
|
109
96
|
- !ruby/object:Gem::Version
|
110
97
|
version: '0'
|
111
98
|
- !ruby/object:Gem::Dependency
|
112
99
|
name: test-unit-rr
|
113
100
|
requirement: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
101
|
requirements:
|
116
|
-
- -
|
102
|
+
- - '>='
|
117
103
|
- !ruby/object:Gem::Version
|
118
104
|
version: '0'
|
119
105
|
type: :development
|
120
106
|
prerelease: false
|
121
107
|
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
none: false
|
123
108
|
requirements:
|
124
|
-
- -
|
109
|
+
- - '>='
|
125
110
|
- !ruby/object:Gem::Version
|
126
111
|
version: '0'
|
127
112
|
- !ruby/object:Gem::Dependency
|
128
113
|
name: packnga
|
129
114
|
requirement: !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
115
|
requirements:
|
132
|
-
- -
|
116
|
+
- - '>='
|
133
117
|
- !ruby/object:Gem::Version
|
134
118
|
version: '0'
|
135
119
|
type: :development
|
136
120
|
prerelease: false
|
137
121
|
version_requirements: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
122
|
requirements:
|
140
|
-
- -
|
123
|
+
- - '>='
|
141
124
|
- !ruby/object:Gem::Version
|
142
125
|
version: '0'
|
143
126
|
- !ruby/object:Gem::Dependency
|
144
127
|
name: redcarpet
|
145
128
|
requirement: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
129
|
requirements:
|
148
|
-
- -
|
130
|
+
- - '>='
|
149
131
|
- !ruby/object:Gem::Version
|
150
132
|
version: '0'
|
151
133
|
type: :development
|
152
134
|
prerelease: false
|
153
135
|
version_requirements: !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
136
|
requirements:
|
156
|
-
- -
|
137
|
+
- - '>='
|
157
138
|
- !ruby/object:Gem::Version
|
158
139
|
version: '0'
|
159
140
|
description: ''
|
@@ -197,27 +178,26 @@ files:
|
|
197
178
|
homepage: https://github.com/groonga/grntest
|
198
179
|
licenses:
|
199
180
|
- GPLv3 or later
|
181
|
+
metadata: {}
|
200
182
|
post_install_message:
|
201
183
|
rdoc_options: []
|
202
184
|
require_paths:
|
203
185
|
- lib
|
204
186
|
required_ruby_version: !ruby/object:Gem::Requirement
|
205
|
-
none: false
|
206
187
|
requirements:
|
207
|
-
- -
|
188
|
+
- - '>='
|
208
189
|
- !ruby/object:Gem::Version
|
209
190
|
version: '0'
|
210
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
211
|
-
none: false
|
212
192
|
requirements:
|
213
|
-
- -
|
193
|
+
- - '>='
|
214
194
|
- !ruby/object:Gem::Version
|
215
195
|
version: '0'
|
216
196
|
requirements: []
|
217
197
|
rubyforge_project:
|
218
|
-
rubygems_version:
|
198
|
+
rubygems_version: 2.0.14
|
219
199
|
signing_key:
|
220
|
-
specification_version:
|
200
|
+
specification_version: 4
|
221
201
|
summary: Grntest is a testing framework for groonga. You can write a test for groonga
|
222
202
|
by writing groonga commands and expected result.
|
223
203
|
test_files:
|