spork 0.7.8 → 0.8.0

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.
@@ -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