[#534] Federation reachability filtering tests.
This commit is contained in:
parent
060d280e64
commit
d99650270b
5 changed files with 243 additions and 64 deletions
|
|
@ -3,8 +3,8 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
defmodule Pleroma.Web.FederatorTest do
|
||||
alias Pleroma.Web.Federator
|
||||
alias Pleroma.Web.CommonAPI
|
||||
alias Pleroma.Web.{CommonAPI, Federator}
|
||||
alias Pleroma.Instances
|
||||
use Pleroma.DataCase
|
||||
import Pleroma.Factory
|
||||
import Mock
|
||||
|
|
@ -71,6 +71,103 @@ defmodule Pleroma.Web.FederatorTest do
|
|||
end
|
||||
end
|
||||
|
||||
describe "Targets reachability filtering in `publish`" do
|
||||
test_with_mock "it federates only to reachable instances via AP",
|
||||
Federator,
|
||||
[:passthrough],
|
||||
[] do
|
||||
user = insert(:user)
|
||||
|
||||
{inbox1, inbox2} =
|
||||
{"https://domain.com/users/nick1/inbox", "https://domain2.com/users/nick2/inbox"}
|
||||
|
||||
insert(:user, %{
|
||||
local: false,
|
||||
nickname: "nick1@domain.com",
|
||||
ap_id: "https://domain.com/users/nick1",
|
||||
info: %{ap_enabled: true, source_data: %{"inbox" => inbox1}}
|
||||
})
|
||||
|
||||
insert(:user, %{
|
||||
local: false,
|
||||
nickname: "nick2@domain2.com",
|
||||
ap_id: "https://domain2.com/users/nick2",
|
||||
info: %{ap_enabled: true, source_data: %{"inbox" => inbox2}}
|
||||
})
|
||||
|
||||
Instances.set_unreachable(
|
||||
URI.parse(inbox2).host,
|
||||
Instances.reachability_datetime_threshold()
|
||||
)
|
||||
|
||||
{:ok, _activity} =
|
||||
CommonAPI.post(user, %{"status" => "HI @nick1@domain.com, @nick2@domain2.com!"})
|
||||
|
||||
assert called(Federator.enqueue(:publish_single_ap, %{inbox: inbox1}))
|
||||
refute called(Federator.enqueue(:publish_single_ap, %{inbox: inbox2}))
|
||||
end
|
||||
|
||||
test_with_mock "it federates only to reachable instances via Websub",
|
||||
Federator,
|
||||
[:passthrough],
|
||||
[] do
|
||||
user = insert(:user)
|
||||
websub_topic = Pleroma.Web.OStatus.feed_path(user)
|
||||
|
||||
sub1 =
|
||||
insert(:websub_subscription, %{
|
||||
topic: websub_topic,
|
||||
state: "active",
|
||||
callback: "http://pleroma.soykaf.com/cb"
|
||||
})
|
||||
|
||||
sub2 =
|
||||
insert(:websub_subscription, %{
|
||||
topic: websub_topic,
|
||||
state: "active",
|
||||
callback: "https://pleroma2.soykaf.com/cb"
|
||||
})
|
||||
|
||||
Instances.set_unreachable(sub1.callback, Instances.reachability_datetime_threshold())
|
||||
|
||||
{:ok, _activity} = CommonAPI.post(user, %{"status" => "HI"})
|
||||
|
||||
assert called(Federator.enqueue(:publish_single_websub, %{callback: sub2.callback}))
|
||||
refute called(Federator.enqueue(:publish_single_websub, %{callback: sub1.callback}))
|
||||
end
|
||||
|
||||
test_with_mock "it federates only to reachable instances via Salmon",
|
||||
Federator,
|
||||
[:passthrough],
|
||||
[] do
|
||||
user = insert(:user)
|
||||
|
||||
remote_user1 =
|
||||
insert(:user, %{
|
||||
local: false,
|
||||
nickname: "nick1@domain.com",
|
||||
ap_id: "https://domain.com/users/nick1",
|
||||
info: %{salmon: "https://domain.com/salmon"}
|
||||
})
|
||||
|
||||
remote_user2 =
|
||||
insert(:user, %{
|
||||
local: false,
|
||||
nickname: "nick2@domain2.com",
|
||||
ap_id: "https://domain2.com/users/nick2",
|
||||
info: %{salmon: "https://domain2.com/salmon"}
|
||||
})
|
||||
|
||||
Instances.set_unreachable("domain.com", Instances.reachability_datetime_threshold())
|
||||
|
||||
{:ok, _activity} =
|
||||
CommonAPI.post(user, %{"status" => "HI @nick1@domain.com, @nick2@domain2.com!"})
|
||||
|
||||
assert called(Federator.enqueue(:publish_single_salmon, {remote_user2, :_, :_}))
|
||||
refute called(Federator.enqueue(:publish_single_websub, {remote_user1, :_, :_}))
|
||||
end
|
||||
end
|
||||
|
||||
describe "Receive an activity" do
|
||||
test "successfully processes incoming AP docs with correct origin" do
|
||||
params = %{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue