parallel_tests 0.4.2 → 0.4.3
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.
- data/VERSION +1 -1
- data/bin/parallel_test +3 -1
- data/lib/parallel_cucumber.rb +1 -1
- data/lib/parallel_specs.rb +1 -1
- data/lib/parallel_tests.rb +3 -2
- data/lib/tasks/parallel_tests.rake +6 -2
- data/parallel_tests.gemspec +2 -2
- data/spec/integration_spec.rb +10 -0
- data/spec/parallel_cucumber_spec.rb +6 -6
- data/spec/parallel_specs_spec.rb +11 -11
- data/spec/parallel_tests_spec.rb +3 -3
- data/spec/spec_helper.rb +4 -0
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.3
|
data/bin/parallel_test
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'rubygems'
|
3
3
|
require 'optparse'
|
4
4
|
require 'parallel'
|
5
|
+
raise "please ' gem install parallel '" if Gem::Version.new(Parallel::VERSION) < Gem::Version.new('0.4.2')
|
5
6
|
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
6
7
|
require "parallel_tests"
|
7
8
|
|
@@ -31,9 +32,10 @@ num_processes = options[:count] || Parallel.processor_count
|
|
31
32
|
num_processes = num_processes * (options[:multiply] || 1)
|
32
33
|
|
33
34
|
if options[:execute]
|
34
|
-
Parallel.
|
35
|
+
results = Parallel.map(0...num_processes, :in_processes => num_processes) do |i|
|
35
36
|
ParallelTests.execute_command(options[:execute], i)
|
36
37
|
end
|
38
|
+
abort if results.any?{|r| r[:exit_status] != 0 }
|
37
39
|
else
|
38
40
|
lib, name, task = {
|
39
41
|
'test' => ["tests", "test", "test"],
|
data/lib/parallel_cucumber.rb
CHANGED
@@ -4,7 +4,7 @@ class ParallelCucumber < ParallelTests
|
|
4
4
|
def self.run_tests(test_files, process_number, options)
|
5
5
|
color = ($stdout.tty? ? 'AUTOTEST=1 ; export AUTOTEST ;' : '')#display color when we are in a terminal
|
6
6
|
cmd = "#{color} #{executable} #{options} #{test_files*' '}"
|
7
|
-
execute_command(cmd, process_number)
|
7
|
+
execute_command(cmd, process_number)[:stdout]
|
8
8
|
end
|
9
9
|
|
10
10
|
def self.executable
|
data/lib/parallel_specs.rb
CHANGED
@@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), 'parallel_tests')
|
|
3
3
|
class ParallelSpecs < ParallelTests
|
4
4
|
def self.run_tests(test_files, process_number, options)
|
5
5
|
cmd = "#{color} #{executable} #{options} #{spec_opts} #{test_files*' '}"
|
6
|
-
execute_command(cmd, process_number)
|
6
|
+
execute_command(cmd, process_number)[:stdout]
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.executable
|
data/lib/parallel_tests.rb
CHANGED
@@ -30,7 +30,7 @@ class ParallelTests
|
|
30
30
|
def self.run_tests(test_files, process_number, options)
|
31
31
|
require_list = test_files.map { |filename| "\"#{filename}\"" }.join(",")
|
32
32
|
cmd = "ruby -Itest #{options} -e '[#{require_list}].each {|f| require f }'"
|
33
|
-
execute_command(cmd, process_number)
|
33
|
+
execute_command(cmd, process_number)[:stdout]
|
34
34
|
end
|
35
35
|
|
36
36
|
def self.execute_command(cmd, process_number)
|
@@ -43,7 +43,8 @@ class ParallelTests
|
|
43
43
|
print char
|
44
44
|
STDOUT.flush
|
45
45
|
end
|
46
|
-
|
46
|
+
f.close
|
47
|
+
{:stdout => all, :exit_status => $?.exitstatus}
|
47
48
|
end
|
48
49
|
|
49
50
|
def self.find_results(test_output)
|
@@ -1,7 +1,9 @@
|
|
1
1
|
namespace :parallel do
|
2
2
|
def run_in_parallel(cmd, options)
|
3
3
|
count = (options[:count] ? options[:count].to_i : nil)
|
4
|
-
|
4
|
+
executable = File.join(File.dirname(__FILE__), '..', '..', 'bin', 'parallel_test')
|
5
|
+
command = "#{executable} --exec '#{cmd}' -n #{count}"
|
6
|
+
abort unless system(command)
|
5
7
|
end
|
6
8
|
|
7
9
|
desc "update test databases by running db:test:prepare for each test db --> parallel:prepare[num_cpus]"
|
@@ -28,7 +30,9 @@ namespace :parallel do
|
|
28
30
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
29
31
|
require "parallel_tests"
|
30
32
|
count, prefix, options = ParallelTests.parse_rake_args(args)
|
31
|
-
|
33
|
+
executable = File.join(File.dirname(__FILE__), '..', '..', 'bin', 'parallel_test')
|
34
|
+
command = "#{executable} --type #{type} -n #{count} -p '#{prefix}' -r '#{RAILS_ROOT}' -o '#{options}'"
|
35
|
+
abort unless system(command) # allow to chain tasks e.g. rake parallel:spec parallel:features
|
32
36
|
end
|
33
37
|
end
|
34
38
|
end
|
data/parallel_tests.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{parallel_tests}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Grosser"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-07-15}
|
13
13
|
s.email = %q{grosser.michael@gmail.com}
|
14
14
|
s.executables = ["parallel_spec", "parallel_cucumber", "parallel_test"]
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/integration_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
|
1
3
|
describe 'CLI' do
|
2
4
|
before do
|
3
5
|
`rm -rf #{folder}`
|
@@ -63,6 +65,14 @@ describe 'CLI' do
|
|
63
65
|
result.split("\n").sort.should == %w["" "2" "3" "4"]
|
64
66
|
end
|
65
67
|
|
68
|
+
it "exists with success if all sub-processes returned success" do
|
69
|
+
system("#{executable} -e 'cat /dev/null' -n 4").should == true
|
70
|
+
end
|
71
|
+
|
72
|
+
it "exists with failure if any sub-processes returned failure" do
|
73
|
+
system("#{executable} -e 'test -e xxxx' -n 4").should == false
|
74
|
+
end
|
75
|
+
|
66
76
|
it "can run through parallel_spec / parallel_cucumber" do
|
67
77
|
version = `#{executable} -v`
|
68
78
|
`#{bin_folder}/parallel_spec -v`.should == version
|
@@ -10,12 +10,12 @@ describe ParallelCucumber do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it "uses TEST_ENV_NUMBER=blank when called for process 0" do
|
13
|
-
ParallelCucumber.should_receive(:open).with{|x,y| x=~/TEST_ENV_NUMBER= /}.and_return
|
13
|
+
ParallelCucumber.should_receive(:open).with{|x,y| x=~/TEST_ENV_NUMBER= /}.and_return mocked_process
|
14
14
|
ParallelCucumber.run_tests(['xxx'],0,'')
|
15
15
|
end
|
16
16
|
|
17
17
|
it "uses TEST_ENV_NUMBER=2 when called for process 1" do
|
18
|
-
ParallelCucumber.should_receive(:open).with{|x,y| x=~/TEST_ENV_NUMBER=2/}.and_return
|
18
|
+
ParallelCucumber.should_receive(:open).with{|x,y| x=~/TEST_ENV_NUMBER=2/}.and_return mocked_process
|
19
19
|
ParallelCucumber.run_tests(['xxx'],1,'')
|
20
20
|
end
|
21
21
|
|
@@ -28,23 +28,23 @@ describe ParallelCucumber do
|
|
28
28
|
|
29
29
|
it "runs bundle exec cucumber when on bundler 0.9" do
|
30
30
|
ParallelCucumber.stub!(:bundler_enabled?).and_return true
|
31
|
-
ParallelCucumber.should_receive(:open).with{|x,y| x =~ %r{bundle exec cucumber}}.and_return
|
31
|
+
ParallelCucumber.should_receive(:open).with{|x,y| x =~ %r{bundle exec cucumber}}.and_return mocked_process
|
32
32
|
ParallelCucumber.run_tests(['xxx'],1,'')
|
33
33
|
end
|
34
34
|
|
35
35
|
it "runs script/cucumber when script/cucumber is found" do
|
36
|
-
ParallelCucumber.should_receive(:open).with{|x,y| x =~ %r{script/cucumber}}.and_return
|
36
|
+
ParallelCucumber.should_receive(:open).with{|x,y| x =~ %r{script/cucumber}}.and_return mocked_process
|
37
37
|
ParallelCucumber.run_tests(['xxx'],1,'')
|
38
38
|
end
|
39
39
|
|
40
40
|
it "runs cucumber by default" do
|
41
41
|
File.stub!(:file?).with('script/cucumber').and_return false
|
42
|
-
ParallelCucumber.should_receive(:open).with{|x,y| x !~ %r{(script/cucumber)|(bundle exec cucumber)}}.and_return
|
42
|
+
ParallelCucumber.should_receive(:open).with{|x,y| x !~ %r{(script/cucumber)|(bundle exec cucumber)}}.and_return mocked_process
|
43
43
|
ParallelCucumber.run_tests(['xxx'],1,'')
|
44
44
|
end
|
45
45
|
|
46
46
|
it "uses options passed in" do
|
47
|
-
ParallelCucumber.should_receive(:open).with{|x,y| x =~ %r{script/cucumber -p default}}.and_return
|
47
|
+
ParallelCucumber.should_receive(:open).with{|x,y| x =~ %r{script/cucumber -p default}}.and_return mocked_process
|
48
48
|
ParallelCucumber.run_tests(['xxx'],1,'-p default')
|
49
49
|
end
|
50
50
|
end
|
data/spec/parallel_specs_spec.rb
CHANGED
@@ -12,64 +12,64 @@ describe ParallelSpecs do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it "uses TEST_ENV_NUMBER=blank when called for process 0" do
|
15
|
-
ParallelSpecs.should_receive(:open).with{|x,y|x=~/TEST_ENV_NUMBER= /}.and_return
|
15
|
+
ParallelSpecs.should_receive(:open).with{|x,y|x=~/TEST_ENV_NUMBER= /}.and_return mocked_process
|
16
16
|
ParallelSpecs.run_tests(['xxx'],0,'')
|
17
17
|
end
|
18
18
|
|
19
19
|
it "uses TEST_ENV_NUMBER=2 when called for process 1" do
|
20
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x=~/TEST_ENV_NUMBER=2/}.and_return
|
20
|
+
ParallelSpecs.should_receive(:open).with{|x,y| x=~/TEST_ENV_NUMBER=2/}.and_return mocked_process
|
21
21
|
ParallelSpecs.run_tests(['xxx'],1,'')
|
22
22
|
end
|
23
23
|
|
24
24
|
it "runs with color when called from cmdline" do
|
25
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x=~/RSPEC_COLOR=1/}.and_return
|
25
|
+
ParallelSpecs.should_receive(:open).with{|x,y| x=~/RSPEC_COLOR=1/}.and_return mocked_process
|
26
26
|
$stdout.should_receive(:tty?).and_return true
|
27
27
|
ParallelSpecs.run_tests(['xxx'],1,'')
|
28
28
|
end
|
29
29
|
|
30
30
|
it "runs without color when not called from cmdline" do
|
31
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x !~ /RSPEC_COLOR/}.and_return
|
31
|
+
ParallelSpecs.should_receive(:open).with{|x,y| x !~ /RSPEC_COLOR/}.and_return mocked_process
|
32
32
|
$stdout.should_receive(:tty?).and_return false
|
33
33
|
ParallelSpecs.run_tests(['xxx'],1,'')
|
34
34
|
end
|
35
35
|
|
36
36
|
it "run bundle exec spec when on bundler 0.9" do
|
37
37
|
ParallelSpecs.stub!(:bundler_enabled?).and_return true
|
38
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{bundle exec spec}}.and_return
|
38
|
+
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{bundle exec spec}}.and_return mocked_process
|
39
39
|
ParallelSpecs.run_tests(['xxx'],1,'')
|
40
40
|
end
|
41
41
|
|
42
42
|
it "runs script/spec when script/spec can be found" do
|
43
43
|
File.should_receive(:file?).with('script/spec').and_return true
|
44
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{script/spec}}.and_return
|
44
|
+
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{script/spec}}.and_return mocked_process
|
45
45
|
ParallelSpecs.run_tests(['xxx'],1,'')
|
46
46
|
end
|
47
47
|
|
48
48
|
it "runs spec when script/spec cannot be found" do
|
49
49
|
File.stub!(:file?).with('script/spec').and_return false
|
50
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x !~ %r{(script/spec)|(bundle exec spec)}}.and_return
|
50
|
+
ParallelSpecs.should_receive(:open).with{|x,y| x !~ %r{(script/spec)|(bundle exec spec)}}.and_return mocked_process
|
51
51
|
ParallelSpecs.run_tests(['xxx'],1,'')
|
52
52
|
end
|
53
53
|
|
54
54
|
it "uses no -O when no opts where found" do
|
55
55
|
File.stub!(:file?).with('spec/spec.opts').and_return false
|
56
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x !~ %r{spec/spec.opts}}.and_return
|
56
|
+
ParallelSpecs.should_receive(:open).with{|x,y| x !~ %r{spec/spec.opts}}.and_return mocked_process
|
57
57
|
ParallelSpecs.run_tests(['xxx'],1,'')
|
58
58
|
end
|
59
59
|
|
60
60
|
it "uses spec/spec.opts when found" do
|
61
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{script/spec\s+-O spec/spec.opts}}.and_return
|
61
|
+
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{script/spec\s+-O spec/spec.opts}}.and_return mocked_process
|
62
62
|
ParallelSpecs.run_tests(['xxx'],1,'')
|
63
63
|
end
|
64
64
|
|
65
65
|
it "uses spec/parallel_spec.opts when found" do
|
66
66
|
File.should_receive(:file?).with('spec/parallel_spec.opts').and_return true
|
67
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{script/spec\s+-O spec/parallel_spec.opts}}.and_return
|
67
|
+
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{script/spec\s+-O spec/parallel_spec.opts}}.and_return mocked_process
|
68
68
|
ParallelSpecs.run_tests(['xxx'],1,'')
|
69
69
|
end
|
70
70
|
|
71
71
|
it "uses options passed in" do
|
72
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{script/spec -f n}}.and_return
|
72
|
+
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{script/spec -f n}}.and_return mocked_process
|
73
73
|
ParallelSpecs.run_tests(['xxx'],1,'-f n')
|
74
74
|
end
|
75
75
|
|
data/spec/parallel_tests_spec.rb
CHANGED
@@ -27,17 +27,17 @@ describe ParallelTests do
|
|
27
27
|
|
28
28
|
describe :run_tests do
|
29
29
|
it "uses TEST_ENV_NUMBER=blank when called for process 0" do
|
30
|
-
ParallelTests.should_receive(:open).with{|x,y|x=~/TEST_ENV_NUMBER= /}.and_return
|
30
|
+
ParallelTests.should_receive(:open).with{|x,y|x=~/TEST_ENV_NUMBER= /}.and_return mocked_process
|
31
31
|
ParallelTests.run_tests(['xxx'],0,'')
|
32
32
|
end
|
33
33
|
|
34
34
|
it "uses TEST_ENV_NUMBER=2 when called for process 1" do
|
35
|
-
ParallelTests.should_receive(:open).with{|x,y| x=~/TEST_ENV_NUMBER=2/}.and_return
|
35
|
+
ParallelTests.should_receive(:open).with{|x,y| x=~/TEST_ENV_NUMBER=2/}.and_return mocked_process
|
36
36
|
ParallelTests.run_tests(['xxx'],1,'')
|
37
37
|
end
|
38
38
|
|
39
39
|
it "uses options" do
|
40
|
-
ParallelTests.should_receive(:open).with{|x,y| x=~ %r{ruby -Itest -v}}.and_return
|
40
|
+
ParallelTests.should_receive(:open).with{|x,y| x=~ %r{ruby -Itest -v}}.and_return mocked_process
|
41
41
|
ParallelTests.run_tests(['xxx'],1,'-v')
|
42
42
|
end
|
43
43
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 4
|
8
|
-
-
|
9
|
-
version: 0.4.
|
8
|
+
- 3
|
9
|
+
version: 0.4.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Michael Grosser
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-07-15 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|