rspec-parallel 2.14.8.1 → 2.14.8.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,49 +1,49 @@
1
- module RSpec
2
- module Parallel
3
- # ExampleGroupThreadRunner is a class used to execute [ExampleGroup]
4
- # classes in parallel as part of rspec-core. When running in parallel
5
- # the order of example groups will not be honoured.
6
- # This class is used to ensure that we have a way of keeping track of
7
- # the number of threads being created and preventing utilization of
8
- # more than the specified number
9
- # Additionally, this class will contain a mutex used to prevent access
10
- # to shared variables within sub-threads
11
- class ExampleGroupThreadRunner
12
- attr_accessor :thread_array, :max_threads, :mutex, :used_threads
13
-
14
- # Creates a new instance of ExampleGroupThreadRunner.
15
- # @param max_threads [Integer] the maximum limit of threads that can be used
16
- # @param mutex [Mutex] a semaphore used to prevent access to shared variables in
17
- # sub-threads such as those used by [ExampleThreadRunner]
18
- # @param used_threads [Integer] the current number of threads being used
19
- def initialize(max_threads = 1, mutex = Mutex.new, used_threads = 0)
20
- @max_threads = max_threads
21
- @mutex = mutex
22
- @used_threads = used_threads
23
- @thread_array = []
24
- end
25
-
26
- # Method will run an [ExampleGroup] inside a [Thread] to prevent blocking
27
- # execution. The new [Thread] is added to an array for tracking and
28
- # will automatically remove itself when done
29
- # @param example_group [ExampleGroup] the group to be run inside a [Thread]
30
- # @param reporter [Reporter] the passed in reporting class used for
31
- # tracking
32
- def run(example_group, reporter)
33
- @thread_array.push Thread.start {
34
- example_group.run_parallel(reporter, @max_threads, @mutex, @used_threads)
35
- @thread_array.delete Thread.current
36
- }
37
- end
38
-
39
- # Method will wait for all threads to complete. On completion threads
40
- # remove themselves from the @thread_array so an empty array means they
41
- # completed
42
- def wait_for_completion
43
- @thread_array.each do |t|
44
- t.join
45
- end
46
- end
47
- end
48
- end
49
- end
1
+ module RSpec
2
+ module Parallel
3
+ # ExampleGroupThreadRunner is a class used to execute [ExampleGroup]
4
+ # classes in parallel as part of rspec-core. When running in parallel
5
+ # the order of example groups will not be honoured.
6
+ # This class is used to ensure that we have a way of keeping track of
7
+ # the number of threads being created and preventing utilization of
8
+ # more than the specified number
9
+ # Additionally, this class will contain a mutex used to prevent access
10
+ # to shared variables within sub-threads
11
+ class ExampleGroupThreadRunner
12
+ attr_accessor :thread_array, :max_threads, :mutex, :used_threads
13
+
14
+ # Creates a new instance of ExampleGroupThreadRunner.
15
+ # @param max_threads [Integer] the maximum limit of threads that can be used
16
+ # @param mutex [Mutex] a semaphore used to prevent access to shared variables in
17
+ # sub-threads such as those used by [ExampleThreadRunner]
18
+ # @param used_threads [Integer] the current number of threads being used
19
+ def initialize(max_threads = 1, mutex = Mutex.new, used_threads = 0)
20
+ @max_threads = max_threads
21
+ @mutex = mutex
22
+ @used_threads = used_threads
23
+ @thread_array = []
24
+ end
25
+
26
+ # Method will run an [ExampleGroup] inside a [Thread] to prevent blocking
27
+ # execution. The new [Thread] is added to an array for tracking and
28
+ # will automatically remove itself when done
29
+ # @param example_group [ExampleGroup] the group to be run inside a [Thread]
30
+ # @param reporter [Reporter] the passed in reporting class used for
31
+ # tracking
32
+ def run(example_group, reporter)
33
+ @thread_array.push Thread.start {
34
+ example_group.run_parallel(reporter, @max_threads, @mutex, @used_threads)
35
+ @thread_array.delete Thread.current
36
+ }
37
+ end
38
+
39
+ # Method will wait for all threads to complete. On completion threads
40
+ # remove themselves from the @thread_array so an empty array means they
41
+ # completed
42
+ def wait_for_completion
43
+ @thread_array.each do |t|
44
+ t.join
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,55 +1,55 @@
1
- module RSpec
2
- module Parallel
3
- # ExampleThreadRunner is a class used to execute [Example] classes in
4
- # parallel as part of rspec-core. When running in parallel the order
5
- # of examples will not be honoured.
6
- # This class is used to ensure that we have a way of keeping track of
7
- # the number of threads being created and preventing utilization of
8
- # more than the specified number
9
- class ExampleThreadRunner
10
- attr_accessor :num_threads, :thread_array, :used_threads
11
-
12
- # Creates a new instance of ExampleThreadRunner.
13
- # @param num_threads [Integer] the maximum limit of threads that can be used
14
- # @param used_threads [Integer] the current number of threads being used
15
- def initialize(num_threads, used_threads)
16
- @num_threads = num_threads
17
- @thread_array = []
18
- @used_threads = used_threads
19
- end
20
-
21
- # Method will check global utilization of threads and if that number is
22
- # at or over the allocated maximum it will wait until a thread is available
23
- def wait_for_available_thread
24
- while @used_threads.to_i >= @num_threads.to_i
25
- sleep 0.1
26
- end
27
- end
28
-
29
- # Method will run the specified example within an available thread or
30
- # will wait for a thread to become available if none currently are
31
- # @param example [Example] the example to be executed in a [Thread]
32
- # @param instance the instance of an ExampleGroup subclass
33
- # @param reporter [Reporter] the passed in reporting class used for
34
- # tracking
35
- def run(example, instance, reporter)
36
- wait_for_available_thread
37
- @thread_array.push Thread.start {
38
- example.run(instance, reporter)
39
- @thread_array.delete Thread.current # remove from local scope
40
- @used_threads -= 1
41
- }
42
- @used_threads += 1
43
- end
44
-
45
- # Method will wait for all threads to complete. On completion threads
46
- # remove themselves from the @thread_array so an empty array means they
47
- # completed
48
- def wait_for_completion
49
- @thread_array.each do |t|
50
- t.join
51
- end
52
- end
53
- end
54
- end
55
- end
1
+ module RSpec
2
+ module Parallel
3
+ # ExampleThreadRunner is a class used to execute [Example] classes in
4
+ # parallel as part of rspec-core. When running in parallel the order
5
+ # of examples will not be honoured.
6
+ # This class is used to ensure that we have a way of keeping track of
7
+ # the number of threads being created and preventing utilization of
8
+ # more than the specified number
9
+ class ExampleThreadRunner
10
+ attr_accessor :num_threads, :thread_array, :used_threads
11
+
12
+ # Creates a new instance of ExampleThreadRunner.
13
+ # @param num_threads [Integer] the maximum limit of threads that can be used
14
+ # @param used_threads [Integer] the current number of threads being used
15
+ def initialize(num_threads, used_threads)
16
+ @num_threads = num_threads
17
+ @thread_array = []
18
+ @used_threads = used_threads
19
+ end
20
+
21
+ # Method will check global utilization of threads and if that number is
22
+ # at or over the allocated maximum it will wait until a thread is available
23
+ def wait_for_available_thread
24
+ while @used_threads.to_i >= @num_threads.to_i
25
+ sleep 0.1
26
+ end
27
+ end
28
+
29
+ # Method will run the specified example within an available thread or
30
+ # will wait for a thread to become available if none currently are
31
+ # @param example [Example] the example to be executed in a [Thread]
32
+ # @param instance the instance of an ExampleGroup subclass
33
+ # @param reporter [Reporter] the passed in reporting class used for
34
+ # tracking
35
+ def run(example, instance, reporter)
36
+ wait_for_available_thread
37
+ @thread_array.push Thread.start {
38
+ example.run(instance, reporter)
39
+ @thread_array.delete Thread.current # remove from local scope
40
+ @used_threads -= 1
41
+ }
42
+ @used_threads += 1
43
+ end
44
+
45
+ # Method will wait for all threads to complete. On completion threads
46
+ # remove themselves from the @thread_array so an empty array means they
47
+ # completed
48
+ def wait_for_completion
49
+ @thread_array.each do |t|
50
+ t.join
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -23,21 +23,21 @@ module RSpec
23
23
  options.parse_options
24
24
 
25
25
  parallel = (options.options[:thread_maximum].nil?) ? false : true
26
+ drb = options.options[:drb]
26
27
 
27
- if options.options[:drb]
28
+ if drb
28
29
  require 'rspec/core/drb_command_line'
29
30
  begin
30
31
  DRbCommandLine.new(options).run(err, out)
31
32
  rescue DRb::DRbConnError
32
33
  err.puts "No DRb server is running. Running in local process instead ..."
33
- if parallel
34
- CommandLine.new(options).run_parallel(err, out)
35
- else
36
- CommandLine.new(options).run(err, out)
37
- end
34
+ drb = false
38
35
  end
39
- else
36
+ end
37
+
38
+ unless drb
40
39
  if parallel
40
+ require 'thread'
41
41
  CommandLine.new(options).run_parallel(err, out)
42
42
  else
43
43
  CommandLine.new(options).run(err, out)
@@ -3,7 +3,7 @@ module RSpec
3
3
  # Version information for RSpec Parallel.
4
4
  module Version
5
5
  # Current version of RSpec Parallel, in semantic versioning format.
6
- STRING = '2.14.8.1'
6
+ STRING = '2.14.8.2'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-parallel
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.14.8.1
4
+ version: 2.14.8.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: