vinted-parallel_tests 0.13.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.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +6 -0
  5. data/Gemfile +8 -0
  6. data/Gemfile.lock +48 -0
  7. data/Rakefile +6 -0
  8. data/Readme.md +293 -0
  9. data/ReadmeRails2.md +48 -0
  10. data/bin/parallel_cucumber +5 -0
  11. data/bin/parallel_rspec +5 -0
  12. data/bin/parallel_test +5 -0
  13. data/lib/parallel_tests/cli.rb +187 -0
  14. data/lib/parallel_tests/cucumber/failures_logger.rb +25 -0
  15. data/lib/parallel_tests/cucumber/gherkin_listener.rb +82 -0
  16. data/lib/parallel_tests/cucumber/io.rb +41 -0
  17. data/lib/parallel_tests/cucumber/runner.rb +98 -0
  18. data/lib/parallel_tests/cucumber/runtime_logger.rb +28 -0
  19. data/lib/parallel_tests/grouper.rb +56 -0
  20. data/lib/parallel_tests/railtie.rb +8 -0
  21. data/lib/parallel_tests/rspec/failures_logger.rb +44 -0
  22. data/lib/parallel_tests/rspec/logger_base.rb +52 -0
  23. data/lib/parallel_tests/rspec/runner.rb +72 -0
  24. data/lib/parallel_tests/rspec/runtime_logger.rb +54 -0
  25. data/lib/parallel_tests/rspec/summary_logger.rb +19 -0
  26. data/lib/parallel_tests/tasks.rb +139 -0
  27. data/lib/parallel_tests/test/runner.rb +168 -0
  28. data/lib/parallel_tests/test/runtime_logger.rb +97 -0
  29. data/lib/parallel_tests/version.rb +3 -0
  30. data/lib/parallel_tests.rb +61 -0
  31. data/parallel_tests.gemspec +14 -0
  32. data/spec/integration_spec.rb +285 -0
  33. data/spec/parallel_tests/cli_spec.rb +71 -0
  34. data/spec/parallel_tests/cucumber/failure_logger_spec.rb +43 -0
  35. data/spec/parallel_tests/cucumber/gherkin_listener_spec.rb +97 -0
  36. data/spec/parallel_tests/cucumber/runner_spec.rb +179 -0
  37. data/spec/parallel_tests/grouper_spec.rb +52 -0
  38. data/spec/parallel_tests/rspec/failures_logger_spec.rb +82 -0
  39. data/spec/parallel_tests/rspec/runner_spec.rb +187 -0
  40. data/spec/parallel_tests/rspec/runtime_logger_spec.rb +126 -0
  41. data/spec/parallel_tests/rspec/summary_logger_spec.rb +37 -0
  42. data/spec/parallel_tests/tasks_spec.rb +151 -0
  43. data/spec/parallel_tests/test/runner_spec.rb +413 -0
  44. data/spec/parallel_tests/test/runtime_logger_spec.rb +90 -0
  45. data/spec/parallel_tests_spec.rb +137 -0
  46. data/spec/spec_helper.rb +157 -0
  47. metadata +110 -0
@@ -0,0 +1,157 @@
1
+ $LOAD_PATH << File.expand_path("../lib", File.dirname(__FILE__))
2
+
3
+ FAKE_RAILS_ROOT = './tmp/pspecs/fixtures'
4
+
5
+ require 'tempfile'
6
+
7
+ require 'parallel_tests'
8
+ require 'parallel_tests/test/runtime_logger'
9
+ require 'parallel_tests/rspec/runtime_logger'
10
+ require 'parallel_tests/rspec/summary_logger'
11
+
12
+
13
+ OutputLogger = Struct.new(:output) do
14
+ attr_reader :flock, :flush
15
+ def puts(s=nil)
16
+ self.output << s.to_s
17
+ end
18
+ end
19
+
20
+ RSpec.configure do |config|
21
+ config.filter_run :focus => true
22
+ config.run_all_when_everything_filtered = true
23
+
24
+ config.after do
25
+ ENV.delete("TEST_ENV_NUMBER")
26
+ end
27
+ end
28
+
29
+ def mocked_process
30
+ StringIO.new
31
+ end
32
+
33
+ def size_of(group)
34
+ group.inject(0) { |sum, test| sum += File.stat(test).size }
35
+ end
36
+
37
+ # Uses /tmp/parallel_tests/application as the cwd so we can create and remove
38
+ # files as we want to. After execution it changes cwd back to the original one.
39
+ def use_temporary_directory_for
40
+ require 'fileutils'
41
+
42
+ dir = File.join("/tmp", "parallel_tests")
43
+ new_dir = File.join(dir, "application")
44
+
45
+ begin
46
+ # just in case the temporary dir already exists
47
+ FileUtils.rm_rf(dir) if File.exists?(dir)
48
+
49
+ # create the temporary directory
50
+ FileUtils.mkdir_p(new_dir)
51
+
52
+ # chdir changes cwd back to the original one after it is done
53
+ Dir.chdir(new_dir) do
54
+ yield
55
+ end
56
+ ensure
57
+ FileUtils.rm_rf(dir) if File.exists?(dir)
58
+ end
59
+ end
60
+
61
+ def test_tests_in_groups(klass, folder, suffix)
62
+ test_root = "#{FAKE_RAILS_ROOT}/#{folder}"
63
+
64
+ describe :tests_in_groups do
65
+ before do
66
+ system "rm -rf #{FAKE_RAILS_ROOT}; mkdir -p #{test_root}/temp"
67
+
68
+ @files = [0,1,2,3,4,5,6,7].map do |i|
69
+ size = 99
70
+ file = "#{test_root}/temp/x#{i}#{suffix}"
71
+ File.open(file, 'w') { |f| f.puts 'x' * size }
72
+ file
73
+ end
74
+
75
+ @log = klass.runtime_log
76
+ `mkdir -p #{File.dirname(@log)}`
77
+ `rm -f #{@log}`
78
+ end
79
+
80
+ after do
81
+ `rm -f #{@log}`
82
+ end
83
+
84
+ def setup_runtime_log
85
+ File.open(@log,'w') do |f|
86
+ @files[1..-1].each{|file| f.puts "#{file}:#{@files.index(file)}"}
87
+ f.puts "#{@files[0]}:10"
88
+ end
89
+ end
90
+
91
+ it "groups when given an array of files" do
92
+ list_of_files = Dir["#{test_root}/**/*#{suffix}"]
93
+ found = klass.send(:with_runtime_info, list_of_files)
94
+ found.should =~ list_of_files.map{ |file| [file, File.stat(file).size]}
95
+ end
96
+
97
+ it "finds all tests" do
98
+ found = klass.tests_in_groups([test_root], 1)
99
+ all = [ Dir["#{test_root}/**/*#{suffix}"] ]
100
+ (found.flatten - all.flatten).should == []
101
+ end
102
+
103
+ it "partitions them into groups by equal size" do
104
+ groups = klass.tests_in_groups([test_root], 2)
105
+ groups.map{|g| size_of(g)}.should == [400, 400]
106
+ end
107
+
108
+ it 'should partition correctly with a group size of 4' do
109
+ groups = klass.tests_in_groups([test_root], 4)
110
+ groups.map{|g| size_of(g)}.should == [200, 200, 200, 200]
111
+ end
112
+
113
+ it 'should partition correctly with an uneven group size' do
114
+ groups = klass.tests_in_groups([test_root], 3)
115
+ groups.map{|g| size_of(g)}.should =~ [300, 300, 200]
116
+ end
117
+
118
+ it "partitions by runtime when runtime-data is available" do
119
+ klass.stub!(:puts)
120
+ setup_runtime_log
121
+
122
+ groups = klass.tests_in_groups([test_root], 2)
123
+ groups.size.should == 2
124
+ # 10 + 1 + 3 + 5 = 19
125
+ groups[0].should == [@files[0],@files[1],@files[3],@files[5]]
126
+ # 2 + 4 + 6 + 7 = 19
127
+ groups[1].should == [@files[2],@files[4],@files[6],@files[7]]
128
+ end
129
+
130
+ it "alpha-sorts partitions when runtime-data is available" do
131
+ klass.stub!(:puts)
132
+ setup_runtime_log
133
+
134
+ groups = klass.tests_in_groups([test_root], 2)
135
+ groups.size.should == 2
136
+
137
+ groups[0].should == groups[0].sort
138
+ groups[1].should == groups[1].sort
139
+ end
140
+
141
+ it "partitions by round-robin when not sorting" do
142
+ files = ["file1.rb", "file2.rb", "file3.rb", "file4.rb"]
143
+ klass.should_receive(:find_tests).and_return(files)
144
+ groups = klass.tests_in_groups(files, 2, :group_by => :found).sort
145
+ groups[0].should == ["file1.rb", "file3.rb"]
146
+ groups[1].should == ["file2.rb", "file4.rb"]
147
+ end
148
+
149
+ it "alpha-sorts partitions when not sorting by runtime" do
150
+ files = %w[q w e r t y u i o p a s d f g h j k l z x c v b n m]
151
+ klass.should_receive(:find_tests).and_return(files)
152
+ groups = klass.tests_in_groups(files, 2, :group_by => :found).sort
153
+ groups[0].should == groups[0].sort
154
+ groups[1].should == groups[1].sort
155
+ end
156
+ end
157
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vinted-parallel_tests
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.13.3
5
+ platform: ruby
6
+ authors:
7
+ - Laurynas Butkus
8
+ - Tomas Varaneckas
9
+ - Justas Janauskas
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-06-08 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: parallel
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - '>='
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
29
+ description:
30
+ email:
31
+ - laurynas.butkus@gmail.com
32
+ - tomas.varaneckas@gmail.com
33
+ - jjanauskas@gmail.com
34
+ executables:
35
+ - parallel_cucumber
36
+ - parallel_rspec
37
+ - parallel_test
38
+ extensions: []
39
+ extra_rdoc_files: []
40
+ files:
41
+ - .gitignore
42
+ - .rspec
43
+ - .travis.yml
44
+ - Gemfile
45
+ - Gemfile.lock
46
+ - Rakefile
47
+ - Readme.md
48
+ - ReadmeRails2.md
49
+ - bin/parallel_cucumber
50
+ - bin/parallel_rspec
51
+ - bin/parallel_test
52
+ - lib/parallel_tests.rb
53
+ - lib/parallel_tests/cli.rb
54
+ - lib/parallel_tests/cucumber/failures_logger.rb
55
+ - lib/parallel_tests/cucumber/gherkin_listener.rb
56
+ - lib/parallel_tests/cucumber/io.rb
57
+ - lib/parallel_tests/cucumber/runner.rb
58
+ - lib/parallel_tests/cucumber/runtime_logger.rb
59
+ - lib/parallel_tests/grouper.rb
60
+ - lib/parallel_tests/railtie.rb
61
+ - lib/parallel_tests/rspec/failures_logger.rb
62
+ - lib/parallel_tests/rspec/logger_base.rb
63
+ - lib/parallel_tests/rspec/runner.rb
64
+ - lib/parallel_tests/rspec/runtime_logger.rb
65
+ - lib/parallel_tests/rspec/summary_logger.rb
66
+ - lib/parallel_tests/tasks.rb
67
+ - lib/parallel_tests/test/runner.rb
68
+ - lib/parallel_tests/test/runtime_logger.rb
69
+ - lib/parallel_tests/version.rb
70
+ - parallel_tests.gemspec
71
+ - spec/integration_spec.rb
72
+ - spec/parallel_tests/cli_spec.rb
73
+ - spec/parallel_tests/cucumber/failure_logger_spec.rb
74
+ - spec/parallel_tests/cucumber/gherkin_listener_spec.rb
75
+ - spec/parallel_tests/cucumber/runner_spec.rb
76
+ - spec/parallel_tests/grouper_spec.rb
77
+ - spec/parallel_tests/rspec/failures_logger_spec.rb
78
+ - spec/parallel_tests/rspec/runner_spec.rb
79
+ - spec/parallel_tests/rspec/runtime_logger_spec.rb
80
+ - spec/parallel_tests/rspec/summary_logger_spec.rb
81
+ - spec/parallel_tests/tasks_spec.rb
82
+ - spec/parallel_tests/test/runner_spec.rb
83
+ - spec/parallel_tests/test/runtime_logger_spec.rb
84
+ - spec/parallel_tests_spec.rb
85
+ - spec/spec_helper.rb
86
+ homepage: http://github.com/vinted/parallel_tests
87
+ licenses:
88
+ - MIT
89
+ metadata: {}
90
+ post_install_message:
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubyforge_project:
106
+ rubygems_version: 2.0.3
107
+ signing_key:
108
+ specification_version: 4
109
+ summary: Run Test::Unit / RSpec / Cucumber in parallel
110
+ test_files: []