Created
April 2, 2015 16:20
-
-
Save WillSewell/bb4e8db17acd38c30c51 to your computer and use it in GitHub Desktop.
Old Pusher "webhook-channel-vacated" integration test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
AsyncTest.define("webhook-channel-vacated #{params[:cluster_name]}", checks: 4, timeout: params[:timeout] ) { |t| | |
channel_name = "channel-existence-#{rand(1000000)}" | |
params[:webhooks]["/#{params[:cluster_name]}/webhook-channel-vacated"]=Proc.new do |post| | |
next unless channel_name == (post["events"][0]["channel"] rescue nil) | |
begin | |
event_name = post["events"][0]["name"] | |
pattern = { | |
"time_ms" => matches{|x| x.kind_of?(Integer)}, | |
"events" => [{ "channel" => channel_name, "name" => event_name }] | |
} | |
if event_name == "channel_vacated" | |
t.assert(4, "channel_vacated", pattern == post) | |
end | |
rescue => e | |
t.log "bad webhook reply #{post.to_s}" | |
t.fail(e.to_s) | |
end | |
true | |
end | |
# Connect to websocket | |
uri = params[:ws] | |
uri.query = "client=integration&protocol=5" | |
begin | |
ws = Faye::WebSocket::Client.new(uri.to_s) | |
rescue EventMachine::ConnectionError => e | |
t.fail(e.message) | |
next | |
end | |
ws.on(:open) { | |
ws_ip = AsyncTest.get_websocket_endpoint_ip(ws) | |
t.log("Websocket endpoint IP #{ws_ip}") | |
t.ensure { ws.close } | |
t.assert(1, "onopen #{ws.version}") | |
} | |
ws.on(:close) { t.log "webhook-channel-existence disconnected from #{uri.to_s}" } | |
# Wait for the socket to connect and subscribe to channel | |
ws.on(:message) do |packet| | |
message = JSON.parse(packet.data) | |
case t.incr | |
when 1 | |
# First subscribe | |
if message["event"] == "pusher:connection_established" | |
t.assert(2, "onconnected") | |
ws.send JSON.generate({ | |
event: "pusher:subscribe", | |
data: {channel: channel_name} | |
}) | |
end | |
when 2 | |
# And once we're subscribed, unsubscribe so that the channel_vacated webhook is send | |
t.assert(3, "subscribed", message["event"] == "pusher_internal:subscription_succeeded") | |
ws.send JSON.generate({ | |
event: "pusher:unsubscribe", | |
data: {channel: channel_name} | |
}) | |
else | |
t.error("Ordering error. Expected check 1 or 2") | |
end | |
end | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment