Module: Qspec::SporkHelper

Included in:
CommandLine, Helper
Defined in:
lib/qspec/spork_helper.rb

Instance Method Summary collapse

Instance Method Details

#connect_spork(port, id, err, out) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/qspec/spork_helper.rb', line 31

def connect_spork(port, id, err, out)
  begin
    DRb.start_service("druby://localhost:0")
  rescue SocketError, Errno::EADDRNOTAVAIL
    DRb.start_service("druby://:0")
  end
  spec_server = DRbObject.new_with_uri("druby://127.0.0.1:#{port||PORT}")
  exit spec_server.run(@options.drb_argv + [id], err, out).to_i
end

#create_port_file(ports) ⇒ Object



41
42
43
44
45
# File 'lib/qspec/spork_helper.rb', line 41

def create_port_file(ports)
  File.open(port_file, 'w') do |f|
    f.puts ports.join("\n")
  end
end

#remove_port_fileObject



56
57
58
# File 'lib/qspec/spork_helper.rb', line 56

def remove_port_file
  File.unlink(port_file)
end

#runnning_portsObject



47
48
49
50
51
52
53
54
# File 'lib/qspec/spork_helper.rb', line 47

def runnning_ports
  @runnning_ports ||= begin
    ports = File.readlines(port_file).map { |line| line.strip.to_i }
    ports.empty? ? nil : ports
  rescue Errno::ENOENT
    nil
  end
end

#start_spork_workers(count) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/qspec/spork_helper.rb', line 12

def start_spork_workers(count)
  Signal.trap(:INT){
    puts "Stop spork processes"
    remove_port_file
    exit(0)
  }

  default_port = (@config['spork_port'] || ::Spork::TestFramework::Qspec::DEFAULT_PORT).to_i
  ports = []
  count.times do |i|
    port = default_port+i
    spawn({ "TEST_ENV_NUMBER" => i == 0 ? '' : (i + 1).to_s },
          "spork qspec --port #{port}")
    ports << port
  end
  create_port_file(ports)
  Process.waitall.all? { |pid, status| status.exitstatus == 0 } ? 0 : 1
end