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.
- data/ext/mkrf_conf.rb +19 -0
- data/geminstaller.yml +1 -0
- data/lib/spork/run_strategy.rb +5 -1
- data/lib/spork/run_strategy/magazine.rb +114 -0
- data/lib/spork/run_strategy/magazine/magazine_slave.rb +30 -0
- data/lib/spork/run_strategy/magazine/magazine_slave_provider.rb +27 -0
- data/lib/spork/run_strategy/magazine/ring_server.rb +10 -0
- data/lib/spork/server.rb +1 -1
- metadata +28 -38
data/ext/mkrf_conf.rb
ADDED
@@ -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
|
data/geminstaller.yml
CHANGED
data/lib/spork/run_strategy.rb
CHANGED
@@ -28,7 +28,11 @@ class Spork::RunStrategy
|
|
28
28
|
|
29
29
|
protected
|
30
30
|
def self.factory(test_framework)
|
31
|
-
|
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
|
data/lib/spork/server.rb
CHANGED
@@ -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.
|
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-
|
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
|
-
-
|
44
|
-
-
|
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
|
-
-
|
63
|
-
-
|
64
|
-
-
|
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
|