grntest 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|