class Excon::Test::Server

def check_implementation(plug)

def check_implementation(plug)
  INSTANCE_REQUIRES.each do |m|
    unless self.respond_to? m
      raise "FATAL: #{plug} does not implement ##{m}"
    end
  end
end

def dump_errors

def dump_errors
  lines = error.read.split($/)
  while line = lines.shift
    case line
      when /(ERROR|Error)/
        unless line =~ /(null cert chain|did not return a certificate|SSL_read:: internal error)/
          in_err = true
          puts
        end
      when /^(127|localhost)/
        in_err = false
      end
    puts line if in_err
  end
end

def elapsed_time

def elapsed_time
  Time.now - started_at
end

def initialize(args)

def initialize(args)
  # TODO: Validate these args
  @server = args.keys.first
  @app = args[server]
  args[:bind] ||= 'tcp://127.0.0.1:9292'
  @bind = URI.parse(args[:bind])
  @is_unix_socket = (@bind.scheme == 'unix')
  @bind.host = @bind.host.gsub(/[\[\]]/, '') unless @is_unix_socket
  if args[:timeout]
    @timeout = args[:timeout]
  else
    @timeout = 20
  end
  name = @server.to_s.split('_').collect(&:capitalize).join
  plug = nested_const_get("Excon::Test::Plugin::Server::#{name}")
  self.extend plug
  check_implementation(plug)
end

def nested_const_get(namespace)

def nested_const_get(namespace)
  namespace.split('::').inject(Object) do |mod, klass|
    mod.const_get(klass)
  end
end

def open_process(*args)

def open_process(*args)
  if RUBY_PLATFORM == 'java'
    @pid, @write, @read, @error = IO.popen4(*args)
  else
    GC.disable if RUBY_VERSION < '1.9'
    @pid, @write, @read, @error = Open4.popen4(*args)
  end
  @started_at = Time.now
end

def stop

def stop
  if RUBY_PLATFORM == 'java'
    Process.kill('USR1', pid)
  else
    Process.kill(9, pid)
    GC.enable if RUBY_VERSION < '1.9'
    Process.wait(pid)
  end
  if @is_unix_socket
    socket = @bind.path
    File.delete(socket) if File.exist?(socket)
  end
  # TODO: Ensure process is really dead
  dump_errors
  true
end