Adding some tests on websockets.
parent
6a871e8267
commit
7d554b0e67
|
@ -34,4 +34,10 @@ targets:
|
||||||
websocketc:
|
websocketc:
|
||||||
main: src/websocketc.cr
|
main: src/websocketc.cr
|
||||||
|
|
||||||
|
# tests
|
||||||
|
test-ws-pong:
|
||||||
|
main: tests/pong.cr
|
||||||
|
test-closing:
|
||||||
|
main: tests/closing.cr
|
||||||
|
|
||||||
license: ISC
|
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