minitest-distributed 0.1.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 +7 -0
- data/.github/workflows/ruby.yml +48 -0
- data/.gitignore +8 -0
- data/.rubocop.yml +63 -0
- data/.travis.yml +6 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +53 -0
- data/LICENSE.txt +21 -0
- data/README.md +115 -0
- data/Rakefile +12 -0
- data/bin/console +15 -0
- data/bin/rake +29 -0
- data/bin/rubocop +29 -0
- data/bin/setup +8 -0
- data/bin/srb +29 -0
- data/lib/minitest/distributed.rb +36 -0
- data/lib/minitest/distributed/configuration.rb +53 -0
- data/lib/minitest/distributed/coordinators/coordinator_interface.rb +29 -0
- data/lib/minitest/distributed/coordinators/memory_coordinator.rb +67 -0
- data/lib/minitest/distributed/coordinators/redis_coordinator.rb +387 -0
- data/lib/minitest/distributed/enqueued_runnable.rb +88 -0
- data/lib/minitest/distributed/filters/exclude_filter.rb +35 -0
- data/lib/minitest/distributed/filters/filter_interface.rb +25 -0
- data/lib/minitest/distributed/filters/include_filter.rb +35 -0
- data/lib/minitest/distributed/reporters/distributed_progress_reporter.rb +76 -0
- data/lib/minitest/distributed/reporters/distributed_summary_reporter.rb +48 -0
- data/lib/minitest/distributed/reporters/redis_coordinator_warnings_reporter.rb +61 -0
- data/lib/minitest/distributed/result_aggregate.rb +67 -0
- data/lib/minitest/distributed/result_type.rb +28 -0
- data/lib/minitest/distributed/test_runner.rb +37 -0
- data/lib/minitest/distributed/test_selector.rb +54 -0
- data/lib/minitest/distributed/version.rb +8 -0
- data/lib/minitest/distributed_plugin.rb +51 -0
- data/minitest-distributed.gemspec +50 -0
- data/sorbet/config +2 -0
- data/sorbet/rbi/minitest.rbi +238 -0
- data/sorbet/rbi/rbconfig.rbi +6 -0
- data/sorbet/rbi/redis.rbi +70 -0
- data/sorbet/rbi/winsize.rbi +7 -0
- metadata +142 -0
@@ -0,0 +1,70 @@
|
|
1
|
+
# typed: true
|
2
|
+
|
3
|
+
class Redis
|
4
|
+
class Error < StandardError
|
5
|
+
end
|
6
|
+
|
7
|
+
class CommandError < Error
|
8
|
+
end
|
9
|
+
|
10
|
+
sig { params(options: T::Hash[Symbol, T.untyped]).void }
|
11
|
+
def initialize(options); end
|
12
|
+
|
13
|
+
sig { void }
|
14
|
+
def flushdb; end
|
15
|
+
|
16
|
+
sig { params(block: T.proc.void).returns(T::Array[T.untyped]) }
|
17
|
+
def pipelined(&block); end
|
18
|
+
|
19
|
+
sig { params(block: T.proc.void).returns(T::Array[T.untyped]) }
|
20
|
+
def multi(&block); end
|
21
|
+
|
22
|
+
sig { params(script: String, keys: T::Array[String], argv: T::Array[String]).returns(T.untyped) }
|
23
|
+
def eval(script, keys: [], argv: []); end
|
24
|
+
|
25
|
+
sig { params(script_sha: String, keys: T::Array[String], argv: T::Array[String]).returns(T.untyped) }
|
26
|
+
def evalsha(script_sha, keys: [], argv: []); end
|
27
|
+
|
28
|
+
sig { params(action: Symbol, script: String).returns(String) }
|
29
|
+
def script(action, script); end
|
30
|
+
|
31
|
+
sig { params(key: String).returns(String) }
|
32
|
+
def get(key); end
|
33
|
+
|
34
|
+
sig { params(keys: String).void }
|
35
|
+
def del(*keys); end
|
36
|
+
|
37
|
+
sig { params(keys: String).returns(T::Array[T.nilable(String)]) }
|
38
|
+
def mget(*keys); end
|
39
|
+
|
40
|
+
sig { params(key: String, value: T.untyped).void }
|
41
|
+
def set(key, value); end
|
42
|
+
|
43
|
+
sig { params(key: String, value: T.untyped).returns(T::Boolean) }
|
44
|
+
def setnx(key, value); end
|
45
|
+
|
46
|
+
sig { params(key_value_pairs: T.untyped).returns(T::Boolean) }
|
47
|
+
def mset(*key_value_pairs); end
|
48
|
+
|
49
|
+
sig { params(key_value_pairs: T.untyped).returns(T::Boolean) }
|
50
|
+
def msetnx(*key_value_pairs); end
|
51
|
+
|
52
|
+
sig { params(key: String).void }
|
53
|
+
def incr(key); end
|
54
|
+
|
55
|
+
sig { params(key: String, value: T.untyped).void }
|
56
|
+
def lpush(key, value); end
|
57
|
+
|
58
|
+
sig { params(key: String, start: Integer, stop: Integer).void }
|
59
|
+
def lrange(key, start, stop); end
|
60
|
+
|
61
|
+
sig { params(key: String, amount: Integer).void }
|
62
|
+
def incrby(key, amount); end
|
63
|
+
|
64
|
+
def xadd(*); end
|
65
|
+
def xack(*); end
|
66
|
+
def xgroup(*); end
|
67
|
+
def xpending(*); end
|
68
|
+
def xreadgroup(*); end
|
69
|
+
def xclaim(*); end
|
70
|
+
end
|
metadata
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: minitest-distributed
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Willem van Bergen
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-06-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.12'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.12'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: redis
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.1'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sorbet-runtime
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: |
|
56
|
+
minitest-distributed is a plugin for minitest for executing tests on a
|
57
|
+
distributed set of unreliable workers.
|
58
|
+
|
59
|
+
When a test suite grows large enough, it inevitable gets too slow to run
|
60
|
+
on a single machine to give timely feedback to developers. This plugins
|
61
|
+
combats this issue by distributing the full test suite to a set of workers.
|
62
|
+
Every worker is a consuming from a single queue, so the tests get evenly
|
63
|
+
distributed and all workers will finish around the same time. Redis is used
|
64
|
+
as coordinator, but when using this plugin without having access to Redis,
|
65
|
+
it will use an in-memory coordinator.
|
66
|
+
|
67
|
+
Using multiple (virtual) machines for a test run is an (additional) source
|
68
|
+
of flakiness. To combat flakiness, minitest-distributed implements resiliency
|
69
|
+
patterns, like re-running a test on a different worker on failure, and
|
70
|
+
a circuit breaker for misbehaving workers.
|
71
|
+
email:
|
72
|
+
- willem@vanbergen.org
|
73
|
+
executables: []
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- ".github/workflows/ruby.yml"
|
78
|
+
- ".gitignore"
|
79
|
+
- ".rubocop.yml"
|
80
|
+
- ".travis.yml"
|
81
|
+
- CODE_OF_CONDUCT.md
|
82
|
+
- Gemfile
|
83
|
+
- Gemfile.lock
|
84
|
+
- LICENSE.txt
|
85
|
+
- README.md
|
86
|
+
- Rakefile
|
87
|
+
- bin/console
|
88
|
+
- bin/rake
|
89
|
+
- bin/rubocop
|
90
|
+
- bin/setup
|
91
|
+
- bin/srb
|
92
|
+
- lib/minitest/distributed.rb
|
93
|
+
- lib/minitest/distributed/configuration.rb
|
94
|
+
- lib/minitest/distributed/coordinators/coordinator_interface.rb
|
95
|
+
- lib/minitest/distributed/coordinators/memory_coordinator.rb
|
96
|
+
- lib/minitest/distributed/coordinators/redis_coordinator.rb
|
97
|
+
- lib/minitest/distributed/enqueued_runnable.rb
|
98
|
+
- lib/minitest/distributed/filters/exclude_filter.rb
|
99
|
+
- lib/minitest/distributed/filters/filter_interface.rb
|
100
|
+
- lib/minitest/distributed/filters/include_filter.rb
|
101
|
+
- lib/minitest/distributed/reporters/distributed_progress_reporter.rb
|
102
|
+
- lib/minitest/distributed/reporters/distributed_summary_reporter.rb
|
103
|
+
- lib/minitest/distributed/reporters/redis_coordinator_warnings_reporter.rb
|
104
|
+
- lib/minitest/distributed/result_aggregate.rb
|
105
|
+
- lib/minitest/distributed/result_type.rb
|
106
|
+
- lib/minitest/distributed/test_runner.rb
|
107
|
+
- lib/minitest/distributed/test_selector.rb
|
108
|
+
- lib/minitest/distributed/version.rb
|
109
|
+
- lib/minitest/distributed_plugin.rb
|
110
|
+
- minitest-distributed.gemspec
|
111
|
+
- sorbet/config
|
112
|
+
- sorbet/rbi/minitest.rbi
|
113
|
+
- sorbet/rbi/rbconfig.rbi
|
114
|
+
- sorbet/rbi/redis.rbi
|
115
|
+
- sorbet/rbi/winsize.rbi
|
116
|
+
homepage: https://github.com/Shopify/minitest-distributed
|
117
|
+
licenses:
|
118
|
+
- MIT
|
119
|
+
metadata:
|
120
|
+
allowed_push_host: https://rubygems.org
|
121
|
+
homepage_uri: https://github.com/Shopify/minitest-distributed
|
122
|
+
source_code_uri: https://github.com/Shopify/minitest-distributed
|
123
|
+
post_install_message:
|
124
|
+
rdoc_options: []
|
125
|
+
require_paths:
|
126
|
+
- lib
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 2.3.0
|
132
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
requirements: []
|
138
|
+
rubygems_version: 3.0.3
|
139
|
+
signing_key:
|
140
|
+
specification_version: 4
|
141
|
+
summary: Distributed test executor plugin for Minitest
|
142
|
+
test_files: []
|