spork 0.7.8 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+ require 'rubygems/command.rb'
3
+ require 'rubygems/dependency_installer.rb'
4
+ STDERR.puts "Actually, there aren't any native extensions. I'm just dynamically installing dependencies based off of your operating system"
5
+ begin
6
+ Gem::Command.build_args = ARGV
7
+ rescue NoMethodError
8
+ end
9
+ inst = Gem::DependencyInstaller.new
10
+ begin
11
+ inst.install "rake"
12
+ inst.install "win32-process", "~> 0.6.1" if RUBY_PLATFORM =~ /mswin|mingw/
13
+ rescue
14
+ exit(1)
15
+ end
16
+
17
+ f = File.open(File.join(File.dirname(__FILE__), "Rakefile"), "w") # create dummy rakefile to indicate success
18
+ f.write("task :default\n")
19
+ f.close
@@ -7,3 +7,4 @@ gems:
7
7
  - { name: 'rspec-rails', version: '>= 1.2.9' }
8
8
  - { name: 'rails', version: '>= 2.3' }
9
9
  - { name: 'ruby-debug', version: '>= 0.10.3' }
10
+ <% %>
@@ -28,7 +28,11 @@ class Spork::RunStrategy
28
28
 
29
29
  protected
30
30
  def self.factory(test_framework)
31
- Spork::RunStrategy::Forking.new(test_framework)
31
+ if RUBY_PLATFORM =~ /mswin|mingw/
32
+ Spork::RunStrategy::Magazine.new(test_framework)
33
+ else
34
+ Spork::RunStrategy::Forking.new(test_framework)
35
+ end
32
36
  end
33
37
 
34
38
  def self.inherited(subclass)
@@ -0,0 +1,114 @@
1
+ # this class' goal:
2
+ # to boldly just run test after test
3
+ # as they come in
4
+ require 'drb'
5
+ require 'rinda/ring'
6
+ require 'win32/process' if RUBY_PLATFORM =~ /mswin|mingw/
7
+
8
+ $:.unshift(File.dirname(__FILE__))
9
+ require 'magazine/magazine_slave'
10
+
11
+
12
+ class Spork::RunStrategy::Magazine < Spork::RunStrategy
13
+
14
+ Slave_Id_Range = 1..2 # Ringserver uses id: 0. Slave use: 1..MAX_SLAVES
15
+
16
+ def slave_max
17
+ Slave_Id_Range.to_a.size
18
+ end
19
+
20
+ def initialize(test_framework)
21
+ @test_framework = test_framework
22
+ this_path = File.expand_path(File.dirname(__FILE__))
23
+ @path = File.join(this_path, 'magazine')
24
+ @pids = []
25
+
26
+ @pids << start_Rinda_ringserver
27
+ sleep 1
28
+
29
+ fill_slave_pool
30
+ rescue RuntimeError => e
31
+ kill_all_processes
32
+ raise e
33
+ end
34
+
35
+ def start_Rinda_ringserver
36
+ app_name = 'ruby ring_server.rb'
37
+ Process.create( :app_name => app_name, :cwd => @path ).process_id
38
+ end
39
+
40
+ def fill_slave_pool
41
+ Slave_Id_Range.each do |id|
42
+ start_slave(id)
43
+ end
44
+ puts " -- Starting to fill pool..."
45
+ puts " Wait until at least one slave is provided before running tests..."
46
+ puts " ** CTRL+BREAK to stop Spork and kill all ruby slave processes **"
47
+ $stdout.flush
48
+ end
49
+
50
+ def start_slave(id)
51
+ app_pwd = Dir.pwd # path running app in
52
+ app = "ruby magazine_slave_provider.rb #{id} #{app_pwd} #{@test_framework.short_name}"
53
+ @pids[id] = Process.create( :app_name => app, :cwd => @path ).process_id
54
+ end
55
+
56
+
57
+ def self.available?
58
+ true
59
+ end
60
+
61
+ def run(argv, stderr, stdout)
62
+ DRb.start_service
63
+ ts = Rinda::RingFinger.primary
64
+ if ts.read_all([:name, :MagazineSlave, nil, nil]).size > 0
65
+ print ' <-- take tuple'; stdout.flush
66
+ tuple = ts.take([:name, :MagazineSlave, nil, nil])
67
+ slave = tuple[2]
68
+ id = tuple[3]
69
+
70
+ puts "(#{slave.id_num}); slave.run..."; $stdout.flush
71
+ begin
72
+ slave.run(argv,stderr,stdout)
73
+ puts " -- (#{slave.id_num});run done"; $stdout.flush
74
+ ensure
75
+ restart_slave(id)
76
+ end
77
+ else
78
+ puts '- NO tuple'; $stdout.flush
79
+ end
80
+ end
81
+
82
+ def restart_slave(id)
83
+ pid = @pids[id]
84
+ Process.kill(4, pid)
85
+ start_slave(id)
86
+ end
87
+
88
+ def kill_all_processes
89
+
90
+ @pids.each {|pid| Process.kill(4, pid)}
91
+ puts "\nKilling processes."; $stdout.flush
92
+ end
93
+
94
+ def slave_count
95
+ DRb.start_service
96
+ ts = Rinda::RingFinger.primary
97
+ ts.read_all([:name, :MagazineSlave, nil, nil]).size
98
+ end
99
+
100
+
101
+ def abort
102
+ kill_all_processes
103
+ end
104
+
105
+ def preload
106
+ true
107
+ # @test_framework.preload
108
+ end
109
+
110
+ def running?
111
+ @running
112
+ end
113
+
114
+ end
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ require 'drb'
3
+ $:.unshift(File.dirname(__FILE__) + "/../../..") # directory of spork.rb
4
+ require 'spork'
5
+
6
+ class MagazineSlave
7
+ include DRb::DRbUndumped
8
+ attr_reader :id_num
9
+ def initialize(id_num, test_framework_short_name)
10
+ @id_num = id_num
11
+ @test_framework = Spork::TestFramework.factory(STDOUT, STDERR,
12
+ test_framework_short_name)
13
+ # ENV["DRB"] = 'true'
14
+ # Spork.using_spork!
15
+ return(nil) unless preload
16
+ end
17
+
18
+ def run(argv, stderr, stdout)
19
+ $stdout, $stderr = stdout, stderr
20
+ Spork.exec_each_run
21
+ load @test_framework.helper_file
22
+ @test_framework.run_tests(argv, stderr, stdout)
23
+ puts " <-- Slave(#{@id_num}) run done!"; stdout.flush
24
+ end
25
+
26
+ def preload
27
+ @test_framework.preload
28
+ end
29
+
30
+ end
@@ -0,0 +1,27 @@
1
+ # magazine_slave_provider.rb
2
+ require 'drb'
3
+ require 'rinda/ring'
4
+ require 'rinda/tuplespace'
5
+ require 'magazine_slave'
6
+
7
+
8
+
9
+ # pass on
10
+
11
+ id = ARGV[0].to_i || "?"
12
+ app_pwd = ARGV[1]
13
+ test_framework_short_name = ARGV[2]
14
+
15
+ # start up the Rinda service
16
+
17
+ DRb.start_service
18
+
19
+ Dir.chdir app_pwd
20
+ puts " -- build slave #{id}..."; $stdout.flush
21
+ magazine_slave = MagazineSlave.new(id, test_framework_short_name )
22
+ Rinda::RingProvider.new(:MagazineSlave, magazine_slave, id).provide
23
+
24
+ puts " --> DRb magazine_slave_service: #{id} provided..."; $stdout.flush
25
+
26
+ # wait for the DRb service to finish before exiting
27
+ DRb.thread.join
@@ -0,0 +1,10 @@
1
+ # ring_server.rb
2
+ require 'rinda/ring'
3
+ require 'rinda/tuplespace'
4
+
5
+ DRb.start_service
6
+
7
+ Rinda::RingServer.new(Rinda::TupleSpace.new)
8
+ puts " -- Rinda Ring Server listening for connections...\n\n"
9
+ $stdout.flush
10
+ DRb.thread.join
@@ -27,7 +27,7 @@ class Spork::Server
27
27
  trap("SIGTERM") { abort; exit!(0) }
28
28
  trap("USR2") { abort; restart } if Signal.list.has_key?("USR2")
29
29
  @drb_service = DRb.start_service("druby://127.0.0.1:#{port}", self)
30
- Spork.each_run { @drb_service.stop_service }
30
+ Spork.each_run { @drb_service.stop_service } if @run_strategy.class == Spork::RunStrategy::Forking
31
31
  stderr.puts "Spork is ready and listening on #{port}!"
32
32
  stderr.flush
33
33
  DRb.thread.join
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spork
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.8
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Harper
8
+ - Donald Parish
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
12
 
12
- date: 2010-03-03 00:00:00 -07:00
13
+ date: 2010-03-04 00:00:00 -07:00
13
14
  default_executable: spork
14
15
  dependencies: []
15
16
 
@@ -18,62 +19,39 @@ email:
18
19
  - timcharper+spork@gmail.com
19
20
  executables:
20
21
  - spork
21
- extensions: []
22
-
22
+ extensions:
23
+ - ext/mkrf_conf.rb
23
24
  extra_rdoc_files:
24
25
  - MIT-LICENSE
25
26
  - README.rdoc
26
27
  files:
27
- - MIT-LICENSE
28
- - README.rdoc
29
- - assets/bootstrap.rb
30
- - features/at_exit_during_each_run.feature
31
- - features/cucumber_rails_integration.feature
32
- - features/diagnostic_mode.feature
33
- - features/rails_delayed_loading_workarounds.feature
34
- - features/rspec_rails_integration.feature
35
- - features/spork_debugger.feature
36
- - features/steps/general_steps.rb
37
- - features/steps/rails_steps.rb
38
- - features/steps/sandbox_steps.rb
39
- - features/support/background_job.rb
40
- - features/support/env.rb
41
- - features/unknown_app_framework.feature
42
28
  - geminstaller.yml
43
- - lib/spork.rb
44
- - lib/spork/app_framework.rb
29
+ - README.rdoc
30
+ - MIT-LICENSE
45
31
  - lib/spork/app_framework/rails.rb
46
32
  - lib/spork/app_framework/rails_stub_files/application.rb
47
33
  - lib/spork/app_framework/rails_stub_files/application_controller.rb
48
34
  - lib/spork/app_framework/rails_stub_files/application_helper.rb
49
35
  - lib/spork/app_framework/unknown.rb
36
+ - lib/spork/app_framework.rb
50
37
  - lib/spork/custom_io_streams.rb
51
38
  - lib/spork/diagnoser.rb
52
39
  - lib/spork/ext/rails-reloader.rb
53
40
  - lib/spork/ext/ruby-debug.rb
54
41
  - lib/spork/forker.rb
55
- - lib/spork/run_strategy.rb
56
42
  - lib/spork/run_strategy/forking.rb
43
+ - lib/spork/run_strategy/magazine/magazine_slave.rb
44
+ - lib/spork/run_strategy/magazine/magazine_slave_provider.rb
45
+ - lib/spork/run_strategy/magazine/ring_server.rb
46
+ - lib/spork/run_strategy/magazine.rb
47
+ - lib/spork/run_strategy.rb
57
48
  - lib/spork/runner.rb
58
49
  - lib/spork/server.rb
59
- - lib/spork/test_framework.rb
60
50
  - lib/spork/test_framework/cucumber.rb
61
51
  - lib/spork/test_framework/rspec.rb
62
- - spec/spec_helper.rb
63
- - spec/spork/app_framework/rails_spec.rb
64
- - spec/spork/app_framework/unknown_spec.rb
65
- - spec/spork/app_framework_spec.rb
66
- - spec/spork/diagnoser_spec.rb
67
- - spec/spork/forker_spec.rb
68
- - spec/spork/run_strategy/forking_spec.rb
69
- - spec/spork/runner_spec.rb
70
- - spec/spork/server_spec.rb
71
- - spec/spork/test_framework/cucumber_spec.rb
72
- - spec/spork/test_framework/rspec_spec.rb
73
- - spec/spork/test_framework_spec.rb
74
- - spec/spork_spec.rb
75
- - spec/support/fake_framework.rb
76
- - spec/support/fake_run_strategy.rb
52
+ - lib/spork/test_framework.rb
53
+ - lib/spork.rb
54
+ - assets/bootstrap.rb
77
55
  has_rdoc: true
78
56
  homepage: http://github.com/timcharper/spork
79
57
  licenses: []
@@ -104,6 +82,18 @@ signing_key:
104
82
  specification_version: 3
105
83
  summary: spork
106
84
  test_files:
85
+ - features/at_exit_during_each_run.feature
86
+ - features/cucumber_rails_integration.feature
87
+ - features/diagnostic_mode.feature
88
+ - features/rails_delayed_loading_workarounds.feature
89
+ - features/rspec_rails_integration.feature
90
+ - features/spork_debugger.feature
91
+ - features/steps/general_steps.rb
92
+ - features/steps/rails_steps.rb
93
+ - features/steps/sandbox_steps.rb
94
+ - features/support/background_job.rb
95
+ - features/support/env.rb
96
+ - features/unknown_app_framework.feature
107
97
  - spec/spec_helper.rb
108
98
  - spec/spork/app_framework/rails_spec.rb
109
99
  - spec/spork/app_framework/unknown_spec.rb