aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/jobs_test.exs83
-rw-r--r--test/support/jobs_worker_mock.ex19
-rw-r--r--test/web/federator_test.exs24
3 files changed, 106 insertions, 20 deletions
diff --git a/test/jobs_test.exs b/test/jobs_test.exs
new file mode 100644
index 000000000..ccb518dec
--- /dev/null
+++ b/test/jobs_test.exs
@@ -0,0 +1,83 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.JobsTest do
+ use ExUnit.Case, async: true
+
+ alias Pleroma.Jobs
+ alias Jobs.WorkerMock
+
+ setup do
+ state = %{
+ queues: Enum.into([Jobs.create_queue(:testing)], %{}),
+ refs: %{}
+ }
+
+ [state: state]
+ end
+
+ test "creates queue" do
+ queue = Jobs.create_queue(:foobar)
+
+ assert {:foobar, set} = queue
+ assert :set == elem(set, 0) |> elem(0)
+ end
+
+ test "enqueues an element according to priority" do
+ queue = [%{item: 1, priority: 2}]
+
+ new_queue = Jobs.enqueue_sorted(queue, 2, 1)
+ assert new_queue == [%{item: 2, priority: 1}, %{item: 1, priority: 2}]
+
+ new_queue = Jobs.enqueue_sorted(queue, 2, 3)
+ assert new_queue == [%{item: 1, priority: 2}, %{item: 2, priority: 3}]
+ end
+
+ test "pop first item" do
+ queue = [%{item: 2, priority: 1}, %{item: 1, priority: 2}]
+
+ assert {2, [%{item: 1, priority: 2}]} = Jobs.queue_pop(queue)
+ end
+
+ test "enqueue a job", %{state: state} do
+ assert {:noreply, new_state} =
+ Jobs.handle_cast({:enqueue, :testing, WorkerMock, [:test_job, :foo, :bar], 3}, state)
+
+ assert %{queues: %{testing: {running_jobs, []}}, refs: _} = new_state
+ assert :sets.size(running_jobs) == 1
+ assert [ref] = :sets.to_list(running_jobs)
+ assert %{refs: %{^ref => :testing}} = new_state
+ end
+
+ test "max jobs setting", %{state: state} do
+ max_jobs = Pleroma.Config.get([Jobs, :testing, :max_jobs])
+
+ {:noreply, state} =
+ Enum.reduce(1..(max_jobs + 1), {:noreply, state}, fn _, {:noreply, state} ->
+ Jobs.handle_cast({:enqueue, :testing, WorkerMock, [:test_job, :foo, :bar], 3}, state)
+ end)
+
+ assert %{
+ queues: %{
+ testing:
+ {running_jobs, [%{item: {WorkerMock, [:test_job, :foo, :bar]}, priority: 3}]}
+ }
+ } = state
+
+ assert :sets.size(running_jobs) == max_jobs
+ end
+
+ test "remove job after it finished", %{state: state} do
+ {:noreply, new_state} =
+ Jobs.handle_cast({:enqueue, :testing, WorkerMock, [:test_job, :foo, :bar], 3}, state)
+
+ %{queues: %{testing: {running_jobs, []}}} = new_state
+ [ref] = :sets.to_list(running_jobs)
+
+ assert {:noreply, %{queues: %{testing: {running_jobs, []}}, refs: %{}}} =
+ Jobs.handle_info({:DOWN, ref, :process, nil, nil}, new_state)
+
+ assert :sets.size(running_jobs) == 0
+ end
+end
diff --git a/test/support/jobs_worker_mock.ex b/test/support/jobs_worker_mock.ex
new file mode 100644
index 000000000..0fb976d05
--- /dev/null
+++ b/test/support/jobs_worker_mock.ex
@@ -0,0 +1,19 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Jobs.WorkerMock do
+ require Logger
+
+ def perform(:test_job, arg, arg2) do
+ Logger.debug({:perform, :test_job, arg, arg2})
+ end
+
+ def perform(:test_job, payload) do
+ Logger.debug({:perform, :test_job, payload})
+ end
+
+ def test_job(payload) do
+ Pleroma.Jobs.enqueue(:testing, __MODULE__, [:test_job, payload])
+ end
+end
diff --git a/test/web/federator_test.exs b/test/web/federator_test.exs
index a49265c0c..d58621cc3 100644
--- a/test/web/federator_test.exs
+++ b/test/web/federator_test.exs
@@ -14,22 +14,6 @@ defmodule Pleroma.Web.FederatorTest do
:ok
end
- test "enqueues an element according to priority" do
- queue = [%{item: 1, priority: 2}]
-
- new_queue = Federator.enqueue_sorted(queue, 2, 1)
- assert new_queue == [%{item: 2, priority: 1}, %{item: 1, priority: 2}]
-
- new_queue = Federator.enqueue_sorted(queue, 2, 3)
- assert new_queue == [%{item: 1, priority: 2}, %{item: 2, priority: 3}]
- end
-
- test "pop first item" do
- queue = [%{item: 2, priority: 1}, %{item: 1, priority: 2}]
-
- assert {2, [%{item: 1, priority: 2}]} = Federator.queue_pop(queue)
- end
-
describe "Publish an activity" do
setup do
user = insert(:user)
@@ -49,7 +33,7 @@ defmodule Pleroma.Web.FederatorTest do
relay_mock: relay_mock
} do
with_mocks([relay_mock]) do
- Federator.handle(:publish, activity)
+ Federator.publish(activity)
end
assert_received :relay_publish
@@ -62,7 +46,7 @@ defmodule Pleroma.Web.FederatorTest do
Pleroma.Config.put([:instance, :allow_relay], false)
with_mocks([relay_mock]) do
- Federator.handle(:publish, activity)
+ Federator.publish(activity)
end
refute_received :relay_publish
@@ -87,7 +71,7 @@ defmodule Pleroma.Web.FederatorTest do
"to" => ["https://www.w3.org/ns/activitystreams#Public"]
}
- {:ok, _activity} = Federator.handle(:incoming_ap_doc, params)
+ {:ok, _activity} = Federator.incoming_ap_doc(params)
end
test "rejects incoming AP docs with incorrect origin" do
@@ -105,7 +89,7 @@ defmodule Pleroma.Web.FederatorTest do
"to" => ["https://www.w3.org/ns/activitystreams#Public"]
}
- :error = Federator.handle(:incoming_ap_doc, params)
+ :error = Federator.incoming_ap_doc(params)
end
end
end