Merge branch 'phoenix14' into 'develop'
[akkoma] / test / support / websocket_client.ex
1 defmodule Pleroma.Integration.WebsocketClient do
2 # https://github.com/phoenixframework/phoenix/blob/master/test/support/websocket_client.exs
3
4 @doc """
5 Starts the WebSocket server for given ws URL. Received Socket.Message's
6 are forwarded to the sender pid
7 """
8 def start_link(sender, url, headers \\ []) do
9 :crypto.start()
10 :ssl.start()
11
12 :websocket_client.start_link(
13 String.to_charlist(url),
14 __MODULE__,
15 [sender],
16 extra_headers: headers
17 )
18 end
19
20 @doc """
21 Closes the socket
22 """
23 def close(socket) do
24 send(socket, :close)
25 end
26
27 @doc """
28 Sends a low-level text message to the client.
29 """
30 def send_text(server_pid, msg) do
31 send(server_pid, {:text, msg})
32 end
33
34 @doc false
35 def init([sender], _conn_state) do
36 {:ok, %{sender: sender}}
37 end
38
39 @doc false
40 def websocket_handle(frame, _conn_state, state) do
41 send(state.sender, frame)
42 {:ok, state}
43 end
44
45 @doc false
46 def websocket_info({:text, msg}, _conn_state, state) do
47 {:reply, {:text, msg}, state}
48 end
49
50 def websocket_info(:close, _conn_state, _state) do
51 {:close, <<>>, "done"}
52 end
53
54 @doc false
55 def websocket_terminate(_reason, _conn_state, _state) do
56 :ok
57 end
58 end