Methods
C
N
R
S
W
Attributes
[R] pings
Class Public methods
new(port)
# File actioncable/test/client_test.rb, line 76
def initialize(port)
  @ws = Faye::WebSocket::Client.new("ws://127.0.0.1:#{port}/")
  @messages = Queue.new
  @closed = Concurrent::Event.new
  @has_messages = Concurrent::Semaphore.new(0)
  @pings = 0

  open = Concurrent::Event.new
  error = nil

  @ws.on(:error) do |event|
    if open.set?
      @messages << RuntimeError.new(event.message)
    else
      error = event.message
      open.set
    end
  end

  @ws.on(:open) do |event|
    open.set
  end

  @ws.on(:message) do |event|
    message = JSON.parse(event.data)
    if message['type'] == 'ping'
      @pings += 1
    else
      @messages << message
      @has_messages.release
    end
  end

  @ws.on(:close) do |event|
    @closed.set
  end

  open.wait(WAIT_WHEN_EXPECTING_EVENT)
  raise error if error
end
Instance Public methods
close()
# File actioncable/test/client_test.rb, line 145
def close
  sleep WAIT_WHEN_NOT_EXPECTING_EVENT

  unless @messages.empty?
    raise "#{@messages.size} messages unprocessed"
  end

  @ws.close
  wait_for_close
end
closed?()
# File actioncable/test/client_test.rb, line 160
def closed?
  @closed.set?
end
read_message()
# File actioncable/test/client_test.rb, line 117
def read_message
  @has_messages.try_acquire(1, WAIT_WHEN_EXPECTING_EVENT)

  msg = @messages.pop(true)
  raise msg if msg.is_a?(Exception)

  msg
end
read_messages(expected_size = 0)
# File actioncable/test/client_test.rb, line 126
def read_messages(expected_size = 0)
  list = []
  loop do
    if @has_messages.try_acquire(1, list.size < expected_size ? WAIT_WHEN_EXPECTING_EVENT : WAIT_WHEN_NOT_EXPECTING_EVENT)
      msg = @messages.pop(true)
      raise msg if msg.is_a?(Exception)

      list << msg
    else
      break
    end
  end
  list
end
send_message(message)
# File actioncable/test/client_test.rb, line 141
def send_message(message)
  @ws.send(JSON.generate(message))
end
wait_for_close()
# File actioncable/test/client_test.rb, line 156
def wait_for_close
  @closed.wait(WAIT_WHEN_EXPECTING_EVENT)
end