diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/integration/mastodon_websocket_test.exs | 12 | ||||
-rw-r--r-- | test/notification_test.exs | 11 | ||||
-rw-r--r-- | test/web/streamer/streamer_test.exs | 104 |
3 files changed, 97 insertions, 30 deletions
diff --git a/test/integration/mastodon_websocket_test.exs b/test/integration/mastodon_websocket_test.exs index bd229c55f..39be5ad08 100644 --- a/test/integration/mastodon_websocket_test.exs +++ b/test/integration/mastodon_websocket_test.exs @@ -35,7 +35,7 @@ defmodule Pleroma.Integration.MastodonWebsocketTest do test "refuses invalid requests" do capture_log(fn -> - assert {:error, {400, _}} = start_socket() + assert {:error, {404, _}} = start_socket() assert {:error, {404, _}} = start_socket("?stream=ncjdk") Process.sleep(30) end) @@ -43,8 +43,8 @@ defmodule Pleroma.Integration.MastodonWebsocketTest do test "requires authentication and a valid token for protected streams" do capture_log(fn -> - assert {:error, {403, _}} = start_socket("?stream=user&access_token=aaaaaaaaaaaa") - assert {:error, {403, _}} = start_socket("?stream=user") + assert {:error, {401, _}} = start_socket("?stream=user&access_token=aaaaaaaaaaaa") + assert {:error, {401, _}} = start_socket("?stream=user") Process.sleep(30) end) end @@ -103,7 +103,7 @@ defmodule Pleroma.Integration.MastodonWebsocketTest do assert {:ok, _} = start_socket("?stream=user&access_token=#{token.token}") assert capture_log(fn -> - assert {:error, {403, "Forbidden"}} = start_socket("?stream=user") + assert {:error, {401, _}} = start_socket("?stream=user") Process.sleep(30) end) =~ ":badarg" end @@ -112,7 +112,7 @@ defmodule Pleroma.Integration.MastodonWebsocketTest do assert {:ok, _} = start_socket("?stream=user:notification&access_token=#{token.token}") assert capture_log(fn -> - assert {:error, {403, "Forbidden"}} = start_socket("?stream=user:notification") + assert {:error, {401, _}} = start_socket("?stream=user:notification") Process.sleep(30) end) =~ ":badarg" end @@ -121,7 +121,7 @@ defmodule Pleroma.Integration.MastodonWebsocketTest do assert {:ok, _} = start_socket("?stream=user", [{"Sec-WebSocket-Protocol", token.token}]) assert capture_log(fn -> - assert {:error, {403, "Forbidden"}} = + assert {:error, {401, _}} = start_socket("?stream=user", [{"Sec-WebSocket-Protocol", "I am a friend"}]) Process.sleep(30) diff --git a/test/notification_test.exs b/test/notification_test.exs index e12418db3..d04754a9d 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -164,12 +164,13 @@ defmodule Pleroma.NotificationTest do user = insert(:user) task = Task.async(fn -> assert_receive {:text, _}, 4_000 end) task_user_notification = Task.async(fn -> assert_receive {:text, _}, 4_000 end) - Streamer.add_socket("user", %{transport_pid: task.pid, assigns: %{user: user}}) - Streamer.add_socket( - "user:notification", - %{transport_pid: task_user_notification.pid, assigns: %{user: user}} - ) + Streamer.get_topic_and_add_socket("user", %{transport_pid: task.pid, assigns: %{user: user}}) + + Streamer.get_topic_and_add_socket("user:notification", %{ + transport_pid: task_user_notification.pid, + assigns: %{user: user} + }) activity = insert(:note_activity) diff --git a/test/web/streamer/streamer_test.exs b/test/web/streamer/streamer_test.exs index 720f8fa44..cbd5ec462 100644 --- a/test/web/streamer/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -17,11 +17,81 @@ defmodule Pleroma.Web.StreamerTest do @moduletag needs_streamer: true, capture_log: true - @streamer_timeout 150 + @streamer_timeout 300 @streamer_start_wait 10 clear_config([:instance, :skip_thread_containment]) + describe "get_topic without an user" do + test "allows public" do + assert {:ok, "public"} = Streamer.get_topic("public", nil) + assert {:ok, "public:local"} = Streamer.get_topic("public:local", nil) + assert {:ok, "public:media"} = Streamer.get_topic("public:media", nil) + assert {:ok, "public:local:media"} = Streamer.get_topic("public:local:media", nil) + end + + test "allows hashtag streams" do + assert {:ok, "hashtag:cofe"} = Streamer.get_topic("hashtag", nil, %{"tag" => "cofe"}) + end + + test "disallows user streams" do + assert {:error, _} = Streamer.get_topic("user", nil) + assert {:error, _} = Streamer.get_topic("user:notification", nil) + assert {:error, _} = Streamer.get_topic("direct", nil) + end + + test "disallows list streams" do + assert {:error, _} = Streamer.get_topic("list", nil, %{"list" => 42}) + end + end + + describe "get_topic with an user" do + setup do + user = insert(:user) + {:ok, %{user: user}} + end + + test "allows public streams", %{user: user} do + assert {:ok, "public"} = Streamer.get_topic("public", user) + assert {:ok, "public:local"} = Streamer.get_topic("public:local", user) + assert {:ok, "public:media"} = Streamer.get_topic("public:media", user) + assert {:ok, "public:local:media"} = Streamer.get_topic("public:local:media", user) + end + + test "allows user streams", %{user: user} do + expected_user_topic = "user:#{user.id}" + expected_notif_topic = "user:notification:#{user.id}" + expected_direct_topic = "direct:#{user.id}" + assert {:ok, ^expected_user_topic} = Streamer.get_topic("user", user) + assert {:ok, ^expected_notif_topic} = Streamer.get_topic("user:notification", user) + assert {:ok, ^expected_direct_topic} = Streamer.get_topic("direct", user) + end + + test "allows hashtag streams", %{user: user} do + assert {:ok, "hashtag:cofe"} = Streamer.get_topic("hashtag", user, %{"tag" => "cofe"}) + end + + test "disallows registering to an user stream", %{user: user} do + another_user = insert(:user) + assert {:error, _} = Streamer.get_topic("user:#{another_user.id}", user) + assert {:error, _} = Streamer.get_topic("user:notification:#{another_user.id}", user) + assert {:error, _} = Streamer.get_topic("direct:#{another_user.id}", user) + end + + test "allows list stream that are owned by the user", %{user: user} do + {:ok, list} = List.create("Test", user) + assert {:error, _} = Streamer.get_topic("list:#{list.id}", user) + assert {:ok, _} = Streamer.get_topic("list", user, %{"list" => list.id}) + end + + test "disallows list stream that are not owned by the user", %{user: user} do + another_user = insert(:user) + {:ok, list} = List.create("Test", another_user) + assert {:error, _} = Streamer.get_topic("list:#{list.id}", user) + assert {:error, _} = Streamer.get_topic("list", user, %{"list" => list.id}) + end + end + describe "user streams" do setup do user = insert(:user) @@ -35,7 +105,7 @@ defmodule Pleroma.Web.StreamerTest do assert_receive {:text, _}, @streamer_timeout end) - Streamer.add_socket( + Streamer.get_topic_and_add_socket( "user", %{transport_pid: task.pid, assigns: %{user: user}} ) @@ -50,7 +120,7 @@ defmodule Pleroma.Web.StreamerTest do assert_receive {:text, _}, @streamer_timeout end) - Streamer.add_socket( + Streamer.get_topic_and_add_socket( "user:notification", %{transport_pid: task.pid, assigns: %{user: user}} ) @@ -70,7 +140,7 @@ defmodule Pleroma.Web.StreamerTest do task = Task.async(fn -> refute_receive {:text, _}, @streamer_timeout end) - Streamer.add_socket( + Streamer.get_topic_and_add_socket( "user:notification", %{transport_pid: task.pid, assigns: %{user: user}} ) @@ -90,7 +160,7 @@ defmodule Pleroma.Web.StreamerTest do task = Task.async(fn -> refute_receive {:text, _}, @streamer_timeout end) - Streamer.add_socket( + Streamer.get_topic_and_add_socket( "user:notification", %{transport_pid: task.pid, assigns: %{user: user}} ) @@ -110,7 +180,7 @@ defmodule Pleroma.Web.StreamerTest do task = Task.async(fn -> refute_receive {:text, _}, @streamer_timeout end) - Streamer.add_socket( + Streamer.get_topic_and_add_socket( "user:notification", %{transport_pid: task.pid, assigns: %{user: user}} ) @@ -127,7 +197,7 @@ defmodule Pleroma.Web.StreamerTest do Process.sleep(@streamer_start_wait) - Streamer.add_socket( + Streamer.get_topic_and_add_socket( "user:notification", %{transport_pid: task.pid, assigns: %{user: user}} ) @@ -415,14 +485,10 @@ defmodule Pleroma.Web.StreamerTest do assert_receive {:text, _}, 1_000 end) - fake_socket = %StreamerSocket{ - transport_pid: task.pid, - user: user_a - } - - Streamer.add_socket( - "list:#{list.id}", - fake_socket + Streamer.get_topic_and_add_socket( + "list", + %{transport_pid: task.pid, assigns: %{user: user_a}}, + %{"list" => list.id} ) Worker.handle_call({:stream, "list", activity}, self(), %{}) @@ -497,7 +563,7 @@ defmodule Pleroma.Web.StreamerTest do task = Task.async(fn -> refute_receive {:text, _}, @streamer_timeout end) - Streamer.add_socket( + Streamer.get_topic_and_add_socket( "user", %{transport_pid: task.pid, assigns: %{user: user2}} ) @@ -527,7 +593,7 @@ defmodule Pleroma.Web.StreamerTest do assert last_status["pleroma"]["direct_conversation_id"] == participation.id end) - Streamer.add_socket( + Streamer.get_topic_and_add_socket( "direct", %{transport_pid: task.pid, assigns: %{user: user}} ) @@ -561,7 +627,7 @@ defmodule Pleroma.Web.StreamerTest do Process.sleep(@streamer_start_wait) - Streamer.add_socket( + Streamer.get_topic_and_add_socket( "direct", %{transport_pid: task.pid, assigns: %{user: user}} ) @@ -604,7 +670,7 @@ defmodule Pleroma.Web.StreamerTest do Process.sleep(@streamer_start_wait) - Streamer.add_socket( + Streamer.get_topic_and_add_socket( "direct", %{transport_pid: task.pid, assigns: %{user: user}} ) |