minitest-distributed 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/minitest/distributed/configuration.rb +8 -2
- data/lib/minitest/distributed/coordinators/memory_coordinator.rb +3 -2
- data/lib/minitest/distributed/coordinators/redis_coordinator.rb +11 -8
- data/lib/minitest/distributed/enqueued_runnable.rb +15 -10
- data/lib/minitest/distributed/reporters/distributed_progress_reporter.rb +11 -3
- data/lib/minitest/distributed/version.rb +1 -1
- data/lib/minitest/distributed_plugin.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 829613fe27e895208e49a116fd8f72e3685e1e91eb95209db170ad51707d2115
|
4
|
+
data.tar.gz: 1e0932553fe7d007e40392f53f80dd49eb6dafd533077d8234d4feb86629e8d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71dbe335df12886c11af8f438dec954678ad9d5841847e44521e492dfc641eddc76da66e73c0f5d96840f75746e027f3304d08ed46171817a0541d773495b32f
|
7
|
+
data.tar.gz: fb5a8f6f781c71944df6228e4da980b29f2bd01fd9733aebe10437ac8eaa867d7d55b49397ad2d4f1acca9d503e8b2a8191fcfc8f935675a78f9d75208e0a39f
|
@@ -27,9 +27,10 @@ module Minitest
|
|
27
27
|
)
|
28
28
|
end
|
29
29
|
|
30
|
-
sig { params(opts: OptionParser).returns(T.attached_class) }
|
31
|
-
def from_command_line_options(opts)
|
30
|
+
sig { params(opts: OptionParser, options: T::Hash[Symbol, T.untyped]).returns(T.attached_class) }
|
31
|
+
def from_command_line_options(opts, options)
|
32
32
|
configuration = from_env
|
33
|
+
configuration.progress = options[:io].tty?
|
33
34
|
|
34
35
|
opts.on('--coordinator=URI', "The URI pointing to the coordinator") do |uri|
|
35
36
|
configuration.coordinator_uri = URI.parse(uri)
|
@@ -66,6 +67,10 @@ module Minitest
|
|
66
67
|
configuration.retry_failures = enabled
|
67
68
|
end
|
68
69
|
|
70
|
+
opts.on('--[no-]progress', "Show progress during the test run") do |enabled|
|
71
|
+
configuration.progress = enabled
|
72
|
+
end
|
73
|
+
|
69
74
|
configuration
|
70
75
|
end
|
71
76
|
end
|
@@ -80,6 +85,7 @@ module Minitest
|
|
80
85
|
prop :max_attempts, Integer, default: DEFAULT_MAX_ATTEMPTS
|
81
86
|
prop :max_failures, T.nilable(Integer)
|
82
87
|
prop :retry_failures, T::Boolean, default: true
|
88
|
+
prop :progress, T::Boolean, default: false
|
83
89
|
|
84
90
|
sig { returns(Coordinators::CoordinatorInterface) }
|
85
91
|
def coordinator
|
@@ -66,8 +66,9 @@ module Minitest
|
|
66
66
|
|
67
67
|
reporter.prerecord(enqueued_runnable.runnable_class, enqueued_runnable.method_name)
|
68
68
|
|
69
|
-
|
70
|
-
|
69
|
+
initial_result = enqueued_runnable.run
|
70
|
+
enqueued_result = enqueued_runnable.commit_result(initial_result) do |result_to_commit|
|
71
|
+
if ResultType.of(result_to_commit) == ResultType::Requeued
|
71
72
|
queue << enqueued_runnable.next_attempt
|
72
73
|
end
|
73
74
|
EnqueuedRunnable::Result::Commit.success
|
@@ -440,15 +440,18 @@ module Minitest
|
|
440
440
|
|
441
441
|
local_results.size += batch.size
|
442
442
|
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
443
|
+
# Call `prerecord` on the recorder for all tests in the batch, and run them.
|
444
|
+
results = batch.map do |enqueued_runnable|
|
445
|
+
reporter.prerecord(enqueued_runnable.runnable_class, enqueued_runnable.method_name)
|
446
|
+
[enqueued_runnable, enqueued_runnable.run]
|
447
|
+
end
|
448
448
|
|
449
|
-
|
450
|
-
|
451
|
-
|
449
|
+
# Try to commit all the results of this batch to Redis
|
450
|
+
runnable_results = []
|
451
|
+
redis.multi do
|
452
|
+
results.each do |enqueued_runnable, initial_result|
|
453
|
+
runnable_results << enqueued_runnable.commit_result(initial_result) do |result_to_commit|
|
454
|
+
if ResultType.of(result_to_commit) == ResultType::Requeued
|
452
455
|
sadd_future = redis.sadd(key('retry_set'), enqueued_runnable.attempt_id)
|
453
456
|
EnqueuedRunnable::Result::Commit.new { sadd_future.value }
|
454
457
|
else
|
@@ -202,26 +202,31 @@ module Minitest
|
|
202
202
|
|
203
203
|
sig do
|
204
204
|
params(
|
205
|
+
initial_result: Minitest::Result,
|
205
206
|
block: T.proc.params(arg0: Minitest::Result).returns(EnqueuedRunnable::Result::Commit)
|
206
207
|
).returns(EnqueuedRunnable::Result)
|
207
208
|
end
|
208
|
-
def
|
209
|
-
|
209
|
+
def commit_result(initial_result, &block)
|
210
|
+
EnqueuedRunnable::Result.new(
|
211
|
+
enqueued_runnable: self,
|
212
|
+
initial_result: initial_result,
|
213
|
+
commit: block.call(initial_result),
|
214
|
+
)
|
215
|
+
end
|
216
|
+
|
217
|
+
sig { returns(Minitest::Result) }
|
218
|
+
def run
|
219
|
+
if attempts_exhausted?
|
210
220
|
attempts_exhausted_result
|
211
221
|
else
|
212
222
|
result = Minitest.run_one_method(runnable_class, method_name)
|
213
223
|
result_type = ResultType.of(result)
|
214
224
|
if (result_type == ResultType::Error || result_type == ResultType::Failed) && !final_attempt?
|
215
|
-
|
225
|
+
Minitest::Requeue.wrap(result, attempt: attempt, max_attempts: max_attempts)
|
226
|
+
else
|
227
|
+
result
|
216
228
|
end
|
217
|
-
result
|
218
229
|
end
|
219
|
-
|
220
|
-
EnqueuedRunnable::Result.new(
|
221
|
-
enqueued_runnable: self,
|
222
|
-
initial_result: initial_result,
|
223
|
-
commit: block.call(initial_result),
|
224
|
-
)
|
225
230
|
end
|
226
231
|
|
227
232
|
sig { returns(T.self_type) }
|
@@ -20,6 +20,7 @@ module Minitest
|
|
20
20
|
end
|
21
21
|
@coordinator = T.let(options[:distributed].coordinator, Coordinators::CoordinatorInterface)
|
22
22
|
@window_line_width = T.let(nil, T.nilable(Integer))
|
23
|
+
@show_progress = T.let(options[:distributed].progress, T::Boolean)
|
23
24
|
end
|
24
25
|
|
25
26
|
sig { override.void }
|
@@ -37,7 +38,7 @@ module Minitest
|
|
37
38
|
|
38
39
|
sig { override.params(klass: T.class_of(Runnable), name: String).void }
|
39
40
|
def prerecord(klass, name)
|
40
|
-
if
|
41
|
+
if show_progress?
|
41
42
|
clear_current_line
|
42
43
|
io.print("[#{results.acks}/#{results.size}] #{klass}##{name}".slice(0...window_line_width))
|
43
44
|
end
|
@@ -45,7 +46,7 @@ module Minitest
|
|
45
46
|
|
46
47
|
sig { override.params(result: Minitest::Result).void }
|
47
48
|
def record(result)
|
48
|
-
clear_current_line if
|
49
|
+
clear_current_line if show_progress?
|
49
50
|
|
50
51
|
case (result_type = ResultType.of(result))
|
51
52
|
when ResultType::Passed
|
@@ -61,11 +62,16 @@ module Minitest
|
|
61
62
|
|
62
63
|
sig { override.void }
|
63
64
|
def report
|
64
|
-
clear_current_line if
|
65
|
+
clear_current_line if show_progress?
|
65
66
|
end
|
66
67
|
|
67
68
|
private
|
68
69
|
|
70
|
+
sig { returns(T::Boolean) }
|
71
|
+
def show_progress?
|
72
|
+
@show_progress
|
73
|
+
end
|
74
|
+
|
69
75
|
sig { void }
|
70
76
|
def clear_current_line
|
71
77
|
io.print("\r" + (' ' * window_line_width) + "\r")
|
@@ -76,6 +82,8 @@ module Minitest
|
|
76
82
|
@window_line_width ||= begin
|
77
83
|
_height, width = io.winsize
|
78
84
|
width > 0 ? width : 80
|
85
|
+
rescue Errno::ENOTTY
|
86
|
+
80
|
79
87
|
end
|
80
88
|
end
|
81
89
|
|
@@ -12,7 +12,7 @@ module Minitest
|
|
12
12
|
options[:disable_distributed] = true
|
13
13
|
end
|
14
14
|
|
15
|
-
options[:distributed] = Minitest::Distributed::Configuration.from_command_line_options(opts)
|
15
|
+
options[:distributed] = Minitest::Distributed::Configuration.from_command_line_options(opts, options)
|
16
16
|
end
|
17
17
|
|
18
18
|
def plugin_distributed_init(options)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minitest-distributed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Willem van Bergen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|