drntest 1.1.9 → 1.2.0
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/lib/drntest/directive.rb +44 -1
- data/lib/drntest/response-normalizer.rb +25 -1
- data/lib/drntest/responses-normalizer.rb +42 -4
- data/lib/drntest/test-executor.rb +32 -4
- data/lib/drntest/test-loader.rb +10 -0
- data/lib/drntest/test-runner.rb +4 -0
- data/lib/drntest/version.rb +1 -1
- metadata +19 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27b62dbe0468bc4888089e7039c970faaaffe456
|
4
|
+
data.tar.gz: fd4b33fde9987e00a7121d54c4865ce34d7d8f77
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 434fa2cdae0a39c5578b99ebcfca1465a0eb426ab6bf92892a65090cad6ba7750d7cc400ef21afecd9f4cfcfd512258cd386d18f261ae2983cd2207c317fd2a2
|
7
|
+
data.tar.gz: a17db9680240ec2e0a246797bf39936404c69359c46e5d2f4fb6f94093cc81b3875461002d7e7636e5d862e6ac83455a679426008bb4afdad86e90be9159c1ef
|
data/lib/drntest/directive.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2013 Droonga Project
|
1
|
+
# Copyright (C) 2013-2015 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
|
@@ -55,4 +55,47 @@ module Drntest
|
|
55
55
|
@version = version
|
56
56
|
end
|
57
57
|
end
|
58
|
+
|
59
|
+
class EnableCompletionDirective < Directive
|
60
|
+
end
|
61
|
+
|
62
|
+
class DisableCompletionDirective < Directive
|
63
|
+
end
|
64
|
+
|
65
|
+
class EnableValidationDirective < Directive
|
66
|
+
end
|
67
|
+
|
68
|
+
class DisableValidationDirective < Directive
|
69
|
+
end
|
70
|
+
|
71
|
+
class SubscribeUntil < Directive
|
72
|
+
attr_reader :max_messages, :timeout_seconds
|
73
|
+
|
74
|
+
DEFAULT_TIMEOUT_SECONDS = 1
|
75
|
+
|
76
|
+
ONE_MINUTE_IN_SECONDS = 60
|
77
|
+
ONE_HOUR_IN_SECONDS = ONE_MINUTE_IN_SECONDS * 60
|
78
|
+
|
79
|
+
def initialize(parameters)
|
80
|
+
@max_messages = nil
|
81
|
+
@timeout_seconds = nil
|
82
|
+
|
83
|
+
parameters.each do |parameter|
|
84
|
+
case parameter
|
85
|
+
when /\A(\d+)(?:messages|msg)?\z/
|
86
|
+
@max_messages = $1.to_i
|
87
|
+
when /\A(\d+\.?|\.\d+|\d+\.\d+)s(?:ec(?:onds?)?)?\z/
|
88
|
+
@timeout_seconds = $1.to_f
|
89
|
+
when /\A(\d+\.?|\.\d+|\d+\.\d+)m(?:inutes?)?\z/
|
90
|
+
@timeout_seconds = $1.to_f * ONE_MINUTE_IN_SECONDS
|
91
|
+
when /\A(\d+\.?|\.\d+|\d+\.\d+)h(?:ours?)?\z/
|
92
|
+
@timeout_seconds = $1.to_f * ONE_HOUR_IN_SECONDS
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
if @max_messages.nil? and @timeout_seconds.nil?
|
97
|
+
@timeout_seconds = DEFAULT_TIMEOUT_SECONDS
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
58
101
|
end
|
@@ -39,6 +39,8 @@ module Drntest
|
|
39
39
|
normalize_groonga_command_response!(body)
|
40
40
|
elsif search_command?
|
41
41
|
normalize_search_command_response!(body)
|
42
|
+
elsif system_status_command?
|
43
|
+
normalize_system_status_command_response!(body)
|
42
44
|
end
|
43
45
|
end
|
44
46
|
|
@@ -61,6 +63,10 @@ module Drntest
|
|
61
63
|
@request["type"] == "search"
|
62
64
|
end
|
63
65
|
|
66
|
+
def system_status_command?
|
67
|
+
@request["type"] == "system.status"
|
68
|
+
end
|
69
|
+
|
64
70
|
def normalize_droonga_message_envelope!(message)
|
65
71
|
normalized_in_reply_to = "request-id"
|
66
72
|
in_reply_to = message["inReplyTo"]
|
@@ -70,6 +76,10 @@ module Drntest
|
|
70
76
|
normalize_error_body!(message["body"])
|
71
77
|
end
|
72
78
|
|
79
|
+
if message["date"].is_a?(String)
|
80
|
+
message["date"] = "0000-00-00T00:00:00.000000Z"
|
81
|
+
end
|
82
|
+
|
73
83
|
errors = message["errors"]
|
74
84
|
message["errors"] = normalize_errors(errors) if errors
|
75
85
|
end
|
@@ -87,6 +97,7 @@ module Drntest
|
|
87
97
|
end
|
88
98
|
|
89
99
|
def normalize_error_body!(body)
|
100
|
+
return body unless body
|
90
101
|
case body["name"]
|
91
102
|
when "InvalidValue"
|
92
103
|
message = body["message"]
|
@@ -97,6 +108,7 @@ module Drntest
|
|
97
108
|
end
|
98
109
|
|
99
110
|
def normalize_groonga_command_response!(response)
|
111
|
+
return unless response.is_a?(Array)
|
100
112
|
normalize_groonga_command_header!(response[0])
|
101
113
|
normalize_groonga_command_body!(response[1..-1])
|
102
114
|
end
|
@@ -116,7 +128,8 @@ module Drntest
|
|
116
128
|
end
|
117
129
|
|
118
130
|
def normalize_groonga_command_body!(body)
|
119
|
-
return
|
131
|
+
return unless body.is_a?(Array)
|
132
|
+
return if body.empty?
|
120
133
|
|
121
134
|
case @request["type"]
|
122
135
|
when "table_list"
|
@@ -128,6 +141,8 @@ module Drntest
|
|
128
141
|
|
129
142
|
TABLE_PATH_COLUMN_INDEX = 2
|
130
143
|
def normalize_groonga_table_list_command_body!(body)
|
144
|
+
return unless body.is_a?(Array)
|
145
|
+
return if body.empty?
|
131
146
|
tables = body[0][1..-1]
|
132
147
|
return unless tables.is_a?(Array)
|
133
148
|
tables.each do |table|
|
@@ -139,6 +154,8 @@ module Drntest
|
|
139
154
|
|
140
155
|
COLUMN_PATH_COLUMN_INDEX = 2
|
141
156
|
def normalize_groonga_column_list_command_body!(body)
|
157
|
+
return unless body.is_a?(Array)
|
158
|
+
return if body.empty?
|
142
159
|
columns = body[0][1..-1]
|
143
160
|
return unless columns.is_a?(Array)
|
144
161
|
columns.each do |column|
|
@@ -157,6 +174,13 @@ module Drntest
|
|
157
174
|
end
|
158
175
|
end
|
159
176
|
|
177
|
+
def normalize_system_status_command_response!(response)
|
178
|
+
reporter = response["reporter"]
|
179
|
+
if reporter
|
180
|
+
response["reporter"] = reporter.sub(/:\d+/, ":0")
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
160
184
|
def valid_start_time?(start_time)
|
161
185
|
start_time.is_a?(Float) and start_time > 0
|
162
186
|
end
|
@@ -21,9 +21,13 @@ module Drntest
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def normalize
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
if dump_command?
|
25
|
+
normalize_dump_responses
|
26
|
+
elsif system_absorb_data_command?
|
27
|
+
normalize_system_absorb_data_responses
|
28
|
+
else
|
29
|
+
@responses
|
30
|
+
end
|
27
31
|
end
|
28
32
|
|
29
33
|
private
|
@@ -34,6 +38,7 @@ module Drntest
|
|
34
38
|
DUMP_TYPE_ORDER = [
|
35
39
|
"dump.start",
|
36
40
|
"dump.result",
|
41
|
+
"dump.forecast",
|
37
42
|
"dump.table",
|
38
43
|
"dump.column",
|
39
44
|
"dump.record",
|
@@ -41,10 +46,15 @@ module Drntest
|
|
41
46
|
]
|
42
47
|
def normalize_dump_responses
|
43
48
|
@responses.sort_by do |response|
|
49
|
+
if response["error"] and response["response"]
|
50
|
+
response = response["response"]
|
51
|
+
end
|
44
52
|
type = response["type"]
|
45
|
-
type_order = DUMP_TYPE_ORDER.index(type)
|
53
|
+
type_order = DUMP_TYPE_ORDER.index(type) || -1
|
46
54
|
body = response["body"]
|
47
55
|
case type
|
56
|
+
when "dump.forecast"
|
57
|
+
body_order = body["nMessages"]
|
48
58
|
when "dump.table"
|
49
59
|
body_order = body["name"]
|
50
60
|
when "dump.column"
|
@@ -57,5 +67,33 @@ module Drntest
|
|
57
67
|
[type_order, body_order]
|
58
68
|
end
|
59
69
|
end
|
70
|
+
|
71
|
+
def system_absorb_data_command?
|
72
|
+
@request["type"] == "system.absorb-data"
|
73
|
+
end
|
74
|
+
|
75
|
+
SYSTEM_ABSORB_DATA_ORDER = [
|
76
|
+
"system.absorb.start",
|
77
|
+
"system.absorb.result",
|
78
|
+
"system.absorb.progress",
|
79
|
+
"system.absorb.end",
|
80
|
+
]
|
81
|
+
def normalize_system_absorb_data_responses
|
82
|
+
@responses.sort_by do |response|
|
83
|
+
if response["error"] and response["response"]
|
84
|
+
response = response["response"]
|
85
|
+
end
|
86
|
+
type = response["type"]
|
87
|
+
type_order = SYSTEM_ABSORB_DATA_ORDER.index(type) || -1
|
88
|
+
body = response["body"]
|
89
|
+
case type
|
90
|
+
when "system.absorb.progress"
|
91
|
+
body_order = body["nProcessedMessages"]
|
92
|
+
else
|
93
|
+
body_order = ""
|
94
|
+
end
|
95
|
+
[type_order, body_order]
|
96
|
+
end
|
97
|
+
end
|
60
98
|
end
|
61
99
|
end
|
@@ -63,6 +63,8 @@ module Drntest
|
|
63
63
|
@requests = []
|
64
64
|
@responses = []
|
65
65
|
@logging = true
|
66
|
+
@completion = nil
|
67
|
+
@validation = nil
|
66
68
|
end
|
67
69
|
|
68
70
|
def execute(operation)
|
@@ -98,19 +100,45 @@ module Drntest
|
|
98
100
|
@results.omit(message)
|
99
101
|
abort_execution
|
100
102
|
end
|
103
|
+
when EnableCompletionDirective
|
104
|
+
@completion = true
|
105
|
+
when DisableCompletionDirective
|
106
|
+
@completion = false
|
107
|
+
when EnableValidationDirective
|
108
|
+
@validation = true
|
109
|
+
when DisableValidationDirective
|
110
|
+
@validation = false
|
111
|
+
when SubscribeUntil
|
112
|
+
@subscribe = true
|
113
|
+
@timeout_seconds = directive.timeout_seconds
|
114
|
+
@max_messages = directive.max_messages
|
101
115
|
end
|
102
116
|
end
|
103
117
|
|
104
118
|
def execute_request(request)
|
119
|
+
options = {}
|
120
|
+
options[:completion] = @completion unless @completion.nil?
|
121
|
+
options[:validation] = @validation unless @validation.nil?
|
122
|
+
|
105
123
|
if @logging
|
106
124
|
responses = []
|
107
|
-
|
108
|
-
|
125
|
+
if @subscribe
|
126
|
+
options[:subscription_timeout] = @timeout_seconds
|
127
|
+
options[:max_messages] = @max_messages
|
128
|
+
request_process = @client.subscribe(request, options) do |raw_response|
|
129
|
+
responses << clean_response(request, raw_response)
|
130
|
+
end
|
131
|
+
request_process.wait
|
132
|
+
@subscribe = false
|
133
|
+
else
|
134
|
+
request_process = @client.request(request, options) do |raw_response|
|
135
|
+
responses << clean_response(request, raw_response)
|
136
|
+
end
|
137
|
+
request_process.wait
|
109
138
|
end
|
110
|
-
request_process.wait
|
111
139
|
@responses.concat(normalize_responses(request, responses))
|
112
140
|
else
|
113
|
-
@requests << @client.request(request) do
|
141
|
+
@requests << @client.request(request, options) do
|
114
142
|
end
|
115
143
|
end
|
116
144
|
end
|
data/lib/drntest/test-loader.rb
CHANGED
@@ -91,6 +91,16 @@ module Drntest
|
|
91
91
|
OmitDirective.new(options.first)
|
92
92
|
when :require_catalog_version
|
93
93
|
RequireCatalogVersionDirective.new(Integer(options.first))
|
94
|
+
when :enable_completion
|
95
|
+
EnableCompletionDirective.new
|
96
|
+
when :disable_completion
|
97
|
+
DisableCompletionDirective.new
|
98
|
+
when :enable_validation
|
99
|
+
EnableValidationDirective.new
|
100
|
+
when :disable_validation
|
101
|
+
DisableValidationDirective.new
|
102
|
+
when :subscribe_until
|
103
|
+
SubscribeUntil.new(options)
|
94
104
|
else
|
95
105
|
UnknownDirective.new(type, options)
|
96
106
|
end
|
data/lib/drntest/test-runner.rb
CHANGED
@@ -26,6 +26,9 @@ require "drntest/engine"
|
|
26
26
|
require "drntest/input-error"
|
27
27
|
|
28
28
|
module Drntest
|
29
|
+
class EngineStalled < StandardError
|
30
|
+
end
|
31
|
+
|
29
32
|
class TestRunner
|
30
33
|
def initialize(config, target)
|
31
34
|
@config = config
|
@@ -39,6 +42,7 @@ module Drntest
|
|
39
42
|
@engine.start(@target_path)
|
40
43
|
begin
|
41
44
|
results = process_requests
|
45
|
+
raise EngineStalled.new if results.status == :no_response
|
42
46
|
ensure
|
43
47
|
@engine.stop
|
44
48
|
end
|
data/lib/drntest/version.rb
CHANGED
metadata
CHANGED
@@ -1,111 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drntest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Droonga Project
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: yajl-ruby
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: droonga-client
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
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
54
|
version: 0.1.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: packnga
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: kramdown
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - '>='
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
description: ''
|
@@ -145,17 +145,17 @@ require_paths:
|
|
145
145
|
- lib
|
146
146
|
required_ruby_version: !ruby/object:Gem::Requirement
|
147
147
|
requirements:
|
148
|
-
- -
|
148
|
+
- - '>='
|
149
149
|
- !ruby/object:Gem::Version
|
150
150
|
version: '0'
|
151
151
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
152
|
requirements:
|
153
|
-
- -
|
153
|
+
- - '>='
|
154
154
|
- !ruby/object:Gem::Version
|
155
155
|
version: '0'
|
156
156
|
requirements: []
|
157
157
|
rubyforge_project:
|
158
|
-
rubygems_version: 2.
|
158
|
+
rubygems_version: 2.4.1
|
159
159
|
signing_key:
|
160
160
|
specification_version: 4
|
161
161
|
summary: Drntest is a testing framework for Droonga. You can write a test for Droonga
|