class Flare::Test::Daemon
Constants
- Flared
- FlaredVersion
- Flarei
- FlareiVersion
Public Class Methods
new()
click to toggle source
# File lib/flare/test/daemon.rb, line 24 def initialize @flared = [] @flarei = [] @port = 20000+rand(10000) @port_mutex = Mutex.new @tempfiles = [] Kernel.at_exit { Flare::Test::Daemon.instance.shutdown } end
Public Instance Methods
assign_port()
click to toggle source
# File lib/flare/test/daemon.rb, line 60 def assign_port port = 0 @port_mutex.synchronize do port = @port @port += 1 end port end
deleteall(delthem)
click to toggle source
# File lib/flare/test/daemon.rb, line 126 def deleteall(delthem) return unless FileTest.exist?(delthem) if FileTest.directory?(delthem) Dir.foreach(delthem) do |file| next if /^\.+$/ =~ file deleteall(delthem.sub(/\/+$/,"") + "/" + file) end Dir.rmdir(delthem) rescue "" else File.delete(delthem) end end
invoke_flared(name, config, executable = Flared)
click to toggle source
# File lib/flare/test/daemon.rb, line 93 def invoke_flared(name, config, executable = Flared) config = Flare::Util::FlaredConf.new(config) conf = "/tmp/flared.#{name}.#{config.server_port}.conf" open(conf, "w") do |f| f.puts config.to_s end pid = fork if pid.nil? deleteall(config.data_dir) Dir.mkdir(config.data_dir) begin exec executable, "-f", conf rescue exit 1 end else @flared << pid @tempfiles << config.data_dir @tempfiles << conf end pid end
invoke_flarei(name, config, executable = Flarei)
click to toggle source
# File lib/flare/test/daemon.rb, line 69 def invoke_flarei(name, config, executable = Flarei) config["key-hash-algorithm"] = "crc32" if required_version? [1, 0, 15] config = Flare::Util::FlareiConf.new(config) conf = "/tmp/flarei.#{name}.#{config.server_port}.conf" open(conf, "w") do |f| f.puts config.to_s end pid = fork if pid.nil? deleteall(config.data_dir) Dir.mkdir(config.data_dir) begin exec executable, "-f", conf rescue exit 1 end else @flarei << pid @tempfiles << config.data_dir @tempfiles << conf end pid end
required_version?(required_version)
click to toggle source
# File lib/flare/test/daemon.rb, line 50 def required_version? required_version version = FlareiVersion.split('.').map {|i| i.to_i} (0...required_version.size).each do |i| n = if i < version.size then version[i] else 0 end return true if n > required_version[i] return false if n < required_version[i] end true end
shutdown()
click to toggle source
# File lib/flare/test/daemon.rb, line 35 def shutdown STDERR.print "killing..." (@flared+@flarei).each do |pid| kill_node_process(pid) end STDERR.print "\n" Process.waitall @flared.clear @flarei.clear @tempfiles.each do |datadir| deleteall(datadir) end @tempfiles.clear end
shutdown_flared(target_pid)
click to toggle source
# File lib/flare/test/daemon.rb, line 116 def shutdown_flared(target_pid) STDERR.print "killing node..." @flared.each_with_index do |pid, i| next unless pid == target_pid kill_node_process(pid) end STDERR.print "\n" @flared.delete(target_pid) end
Private Instance Methods
kill_node_process(pid)
click to toggle source
# File lib/flare/test/daemon.rb, line 141 def kill_node_process(pid) STDERR.print " #{pid}" begin Timeout.timeout(10) do Process.kill :TERM, pid Process.waitpid pid end rescue Errno::ESRCH STDERR.print "?" rescue TimeoutError => e Process.kill :KILL, pid Process.waitpid pid STDERR.print "*" end end