rspec-multiprocess_runner 0.2.2 → 0.2.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 +7 -0
- data/.travis.yml +1 -1
- data/CHANGELOG.md +3 -0
- data/exe/multirspec +8 -2
- data/lib/rspec/multiprocess_runner/command_line_options.rb +6 -1
- data/lib/rspec/multiprocess_runner/coordinator.rb +33 -6
- data/lib/rspec/multiprocess_runner/rake_task.rb +5 -0
- data/lib/rspec/multiprocess_runner/version.rb +1 -1
- data/lib/rspec/multiprocess_runner/worker.rb +4 -2
- metadata +20 -30
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 203c3b7bd50cc7c856265414ea8bcf734f09c8f8
|
4
|
+
data.tar.gz: d92e105f0f5aecff2723fc65ccc46db29bd16f4c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1b678c0f53864275c7e7244d9b9c09c60524217dc9ae639062a66267574c2ae6d6c38c5f8bfc7ee9bad965e4aa6fbe4934533ba81bf66515a815e9d5a0c9fdf8
|
7
|
+
data.tar.gz: bf55bb27e8253464dd181f8f2289b6079d90bc292ea1f54d2bb13da4cd69750b93728f649b625b87a034134f74117834d8d06e164295f9394e78c621e6a118ba
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/exe/multirspec
CHANGED
@@ -12,7 +12,8 @@ coordinator = RSpec::MultiprocessRunner::Coordinator.new(
|
|
12
12
|
{
|
13
13
|
file_timeout_seconds: options.file_timeout_seconds,
|
14
14
|
example_timeout_seconds: options.example_timeout_seconds,
|
15
|
-
rspec_options: options.rspec_options
|
15
|
+
rspec_options: options.rspec_options,
|
16
|
+
log_failing_files: options.log_failing_files
|
16
17
|
}
|
17
18
|
)
|
18
19
|
|
@@ -29,4 +30,9 @@ end
|
|
29
30
|
|
30
31
|
success = coordinator.run
|
31
32
|
|
32
|
-
|
33
|
+
status = if options.log_failing_files
|
34
|
+
0
|
35
|
+
else
|
36
|
+
success ? 0 : 1
|
37
|
+
end
|
38
|
+
exit(status)
|
@@ -6,13 +6,14 @@ module RSpec::MultiprocessRunner
|
|
6
6
|
# @private
|
7
7
|
class CommandLineOptions
|
8
8
|
attr_accessor :worker_count, :file_timeout_seconds, :example_timeout_seconds,
|
9
|
-
:rspec_options, :explicit_files_or_directories, :pattern
|
9
|
+
:rspec_options, :explicit_files_or_directories, :pattern, :log_failing_files
|
10
10
|
|
11
11
|
def initialize
|
12
12
|
self.worker_count = 3
|
13
13
|
self.file_timeout_seconds = nil
|
14
14
|
self.example_timeout_seconds = 15
|
15
15
|
self.pattern = "**/*_spec.rb"
|
16
|
+
self.log_failing_files = false
|
16
17
|
self.rspec_options = []
|
17
18
|
end
|
18
19
|
|
@@ -87,6 +88,10 @@ module RSpec::MultiprocessRunner
|
|
87
88
|
self.pattern = pattern
|
88
89
|
end
|
89
90
|
|
91
|
+
parser.on("--log-failing-files", "Write failing spec files to multiprocess.failures") do |bool|
|
92
|
+
self.log_failing_files = bool
|
93
|
+
end
|
94
|
+
|
90
95
|
parser.on_tail("-h", "--help", "Prints this help") do
|
91
96
|
help_requested!
|
92
97
|
end
|
@@ -8,6 +8,7 @@ module RSpec::MultiprocessRunner
|
|
8
8
|
@worker_count = worker_count
|
9
9
|
@file_timeout_seconds = options[:file_timeout_seconds]
|
10
10
|
@example_timeout_seconds = options[:example_timeout_seconds]
|
11
|
+
@log_failing_files = options[:log_failing_files]
|
11
12
|
@rspec_options = options[:rspec_options]
|
12
13
|
@spec_files = sort_files(files)
|
13
14
|
@workers = []
|
@@ -174,9 +175,12 @@ module RSpec::MultiprocessRunner
|
|
174
175
|
by_status_and_time = combine_example_results.each_with_object({}) do |result, idx|
|
175
176
|
(idx[result.status] ||= []) << result
|
176
177
|
end
|
178
|
+
count_examples(by_status_and_time)
|
179
|
+
|
177
180
|
print_skipped_files_details
|
178
181
|
print_pending_example_details(by_status_and_time["pending"])
|
179
182
|
print_failed_example_details(by_status_and_time["failed"])
|
183
|
+
log_failed_files(by_status_and_time["failed"]) if @log_failing_files
|
180
184
|
print_failed_process_details
|
181
185
|
puts
|
182
186
|
print_elapsed_time(elapsed)
|
@@ -192,6 +196,13 @@ module RSpec::MultiprocessRunner
|
|
192
196
|
(@workers + @stopped_workers).detect { |w| w.example_results.detect { |r| r.status == "failed" } }
|
193
197
|
end
|
194
198
|
|
199
|
+
def count_examples(example_results)
|
200
|
+
@metadata = {}
|
201
|
+
@metadata[:example_count] = example_results.map { |status, results| results.size }.inject(0) { |sum, ct| sum + ct }
|
202
|
+
@metadata[:failure_count] = example_results["failed"] ? example_results["failed"].size : 0
|
203
|
+
@metadata[:pending_count] = example_results["pending"] ? example_results["pending"].size : 0
|
204
|
+
end
|
205
|
+
|
195
206
|
def print_skipped_files_details
|
196
207
|
return if @spec_files.empty?
|
197
208
|
puts
|
@@ -222,22 +233,38 @@ module RSpec::MultiprocessRunner
|
|
222
233
|
end
|
223
234
|
end
|
224
235
|
|
236
|
+
def log_failed_files(failed_example_results)
|
237
|
+
return if failed_example_results.nil?
|
238
|
+
return if failed_example_results.size > @metadata[:example_count] / 10.0
|
239
|
+
|
240
|
+
failing_files = Hash.new { |h, k| h[k] = 0 }
|
241
|
+
failed_example_results.each do |failure|
|
242
|
+
failing_files[failure.file_path] += 1
|
243
|
+
end
|
244
|
+
|
245
|
+
puts
|
246
|
+
puts "Writing failures to file: multiprocess.failures"
|
247
|
+
File.open("multiprocess.failures", "w+") do |io|
|
248
|
+
failing_files.each do |(k, _)|
|
249
|
+
io << k
|
250
|
+
io << "\n"
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
225
255
|
# Copied from RSpec
|
226
256
|
def pluralize(count, string)
|
227
257
|
"#{count} #{string}#{'s' unless count.to_f == 1}"
|
228
258
|
end
|
229
259
|
|
230
260
|
def print_example_counts(by_status_and_time)
|
231
|
-
example_count = by_status_and_time.map { |status, results| results.size }.inject(0) { |sum, ct| sum + ct }
|
232
|
-
failure_count = by_status_and_time["failed"] ? by_status_and_time["failed"].size : 0
|
233
|
-
pending_count = by_status_and_time["pending"] ? by_status_and_time["pending"].size : 0
|
234
261
|
process_failure_count = failed_workers.size
|
235
262
|
skipped_count = @spec_files.size
|
236
263
|
|
237
264
|
# Copied from RSpec
|
238
|
-
summary = pluralize(example_count, "example")
|
239
|
-
summary << ", " << pluralize(failure_count, "failure")
|
240
|
-
summary << ", #{pending_count} pending" if pending_count > 0
|
265
|
+
summary = pluralize(@metadata[:example_count], "example")
|
266
|
+
summary << ", " << pluralize(@metadata[:failure_count], "failure")
|
267
|
+
summary << ", #{@metadata[:pending_count]} pending" if @metadata[:pending_count] > 0
|
241
268
|
summary << ", " << pluralize(process_failure_count, "failed proc") if process_failure_count > 0
|
242
269
|
summary << ", " << pluralize(skipped_count, "skipped file") if skipped_count > 0
|
243
270
|
puts summary
|
@@ -52,6 +52,8 @@ module RSpec::MultiprocessRunner
|
|
52
52
|
# rspec binary from the loaded rspec-core gem.
|
53
53
|
attr_accessor :multirspec_path
|
54
54
|
|
55
|
+
attr_accessor :log_failing_files
|
56
|
+
|
55
57
|
# Command line options to pass to the RSpec workers. Defaults to `nil`.
|
56
58
|
attr_accessor :rspec_opts
|
57
59
|
|
@@ -107,6 +109,9 @@ module RSpec::MultiprocessRunner
|
|
107
109
|
if pattern
|
108
110
|
cmd_parts << '--pattern' << pattern
|
109
111
|
end
|
112
|
+
if log_failing_files
|
113
|
+
cmd_parts << '--log-failing-files'
|
114
|
+
end
|
110
115
|
if files_or_directories
|
111
116
|
cmd_parts.concat(files_or_directories)
|
112
117
|
end
|
@@ -206,7 +206,8 @@ module RSpec::MultiprocessRunner
|
|
206
206
|
example_status: example_status,
|
207
207
|
description: description,
|
208
208
|
line_number: line_number,
|
209
|
-
details: details
|
209
|
+
details: details,
|
210
|
+
file_path: @current_file
|
210
211
|
)
|
211
212
|
end
|
212
213
|
|
@@ -295,12 +296,13 @@ module RSpec::MultiprocessRunner
|
|
295
296
|
|
296
297
|
# @private
|
297
298
|
class ExampleResult
|
298
|
-
attr_reader :status, :description, :details, :time_finished
|
299
|
+
attr_reader :status, :description, :details, :file_path, :time_finished
|
299
300
|
|
300
301
|
def initialize(example_complete_message)
|
301
302
|
@status = example_complete_message["example_status"]
|
302
303
|
@description = example_complete_message["description"]
|
303
304
|
@details = example_complete_message["details"]
|
305
|
+
@file_path = example_complete_message["file_path"]
|
304
306
|
@time_finished = Time.now
|
305
307
|
end
|
306
308
|
end
|
metadata
CHANGED
@@ -1,84 +1,75 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-multiprocess_runner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Rhett Sutphin
|
9
8
|
autorequire:
|
10
9
|
bindir: exe
|
11
10
|
cert_chain: []
|
12
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-12 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rspec-core
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '2.0'
|
22
|
-
- - <
|
20
|
+
- - "<"
|
23
21
|
- !ruby/object:Gem::Version
|
24
22
|
version: 2.99.0
|
25
23
|
type: :runtime
|
26
24
|
prerelease: false
|
27
25
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
26
|
requirements:
|
30
|
-
- - ~>
|
27
|
+
- - "~>"
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: '2.0'
|
33
|
-
- - <
|
30
|
+
- - "<"
|
34
31
|
- !ruby/object:Gem::Version
|
35
32
|
version: 2.99.0
|
36
33
|
- !ruby/object:Gem::Dependency
|
37
34
|
name: bundler
|
38
35
|
requirement: !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
36
|
requirements:
|
41
|
-
- - ~>
|
37
|
+
- - "~>"
|
42
38
|
- !ruby/object:Gem::Version
|
43
39
|
version: '1.10'
|
44
40
|
type: :development
|
45
41
|
prerelease: false
|
46
42
|
version_requirements: !ruby/object:Gem::Requirement
|
47
|
-
none: false
|
48
43
|
requirements:
|
49
|
-
- - ~>
|
44
|
+
- - "~>"
|
50
45
|
- !ruby/object:Gem::Version
|
51
46
|
version: '1.10'
|
52
47
|
- !ruby/object:Gem::Dependency
|
53
48
|
name: rake
|
54
49
|
requirement: !ruby/object:Gem::Requirement
|
55
|
-
none: false
|
56
50
|
requirements:
|
57
|
-
- - ~>
|
51
|
+
- - "~>"
|
58
52
|
- !ruby/object:Gem::Version
|
59
53
|
version: '10.0'
|
60
54
|
type: :development
|
61
55
|
prerelease: false
|
62
56
|
version_requirements: !ruby/object:Gem::Requirement
|
63
|
-
none: false
|
64
57
|
requirements:
|
65
|
-
- - ~>
|
58
|
+
- - "~>"
|
66
59
|
- !ruby/object:Gem::Version
|
67
60
|
version: '10.0'
|
68
61
|
- !ruby/object:Gem::Dependency
|
69
62
|
name: rspec
|
70
63
|
requirement: !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
64
|
requirements:
|
73
|
-
- -
|
65
|
+
- - ">="
|
74
66
|
- !ruby/object:Gem::Version
|
75
67
|
version: '0'
|
76
68
|
type: :development
|
77
69
|
prerelease: false
|
78
70
|
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
none: false
|
80
71
|
requirements:
|
81
|
-
- -
|
72
|
+
- - ">="
|
82
73
|
- !ruby/object:Gem::Version
|
83
74
|
version: '0'
|
84
75
|
description:
|
@@ -89,9 +80,9 @@ executables:
|
|
89
80
|
extensions: []
|
90
81
|
extra_rdoc_files: []
|
91
82
|
files:
|
92
|
-
- .gitignore
|
93
|
-
- .rspec
|
94
|
-
- .travis.yml
|
83
|
+
- ".gitignore"
|
84
|
+
- ".rspec"
|
85
|
+
- ".travis.yml"
|
95
86
|
- CHANGELOG.md
|
96
87
|
- Gemfile
|
97
88
|
- LICENSE.txt
|
@@ -112,26 +103,25 @@ files:
|
|
112
103
|
homepage: https://github.com/cdd/rspec-multiprocess_runner
|
113
104
|
licenses:
|
114
105
|
- MIT
|
106
|
+
metadata: {}
|
115
107
|
post_install_message:
|
116
108
|
rdoc_options: []
|
117
109
|
require_paths:
|
118
110
|
- lib
|
119
111
|
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
-
none: false
|
121
112
|
requirements:
|
122
|
-
- -
|
113
|
+
- - ">="
|
123
114
|
- !ruby/object:Gem::Version
|
124
115
|
version: '0'
|
125
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
|
-
none: false
|
127
117
|
requirements:
|
128
|
-
- -
|
118
|
+
- - ">="
|
129
119
|
- !ruby/object:Gem::Version
|
130
120
|
version: '0'
|
131
121
|
requirements: []
|
132
122
|
rubyforge_project:
|
133
|
-
rubygems_version:
|
123
|
+
rubygems_version: 2.4.5.1
|
134
124
|
signing_key:
|
135
|
-
specification_version:
|
125
|
+
specification_version: 4
|
136
126
|
summary: A runner for RSpec 2 that uses multiple processes to execute specs in parallel
|
137
127
|
test_files: []
|