Adding some tests on websockets.
parent
6a871e8267
commit
7d554b0e67
|
@ -34,4 +34,10 @@ targets:
|
|||
websocketc:
|
||||
main: src/websocketc.cr
|
||||
|
||||
# tests
|
||||
test-ws-pong:
|
||||
main: tests/pong.cr
|
||||
test-closing:
|
||||
main: tests/closing.cr
|
||||
|
||||
license: ISC
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
require "option_parser"
|
||||
require "./test-ws"
|
||||
|
||||
uri = "ws://localhost:1234/pong.JSON"
|
||||
|
||||
OptionParser.parse do |parser|
|
||||
parser.on "-u uri", "--uri uri", "URI" do |opturi|
|
||||
uri = opturi
|
||||
end
|
||||
|
||||
parser.on "-h", "--help", "Show this help" do
|
||||
puts parser
|
||||
exit 0
|
||||
end
|
||||
end
|
||||
|
||||
begin
|
||||
tws = TestWS.new uri
|
||||
puts "connection done: closing it"
|
||||
tws.close
|
||||
tws.read
|
||||
rescue e
|
||||
puts "Exception: #{e}"
|
||||
end
|
|
@ -0,0 +1,72 @@
|
|||
require "option_parser"
|
||||
require "./test-ws"
|
||||
|
||||
uri = "ws://localhost:1234/pong.JSON"
|
||||
rounds = 5
|
||||
|
||||
OptionParser.parse do |parser|
|
||||
parser.on "-r rounds", "--rounds rounds", "Rounds" do |r|
|
||||
rounds = r.to_i
|
||||
end
|
||||
|
||||
parser.on "-u uri", "--uri uri", "URI" do |opturi|
|
||||
uri = opturi
|
||||
end
|
||||
|
||||
parser.on "-h", "--help", "Show this help" do
|
||||
puts parser
|
||||
exit 0
|
||||
end
|
||||
end
|
||||
|
||||
def multiple_messages_and_responses(tws : TestWS, data)
|
||||
tws.send 1, data
|
||||
tws.send 2, data
|
||||
tws.send 3, data
|
||||
tws.send 4, data
|
||||
tws.send 5, data
|
||||
|
||||
response = tws.read
|
||||
puts "1. received a message: #{response}"
|
||||
pp! response
|
||||
|
||||
response = tws.read
|
||||
puts "2. received a message: #{response}"
|
||||
pp! response
|
||||
|
||||
response = tws.read
|
||||
puts "3. received a message: #{response}"
|
||||
pp! response
|
||||
|
||||
response = tws.read
|
||||
puts "4. received a message: #{response}"
|
||||
pp! response
|
||||
|
||||
response = tws.read
|
||||
puts "5. received a message: #{response}"
|
||||
pp! response
|
||||
end
|
||||
|
||||
def single_message_and_response(tws : TestWS, data)
|
||||
tws.send 1, data
|
||||
response = tws.read
|
||||
pp! response
|
||||
end
|
||||
|
||||
begin
|
||||
tws = TestWS.new uri
|
||||
# puts "connection done: sending pong"
|
||||
|
||||
data = STDIN.gets_to_end
|
||||
data = data.chomp
|
||||
|
||||
rounds.times do |i|
|
||||
single_message_and_response tws, "#{data} #{i}"
|
||||
end
|
||||
|
||||
# puts "closing the connection"
|
||||
tws.close
|
||||
tws.read
|
||||
rescue e
|
||||
puts "Exception: #{e}"
|
||||
end
|
|
@ -0,0 +1,57 @@
|
|||
require "http/web_socket"
|
||||
|
||||
require "../src/colors"
|
||||
require "../src/utils"
|
||||
|
||||
require "../src/ws"
|
||||
|
||||
require "json"
|
||||
|
||||
class TestWS
|
||||
property ws : WebSocket
|
||||
property is_json : Bool
|
||||
|
||||
def initialize(uri : String)
|
||||
@ws = WebSocket.new(URI.parse(uri))
|
||||
@is_json = uri.ends_with? ".JSON"
|
||||
@ws.on_close do |socket|
|
||||
raise "socket is closing"
|
||||
end
|
||||
end
|
||||
|
||||
def read
|
||||
m = @ws.read
|
||||
if m.nil?
|
||||
raise "empty message"
|
||||
end
|
||||
|
||||
# remove ping messages, they are not application-relevent
|
||||
while m.is_a?(HTTP::WebSocket::Ping)
|
||||
puts "received a ping message, skipping"
|
||||
m = @ws.read
|
||||
if m.nil?
|
||||
raise "empty message"
|
||||
end
|
||||
end
|
||||
|
||||
m
|
||||
end
|
||||
|
||||
def send(type : Int32, data : String | Slice)
|
||||
m = to_message type, data
|
||||
|
||||
# quick hack to send json messages
|
||||
if @is_json
|
||||
json_message = data.chomp
|
||||
final_json_message = "{ \"mtype\": #{type}, \"payload\": \"#{json_message}\" }"
|
||||
# puts "message: #{final_json_message}"
|
||||
m = final_json_message
|
||||
end
|
||||
|
||||
@ws.send m
|
||||
end
|
||||
|
||||
def close
|
||||
@ws.close
|
||||
end
|
||||
end
|
Reference in New Issue