minitest-parallel_fork 1.1.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 42db9e813710ee5326a0df5f24f4b5deb361cc21372e6a87124008039526cddc
4
- data.tar.gz: e29d3ab12e2559a840a9bf92dd4653f0e98397c0381167c3f1dbb1fc6c7391f7
3
+ metadata.gz: b7def66702fe6ea3e7cf52578a812f0ecdbb4b3545c2bd4d04ee5ff73a417af5
4
+ data.tar.gz: 138a5104f9f344284e806a6b90deb20d61fdf2b16562488b8afc3917f9d8738d
5
5
  SHA512:
6
- metadata.gz: 4e45f180446e10b90ab9aaa7051261eec1e5c472422a1b5c522f7d58cd44f4f0adef68f2d875f3061c4902662e2ed190208d8448af6d89b6faf78445e132c9dc
7
- data.tar.gz: 5d8b6fecb607917c6bc3940ad758eae573a32c5f5b803f68bddc2e3bada9a50c0668e0ddfdb84d9cd14ee357a53ae6b15cd2ca33c24830cf1b57ded37b92b463
6
+ metadata.gz: cbc75286347260d6a6cd54e3c8bb1c21f1cd3c9c24c2e843a3942ab7056fc53e4ee092a4a65cb66e52816433a96dfbdfd338b871e334acc1e973fa80ad184d6c
7
+ data.tar.gz: f882ac98930a53fa6ec7d02b3edf50bf9a34b3bb7ce17f72b834879313df0f251c9aa23ea45b5cb1f4d02e969933728dca5ec7f1e8898c3c4cc9b2e7d95fe487
data/CHANGELOG CHANGED
@@ -1,3 +1,19 @@
1
+ === 1.3.0 (2022-07-05)
2
+
3
+ * Bump minimum minitest version to 5.15.0 (jeremyevans)
4
+
5
+ * Detect reporter to use by looking for specific methods, instead of specifically for a Minitest::StatisticsReporter (jeremyevans) (#8)
6
+
7
+ === 1.2.0 (2021-08-16)
8
+
9
+ * Work correctly with Minitest 5.14+ (jeremyevans)
10
+
11
+ * Add on_parallel_fork_marshal_failure hook for handling marshal failures (child process exiting) (jeremyevans)
12
+
13
+ === 1.1.2 (2018-07-05)
14
+
15
+ * Handle raised exceptions containing unmarshallable data (jeremyevans)
16
+
1
17
  === 1.1.1 (2018-05-07)
2
18
 
3
19
  * Work around marshalling issue when there are failures in *_all hooks when using minitest-hooks (jeremyevans)
data/README.rdoc CHANGED
@@ -59,6 +59,15 @@ disconnected, and after forking, the database name is changed in each child to r
59
59
  a child-specific database, so that the child processes do not share a database and are
60
60
  thus independent.
61
61
 
62
+ There is also a hook for debugging. +on_parallel_fork_marshal_failure+ is called if
63
+ there is an error unmarshalling data sent from the child process to the parent process.
64
+ This can happen if one of the child processes exits unexpected during the test, before
65
+ it reports results.
66
+
67
+ Minitest.on_parallel_fork_marshal_failure do
68
+ # Gather relevant logs for more debugging
69
+ end
70
+
62
71
  == ActiveRecord
63
72
 
64
73
  To use this with Rails/ActiveRecord, you probably want to use hooks similar to:
@@ -6,18 +6,28 @@ module Minitest
6
6
  def self.before_parallel_fork(&block)
7
7
  @before_parallel_fork = block
8
8
  end
9
+ @before_parallel_fork = nil
9
10
 
10
11
  # Set the after_parallel_fork block to the given block
11
12
  def self.after_parallel_fork(i=nil, &block)
12
13
  @after_parallel_fork = block
13
14
  end
15
+ @after_parallel_fork = nil
16
+
17
+ # Set the on_parallel_fork_marshal_failure block to the given block
18
+ def self.on_parallel_fork_marshal_failure(&block)
19
+ @on_parallel_fork_marshal_failure = block
20
+ end
21
+ @on_parallel_fork_marshal_failure = nil
14
22
 
15
23
  module Unparallelize
16
24
  define_method(:run_one_method, &Minitest::Test.method(:run_one_method))
17
25
  end
18
26
 
19
27
  def self.parallel_fork_stat_reporter(reporter)
20
- reporter.reporters.detect{|rep| rep.is_a?(StatisticsReporter)}
28
+ reporter.reporters.detect do |rep|
29
+ %w'count assertions results count= assertions='.all?{|meth| rep.respond_to?(meth)}
30
+ end
21
31
  end
22
32
 
23
33
  # Override __run to use a child forks to run the speeds, which
@@ -28,15 +38,15 @@ module Minitest
28
38
 
29
39
  n = (ENV['NCPU'] || 4).to_i
30
40
  reads = []
31
- if defined?(@before_parallel_fork)
41
+ if @before_parallel_fork
32
42
  @before_parallel_fork.call
33
43
  end
34
44
  n.times do |i|
35
45
  read, write = IO.pipe.each{|io| io.binmode}
36
46
  reads << read
37
- fork do
47
+ Process.fork do
38
48
  read.close
39
- if defined?(@after_parallel_fork)
49
+ if @after_parallel_fork
40
50
  @after_parallel_fork.call(i)
41
51
  end
42
52
 
@@ -44,19 +54,13 @@ module Minitest
44
54
  suites.each_with_index{|s, j| p_suites << s if j % n == i}
45
55
  p_suites.each do |s|
46
56
  if s.is_a?(Minitest::Parallel::Test::ClassMethods)
47
- s.extend(Unparallelize)
57
+ s.extend(Unparallelize)
48
58
  end
49
59
 
50
60
  s.run(reporter, options)
51
61
  end
52
62
 
53
63
  data = %w'count assertions results'.map{|meth| stat_reporter.send(meth)}
54
- if data[-1].any?{|result| !result.is_a?(Minitest::Result)}
55
- data[-1] = data[-1].map do |result|
56
- Minitest::Result.from(result)
57
- end
58
- end
59
-
60
64
  write.write(Marshal.dump(data))
61
65
  write.close
62
66
  end
@@ -64,7 +68,14 @@ module Minitest
64
68
  end
65
69
 
66
70
  reads.map{|read| Thread.new(read, &:read)}.map(&:value).each do |data|
67
- count, assertions, results = Marshal.load(data)
71
+ begin
72
+ count, assertions, results = Marshal.load(data)
73
+ rescue ArgumentError
74
+ if @on_parallel_fork_marshal_failure
75
+ @on_parallel_fork_marshal_failure.call
76
+ end
77
+ raise
78
+ end
68
79
  stat_reporter.count += count
69
80
  stat_reporter.assertions += assertions
70
81
  stat_reporter.results.concat(results)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest-parallel_fork
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-07 00:00:00.000000000 Z
11
+ date: 2022-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -16,14 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 5.11.0
19
+ version: 5.15.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 5.15.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest-hooks
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-global_expectations
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
20
48
  type: :development
21
49
  prerelease: false
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
52
  - - ">="
25
53
  - !ruby/object:Gem::Version
26
- version: 5.11.0
54
+ version: '0'
27
55
  description: |
28
56
  minitest-parallel_fork adds fork-based parallelization to Minitest. Each test/spec
29
57
  suite is run in one of the forks, allowing this to work correctly when using
@@ -42,14 +70,15 @@ files:
42
70
  - CHANGELOG
43
71
  - MIT-LICENSE
44
72
  - README.rdoc
45
- - Rakefile
46
73
  - lib/minitest/parallel_fork.rb
47
- - spec/minitest_parallel_fork_example.rb
48
- - spec/minitest_parallel_fork_spec.rb
49
74
  homepage: http://github.com/jeremyevans/minitest-parallel_fork
50
75
  licenses:
51
76
  - MIT
52
- metadata: {}
77
+ metadata:
78
+ bug_tracker_uri: https://github.com/jeremyevans/minitest-parallel_fork/issues
79
+ changelog_uri: https://github.com/jeremyevans/minitest-parallel_fork/blob/master/CHANGELOG
80
+ mailing_list_uri: https://github.com/jeremyevans/minitest-parallel_fork/discussions
81
+ source_code_uri: https://github.com/jeremyevans/minitest-parallel_fork
53
82
  post_install_message:
54
83
  rdoc_options:
55
84
  - "--quiet"
@@ -72,8 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
101
  - !ruby/object:Gem::Version
73
102
  version: '0'
74
103
  requirements: []
75
- rubyforge_project:
76
- rubygems_version: 2.7.6
104
+ rubygems_version: 3.3.7
77
105
  signing_key:
78
106
  specification_version: 4
79
107
  summary: Fork-based parallelization for minitest
data/Rakefile DELETED
@@ -1,46 +0,0 @@
1
- require "rake"
2
- require "rake/clean"
3
-
4
- CLEAN.include ["minitest-parallel_fork-*.gem", "rdoc", "coverage"]
5
-
6
- desc "Build minitest-parallel_fork gem"
7
- task :package=>[:clean] do |p|
8
- sh %{#{FileUtils::RUBY} -S gem build minitest-parallel_fork.gemspec}
9
- end
10
-
11
- ### Specs
12
-
13
- desc "Run specs"
14
- task :spec do
15
- ENV['RUBY'] = FileUtils::RUBY
16
- sh %{#{FileUtils::RUBY} spec/minitest_parallel_fork_spec.rb}
17
- end
18
-
19
- task :default=>:spec
20
-
21
- ### RDoc
22
-
23
- RDOC_DEFAULT_OPTS = ["--quiet", "--line-numbers", "--inline-source", '--title', 'minitest-parallel_fork: fork-based parallelization for minitest']
24
-
25
- begin
26
- gem 'hanna-nouveau'
27
- RDOC_DEFAULT_OPTS.concat(['-f', 'hanna'])
28
- rescue Gem::LoadError
29
- end
30
-
31
- rdoc_task_class = begin
32
- require "rdoc/task"
33
- RDoc::Task
34
- rescue LoadError
35
- require "rake/rdoctask"
36
- Rake::RDocTask
37
- end
38
-
39
- RDOC_OPTS = RDOC_DEFAULT_OPTS + ['--main', 'README.rdoc']
40
-
41
- rdoc_task_class.new do |rdoc|
42
- rdoc.rdoc_dir = "rdoc"
43
- rdoc.options += RDOC_OPTS
44
- rdoc.rdoc_files.add %w"README.rdoc CHANGELOG MIT-LICENSE lib/**/*.rb"
45
- end
46
-
@@ -1,41 +0,0 @@
1
- gem 'minitest'
2
- require 'minitest/autorun'
3
- require 'minitest/parallel_fork'
4
-
5
- a = nil
6
- Minitest.before_parallel_fork do
7
- a = 'a'
8
- print ":parent"
9
- end
10
-
11
- Minitest.after_parallel_fork do |i|
12
- print ":child#{i}#{a}"
13
- end
14
-
15
- 4.times do |i|
16
- describe 'minitest/parallel_fork' do
17
- parallelize_me! if ENV['MPF_PARALLELIZE_ME']
18
-
19
- if ENV['MPF_TEST_ORDER_PARALLEL']
20
- def self.test_order
21
- :parallel
22
- end
23
- end
24
-
25
- it "should work" do
26
- sleep(1).must_equal 1
27
- end
28
-
29
- it "should fail" do
30
- 1.must_equal 2
31
- end
32
-
33
- it "should raise" do
34
- raise
35
- end
36
-
37
- it "should skip" do
38
- skip
39
- end
40
- end
41
- end
@@ -1,26 +0,0 @@
1
- gem 'minitest'
2
- require 'minitest/autorun'
3
-
4
- describe 'minitest/parallel_fork' do
5
- [[nil, ''],
6
- ['MPF_PARALLELIZE_ME', ' when parallelize_me! is used'],
7
- ['MPF_TEST_ORDER_PARALLEL', ' when test_order parallel is used']
8
- ].each do |env_key, msg|
9
- it "should execute in parallel#{msg}" do
10
- t = Time.now
11
- ENV['NCPU'] = '4'
12
- ENV[env_key] = '1' if env_key
13
- output = `#{ENV['RUBY']} -I lib spec/minitest_parallel_fork_example.rb`
14
- ENV.delete(env_key) if env_key
15
-
16
- time = (Time.now - t)
17
- time.must_be :<, 4
18
- time.must_be :>, 1
19
- output.must_match /:parent/
20
- output.must_match /16 runs, 8 assertions, 4 failures, 4 errors, 4 skips/
21
- 4.times do |i|
22
- output.must_match /:child#{i}a/
23
- end
24
- end
25
- end
26
- end