aboutsummaryrefslogtreecommitdiff
path: root/test/support/websocket_client.ex
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2018-12-18 21:39:36 +0300
committerrinpatch <rinpatch@sdf.org>2018-12-18 21:39:36 +0300
commitef318fb8a96ddf276393f4ec81d3242dd7c6a4d4 (patch)
treea030123a4bbe071613e87c41bee00333727208dc /test/support/websocket_client.ex
parent059dd6f681caf14ee9d288ec14b82132be29ae2c (diff)
parent443d59baa05165c3b5b7ab14f3eabd6f2eba09f2 (diff)
downloadpleroma-ef318fb8a96ddf276393f4ec81d3242dd7c6a4d4.tar.gz
Merge branch 'develop' into fix/formatter-ignore-html-chars
Diffstat (limited to 'test/support/websocket_client.ex')
-rw-r--r--test/support/websocket_client.ex58
1 files changed, 58 insertions, 0 deletions
diff --git a/test/support/websocket_client.ex b/test/support/websocket_client.ex
new file mode 100644
index 000000000..57e9bb17f
--- /dev/null
+++ b/test/support/websocket_client.ex
@@ -0,0 +1,58 @@
+defmodule Pleroma.Integration.WebsocketClient do
+ # https://github.com/phoenixframework/phoenix/blob/master/test/support/websocket_client.exs
+
+ @doc """
+ Starts the WebSocket server for given ws URL. Received Socket.Message's
+ are forwarded to the sender pid
+ """
+ def start_link(sender, url, headers \\ []) do
+ :crypto.start()
+ :ssl.start()
+
+ :websocket_client.start_link(
+ String.to_charlist(url),
+ __MODULE__,
+ [sender],
+ extra_headers: headers
+ )
+ end
+
+ @doc """
+ Closes the socket
+ """
+ def close(socket) do
+ send(socket, :close)
+ end
+
+ @doc """
+ Sends a low-level text message to the client.
+ """
+ def send_text(server_pid, msg) do
+ send(server_pid, {:text, msg})
+ end
+
+ @doc false
+ def init([sender], _conn_state) do
+ {:ok, %{sender: sender}}
+ end
+
+ @doc false
+ def websocket_handle(frame, _conn_state, state) do
+ send(state.sender, frame)
+ {:ok, state}
+ end
+
+ @doc false
+ def websocket_info({:text, msg}, _conn_state, state) do
+ {:reply, {:text, msg}, state}
+ end
+
+ def websocket_info(:close, _conn_state, _state) do
+ {:close, <<>>, "done"}
+ end
+
+ @doc false
+ def websocket_terminate(_reason, _conn_state, _state) do
+ :ok
+ end
+end