Class: Spork::RunStrategy::Magazine

Inherits:
Spork::RunStrategy show all
Defined in:
lib/spork/run_strategy/magazine.rb

Constant Summary collapse

Slave_Id_Range =

Ringserver uses id: 0. Slave use: 1..MAX_SLAVES

1..3

Instance Attribute Summary

Attributes inherited from Spork::RunStrategy

#test_framework

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Spork::RunStrategy

#cleanup

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.expand_path(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

Returns:

  • (Boolean)


65
66
67
# File 'lib/spork/run_strategy/magazine.rb', line 65

def self.available?
  true
end

Instance Method Details

#abortObject



109
110
111
# File 'lib/spork/run_strategy/magazine.rb', line 109

def abort
  kill_all_processes
end

#fill_slave_poolObject



40
41
42
43
44
45
46
47
48
49
# File 'lib/spork/run_strategy/magazine.rb', line 40

def fill_slave_pool
  Slave_Id_Range.each do |id|
    start_slave(id)
    sleep 10
  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_processesObject



96
97
98
99
100
# File 'lib/spork/run_strategy/magazine.rb', line 96

def kill_all_processes

  @pids.each {|pid| Process.kill(9, pid)}
  puts "\nKilling processes."; $stdout.flush
end

#preloadObject



113
114
115
116
# File 'lib/spork/run_strategy/magazine.rb', line 113

def preload
  true
  #    @test_framework.preload
end

#restart_slave(id) ⇒ Object



90
91
92
93
94
# File 'lib/spork/run_strategy/magazine.rb', line 90

def restart_slave(id)
  pid   = @pids[id]
  Process.kill(9, pid)
  start_slave(id)
end

#run(argv, stderr, stdout) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/spork/run_strategy/magazine.rb', line 69

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

Returns:

  • (Boolean)


118
119
120
# File 'lib/spork/run_strategy/magazine.rb', line 118

def running?
  @running
end

#slave_countObject



102
103
104
105
106
# File 'lib/spork/run_strategy/magazine.rb', line 102

def slave_count
  DRb.start_service
  ts = Rinda::RingFinger.primary
  ts.read_all([:name, :MagazineSlave, nil, nil]).size
end

#slave_maxObject



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



57
58
59
60
61
62
63
# File 'lib/spork/run_strategy/magazine.rb', line 57

def spawn_process(app)
  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_ringserverObject



35
36
37
38
# File 'lib/spork/run_strategy/magazine.rb', line 35

def start_Rinda_ringserver
  app_name = 'ruby ring_server.rb'
  spawn_process(app_name)    
end

#start_slave(id) ⇒ Object



51
52
53
54
55
# File 'lib/spork/run_strategy/magazine.rb', line 51

def start_slave(id)
  app_pwd = Dir.pwd  # path running app in
  app = "ruby magazine_slave_provider.rb #{id} '#{app_pwd}' #{@test_framework.short_name}"
  @pids[id] = spawn_process(app)
end