Add option to modify HTTP pool size
[akkoma] / test / support / websocket_client.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Integration.WebsocketClient do
6 # https://github.com/phoenixframework/phoenix/blob/master/test/support/websocket_client.exs
7
8 use WebSockex
9
10 @doc """
11 Starts the WebSocket server for given ws URL. Received Socket.Message's
12 are forwarded to the sender pid
13 """
14 def start_link(sender, url, headers \\ []) do
15 WebSockex.start_link(
16 url,
17 __MODULE__,
18 %{sender: sender},
19 extra_headers: headers
20 )
21 end
22
23 @doc """
24 Closes the socket
25 """
26 def close(socket) do
27 send(socket, :close)
28 end
29
30 @doc """
31 Sends a low-level text message to the client.
32 """
33 def send_text(server_pid, msg) do
34 send(server_pid, {:text, msg})
35 end
36
37 @doc false
38 @impl true
39 def handle_frame(frame, state) do
40 send(state.sender, frame)
41 {:ok, state}
42 end
43
44 @impl true
45 def handle_disconnect(conn_status, state) do
46 send(state.sender, {:close, conn_status})
47 {:ok, state}
48 end
49
50 @doc false
51 @impl true
52 def handle_info({:text, msg}, state) do
53 {:reply, {:text, msg}, state}
54 end
55
56 @impl true
57 def handle_info(:close, _state) do
58 {:close, <<>>, "done"}
59 end
60
61 @doc false
62 @impl true
63 def terminate(_reason, _state) do
64 :ok
65 end
66 end