Class: Spork::RunStrategy::Magazine
- Inherits:
-
Spork::RunStrategy
- Object
- Spork::RunStrategy
- Spork::RunStrategy::Magazine
- Defined in:
- lib/spork/run_strategy/magazine.rb
Constant Summary collapse
- Slave_Id_Range =
Ringserver uses id: 0. Slave use: 1..MAX_SLAVES
1..2
Instance Attribute Summary
Attributes inherited from Spork::RunStrategy
Class Method Summary collapse
Instance Method Summary collapse
- #abort ⇒ Object
- #fill_slave_pool ⇒ Object
-
#initialize(test_framework) ⇒ Magazine
constructor
A new instance of Magazine.
- #kill_all_processes ⇒ Object
- #preload ⇒ Object
- #restart_slave(id) ⇒ Object
- #run(argv, stderr, stdout) ⇒ Object
- #running? ⇒ Boolean
- #slave_count ⇒ Object
- #slave_max ⇒ Object
- #spawn_process(app) ⇒ Object
- #start_Rinda_ringserver ⇒ Object
- #start_slave(id) ⇒ Object
- #windows? ⇒ Boolean
Methods inherited from Spork::RunStrategy
Constructor Details
#initialize(test_framework) ⇒ Magazine
Returns a new instance of Magazine.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/spork/run_strategy/magazine.rb', line 20 def initialize(test_framework) @test_framework = test_framework this_path = File.(File.dirname(__FILE__)) @path = File.join(this_path, 'magazine') @pids = [] @pids << start_Rinda_ringserver sleep 1 fill_slave_pool rescue RuntimeError => e kill_all_processes raise e end |
Class Method Details
.available? ⇒ Boolean
74 75 76 |
# File 'lib/spork/run_strategy/magazine.rb', line 74 def self.available? true end |
Instance Method Details
#abort ⇒ Object
128 129 130 |
# File 'lib/spork/run_strategy/magazine.rb', line 128 def abort kill_all_processes end |
#fill_slave_pool ⇒ Object
40 41 42 43 44 45 46 47 48 |
# File 'lib/spork/run_strategy/magazine.rb', line 40 def fill_slave_pool Slave_Id_Range.each do |id| start_slave(id) end puts " -- Starting to fill pool..." puts " Wait until at least one slave is provided before running tests..." puts " ** CTRL+BREAK to stop Spork and kill all ruby slave processes **" $stdout.flush end |
#kill_all_processes ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/spork/run_strategy/magazine.rb', line 109 def kill_all_processes @pids.each {|pid| if windows? system("taskkill /f /pid #{pid}") else Process.kill(9, pid) end } puts "\nKilling processes."; $stdout.flush end |
#preload ⇒ Object
132 133 134 135 |
# File 'lib/spork/run_strategy/magazine.rb', line 132 def preload true # @test_framework.preload end |
#restart_slave(id) ⇒ Object
99 100 101 102 103 |
# File 'lib/spork/run_strategy/magazine.rb', line 99 def restart_slave(id) pid = @pids[id] Process.kill(9, pid) start_slave(id) end |
#run(argv, stderr, stdout) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/spork/run_strategy/magazine.rb', line 78 def run(argv, stderr, stdout) DRb.start_service ts = Rinda::RingFinger.primary if ts.read_all([:name, :MagazineSlave, nil, nil]).size > 0 print ' <-- take tuple'; stdout.flush tuple = ts.take([:name, :MagazineSlave, nil, nil]) slave = tuple[2] id = tuple[3] puts "(#{slave.id_num}); slave.run..."; $stdout.flush begin slave.run(argv,stderr,stdout) puts " -- (#{slave.id_num});run done"; $stdout.flush ensure restart_slave(id) end else puts '- NO tuple'; $stdout.flush end end |
#running? ⇒ Boolean
137 138 139 |
# File 'lib/spork/run_strategy/magazine.rb', line 137 def running? @running end |
#slave_count ⇒ Object
121 122 123 124 125 |
# File 'lib/spork/run_strategy/magazine.rb', line 121 def slave_count DRb.start_service ts = Rinda::RingFinger.primary ts.read_all([:name, :MagazineSlave, nil, nil]).size end |
#slave_max ⇒ Object
16 17 18 |
# File 'lib/spork/run_strategy/magazine.rb', line 16 def slave_max Slave_Id_Range.to_a.size end |
#spawn_process(app) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/spork/run_strategy/magazine.rb', line 56 def spawn_process(app) if RUBY_PLATFORM =~ /java/ # jruby 1.8 has no easy way to just spawn, so use a thread Dir.chdir(@path) do io = IO.popen app Thread.new { puts io.read } return io.pid end end if RUBY_VERSION < '1.9.1' Process.create( :app_name => app, :cwd => @path ).process_id else Process.spawn( app, :chdir => @path ) end end |
#start_Rinda_ringserver ⇒ Object
35 36 37 38 |
# File 'lib/spork/run_strategy/magazine.rb', line 35 def start_Rinda_ringserver app_name = "#{Gem.ruby} ring_server.rb" spawn_process(app_name) end |
#start_slave(id) ⇒ Object
50 51 52 53 54 |
# File 'lib/spork/run_strategy/magazine.rb', line 50 def start_slave(id) app_pwd = Dir.pwd # path running app in app = "#{Gem.ruby} magazine_slave_provider.rb #{id} '#{app_pwd}' #{@test_framework.short_name}" @pids[id] = spawn_process(app) end |
#windows? ⇒ Boolean
105 106 107 |
# File 'lib/spork/run_strategy/magazine.rb', line 105 def windows? ENV['OS'] == 'Windows_NT' end |