diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/jobs_test.exs | 83 | ||||
| -rw-r--r-- | test/support/jobs_worker_mock.ex | 19 | ||||
| -rw-r--r-- | test/web/federator_test.exs | 24 | 
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 05f813291..147086918 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 @@ -205,7 +189,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 @@ -223,7 +207,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 | 
