7bd2d995a7c3de330be2734e0b473a0526f68bc4
[akkoma] / test / pleroma / web / fed_sockets / fetch_registry_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.FedSockets.FetchRegistryTest do
6 use ExUnit.Case
7
8 alias Pleroma.Web.FedSockets.FetchRegistry
9 alias Pleroma.Web.FedSockets.FetchRegistry.FetchRegistryData
10
11 @json_message "hello"
12 @json_reply "hello back"
13
14 setup do
15 start_supervised(
16 {Pleroma.Web.FedSockets.Supervisor,
17 [
18 ping_interval: 8,
19 connection_duration: 15,
20 rejection_duration: 5,
21 fed_socket_fetches: [default: 10, interval: 10]
22 ]}
23 )
24
25 :ok
26 end
27
28 test "fetches can be stored" do
29 uuid = FetchRegistry.register_fetch(@json_message)
30
31 assert {:error, :waiting} = FetchRegistry.check_fetch(uuid)
32 end
33
34 test "fetches can return" do
35 uuid = FetchRegistry.register_fetch(@json_message)
36 task = Task.async(fn -> FetchRegistry.register_fetch_received(uuid, @json_reply) end)
37
38 assert {:error, :waiting} = FetchRegistry.check_fetch(uuid)
39 Task.await(task)
40
41 assert {:ok, %FetchRegistryData{received_json: received_json}} =
42 FetchRegistry.check_fetch(uuid)
43
44 assert received_json == @json_reply
45 end
46
47 test "fetches are deleted once popped from stack" do
48 uuid = FetchRegistry.register_fetch(@json_message)
49 task = Task.async(fn -> FetchRegistry.register_fetch_received(uuid, @json_reply) end)
50 Task.await(task)
51
52 assert {:ok, %FetchRegistryData{received_json: received_json}} =
53 FetchRegistry.check_fetch(uuid)
54
55 assert received_json == @json_reply
56 assert {:ok, @json_reply} = FetchRegistry.pop_fetch(uuid)
57
58 assert {:error, :missing} = FetchRegistry.check_fetch(uuid)
59 end
60
61 test "fetches can time out" do
62 uuid = FetchRegistry.register_fetch(@json_message)
63 assert {:error, :waiting} = FetchRegistry.check_fetch(uuid)
64 Process.sleep(500)
65 assert {:error, :missing} = FetchRegistry.check_fetch(uuid)
66 end
67 end