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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +48 -0
  3. data/.gitignore +8 -0
  4. data/.rubocop.yml +63 -0
  5. data/.travis.yml +6 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +12 -0
  8. data/Gemfile.lock +53 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +115 -0
  11. data/Rakefile +12 -0
  12. data/bin/console +15 -0
  13. data/bin/rake +29 -0
  14. data/bin/rubocop +29 -0
  15. data/bin/setup +8 -0
  16. data/bin/srb +29 -0
  17. data/lib/minitest/distributed.rb +36 -0
  18. data/lib/minitest/distributed/configuration.rb +53 -0
  19. data/lib/minitest/distributed/coordinators/coordinator_interface.rb +29 -0
  20. data/lib/minitest/distributed/coordinators/memory_coordinator.rb +67 -0
  21. data/lib/minitest/distributed/coordinators/redis_coordinator.rb +387 -0
  22. data/lib/minitest/distributed/enqueued_runnable.rb +88 -0
  23. data/lib/minitest/distributed/filters/exclude_filter.rb +35 -0
  24. data/lib/minitest/distributed/filters/filter_interface.rb +25 -0
  25. data/lib/minitest/distributed/filters/include_filter.rb +35 -0
  26. data/lib/minitest/distributed/reporters/distributed_progress_reporter.rb +76 -0
  27. data/lib/minitest/distributed/reporters/distributed_summary_reporter.rb +48 -0
  28. data/lib/minitest/distributed/reporters/redis_coordinator_warnings_reporter.rb +61 -0
  29. data/lib/minitest/distributed/result_aggregate.rb +67 -0
  30. data/lib/minitest/distributed/result_type.rb +28 -0
  31. data/lib/minitest/distributed/test_runner.rb +37 -0
  32. data/lib/minitest/distributed/test_selector.rb +54 -0
  33. data/lib/minitest/distributed/version.rb +8 -0
  34. data/lib/minitest/distributed_plugin.rb +51 -0
  35. data/minitest-distributed.gemspec +50 -0
  36. data/sorbet/config +2 -0
  37. data/sorbet/rbi/minitest.rbi +238 -0
  38. data/sorbet/rbi/rbconfig.rbi +6 -0
  39. data/sorbet/rbi/redis.rbi +70 -0
  40. data/sorbet/rbi/winsize.rbi +7 -0
  41. metadata +142 -0
@@ -0,0 +1,6 @@
1
+ # typed: true
2
+ module RbConfig
3
+ sig { returns(String) }
4
+ def self.ruby
5
+ end
6
+ end
@@ -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
@@ -0,0 +1,7 @@
1
+ class IO
2
+ sig { returns([Integer, Integer]) }
3
+ def winsize; end
4
+
5
+ sig { returns(IO) }
6
+ def self.console; end
7
+ 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: []