diff options
| author | Egor Kislitsyn <egor@kislitsyn.com> | 2019-02-04 20:50:28 +0700 | 
|---|---|---|
| committer | Egor Kislitsyn <egor@kislitsyn.com> | 2019-02-04 20:50:28 +0700 | 
| commit | 3a3a3996b7a37d281745586fa40bbabd5299a1ce (patch) | |
| tree | 843d5295c820fef6d5112677dd1145b3757ad2ac /test/web/instances | |
| parent | 58e250d9d27205116df5634d909ec1e43ea55286 (diff) | |
| parent | 89762ad23034668f7440c9fb238dcf270e8c2e59 (diff) | |
| download | pleroma-3a3a3996b7a37d281745586fa40bbabd5299a1ce.tar.gz pleroma-3a3a3996b7a37d281745586fa40bbabd5299a1ce.zip | |
Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into feature/jobs
# Conflicts:
#	lib/pleroma/web/activity_pub/activity_pub.ex
#	lib/pleroma/web/federator/federator.ex
Diffstat (limited to 'test/web/instances')
| -rw-r--r-- | test/web/instances/instance_test.exs | 107 | ||||
| -rw-r--r-- | test/web/instances/instances_test.exs | 131 | 
2 files changed, 238 insertions, 0 deletions
| diff --git a/test/web/instances/instance_test.exs b/test/web/instances/instance_test.exs new file mode 100644 index 000000000..a158c0a42 --- /dev/null +++ b/test/web/instances/instance_test.exs @@ -0,0 +1,107 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Instances.InstanceTest do +  alias Pleroma.Repo +  alias Pleroma.Instances.Instance + +  use Pleroma.DataCase + +  import Pleroma.Factory + +  setup_all do +    config_path = [:instance, :federation_reachability_timeout_days] +    initial_setting = Pleroma.Config.get(config_path) + +    Pleroma.Config.put(config_path, 1) +    on_exit(fn -> Pleroma.Config.put(config_path, initial_setting) end) + +    :ok +  end + +  describe "set_reachable/1" do +    test "clears `unreachable_since` of existing matching Instance record having non-nil `unreachable_since`" do +      instance = insert(:instance, unreachable_since: NaiveDateTime.utc_now()) + +      assert {:ok, instance} = Instance.set_reachable(instance.host) +      refute instance.unreachable_since +    end + +    test "keeps nil `unreachable_since` of existing matching Instance record having nil `unreachable_since`" do +      instance = insert(:instance, unreachable_since: nil) + +      assert {:ok, instance} = Instance.set_reachable(instance.host) +      refute instance.unreachable_since +    end + +    test "does NOT create an Instance record in case of no existing matching record" do +      host = "domain.org" +      assert nil == Instance.set_reachable(host) + +      assert [] = Repo.all(Ecto.Query.from(i in Instance)) +      assert Instance.reachable?(host) +    end +  end + +  describe "set_unreachable/1" do +    test "creates new record having `unreachable_since` to current time if record does not exist" do +      assert {:ok, instance} = Instance.set_unreachable("https://domain.com/path") + +      instance = Repo.get(Instance, instance.id) +      assert instance.unreachable_since +      assert "domain.com" == instance.host +    end + +    test "sets `unreachable_since` of existing record having nil `unreachable_since`" do +      instance = insert(:instance, unreachable_since: nil) +      refute instance.unreachable_since + +      assert {:ok, _} = Instance.set_unreachable(instance.host) + +      instance = Repo.get(Instance, instance.id) +      assert instance.unreachable_since +    end + +    test "does NOT modify `unreachable_since` value of existing record in case it's present" do +      instance = +        insert(:instance, unreachable_since: NaiveDateTime.add(NaiveDateTime.utc_now(), -10)) + +      assert instance.unreachable_since +      initial_value = instance.unreachable_since + +      assert {:ok, _} = Instance.set_unreachable(instance.host) + +      instance = Repo.get(Instance, instance.id) +      assert initial_value == instance.unreachable_since +    end +  end + +  describe "set_unreachable/2" do +    test "sets `unreachable_since` value of existing record in case it's newer than supplied value" do +      instance = +        insert(:instance, unreachable_since: NaiveDateTime.add(NaiveDateTime.utc_now(), -10)) + +      assert instance.unreachable_since + +      past_value = NaiveDateTime.add(NaiveDateTime.utc_now(), -100) +      assert {:ok, _} = Instance.set_unreachable(instance.host, past_value) + +      instance = Repo.get(Instance, instance.id) +      assert past_value == instance.unreachable_since +    end + +    test "does NOT modify `unreachable_since` value of existing record in case it's equal to or older than supplied value" do +      instance = +        insert(:instance, unreachable_since: NaiveDateTime.add(NaiveDateTime.utc_now(), -10)) + +      assert instance.unreachable_since +      initial_value = instance.unreachable_since + +      assert {:ok, _} = Instance.set_unreachable(instance.host, NaiveDateTime.utc_now()) + +      instance = Repo.get(Instance, instance.id) +      assert initial_value == instance.unreachable_since +    end +  end +end diff --git a/test/web/instances/instances_test.exs b/test/web/instances/instances_test.exs new file mode 100644 index 000000000..2530c09fe --- /dev/null +++ b/test/web/instances/instances_test.exs @@ -0,0 +1,131 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.InstancesTest do +  alias Pleroma.Instances + +  use Pleroma.DataCase + +  setup_all do +    config_path = [:instance, :federation_reachability_timeout_days] +    initial_setting = Pleroma.Config.get(config_path) + +    Pleroma.Config.put(config_path, 1) +    on_exit(fn -> Pleroma.Config.put(config_path, initial_setting) end) + +    :ok +  end + +  describe "reachable?/1" do +    test "returns `true` for host / url with unknown reachability status" do +      assert Instances.reachable?("unknown.site") +      assert Instances.reachable?("http://unknown.site") +    end + +    test "returns `false` for host / url marked unreachable for at least `reachability_datetime_threshold()`" do +      host = "consistently-unreachable.name" +      Instances.set_consistently_unreachable(host) + +      refute Instances.reachable?(host) +      refute Instances.reachable?("http://#{host}/path") +    end + +    test "returns `true` for host / url marked unreachable for less than `reachability_datetime_threshold()`" do +      url = "http://eventually-unreachable.name/path" + +      Instances.set_unreachable(url) + +      assert Instances.reachable?(url) +      assert Instances.reachable?(URI.parse(url).host) +    end + +    test "returns true on non-binary input" do +      assert Instances.reachable?(nil) +      assert Instances.reachable?(1) +    end +  end + +  describe "filter_reachable/1" do +    setup do +      host = "consistently-unreachable.name" +      url1 = "http://eventually-unreachable.com/path" +      url2 = "http://domain.com/path" + +      Instances.set_consistently_unreachable(host) +      Instances.set_unreachable(url1) + +      result = Instances.filter_reachable([host, url1, url2, nil]) +      %{result: result, url1: url1, url2: url2} +    end + +    test "returns a map with keys containing 'not marked consistently unreachable' elements of supplied list", +         %{result: result, url1: url1, url2: url2} do +      assert is_map(result) +      assert Enum.sort([url1, url2]) == result |> Map.keys() |> Enum.sort() +    end + +    test "returns a map with `unreachable_since` values for keys", +         %{result: result, url1: url1, url2: url2} do +      assert is_map(result) +      assert %NaiveDateTime{} = result[url1] +      assert is_nil(result[url2]) +    end + +    test "returns an empty map for empty list or list containing no hosts / url" do +      assert %{} == Instances.filter_reachable([]) +      assert %{} == Instances.filter_reachable([nil]) +    end +  end + +  describe "set_reachable/1" do +    test "sets unreachable url or host reachable" do +      host = "domain.com" +      Instances.set_consistently_unreachable(host) +      refute Instances.reachable?(host) + +      Instances.set_reachable(host) +      assert Instances.reachable?(host) +    end + +    test "keeps reachable url or host reachable" do +      url = "https://site.name?q=" +      assert Instances.reachable?(url) + +      Instances.set_reachable(url) +      assert Instances.reachable?(url) +    end + +    test "returns error status on non-binary input" do +      assert {:error, _} = Instances.set_reachable(nil) +      assert {:error, _} = Instances.set_reachable(1) +    end +  end + +  # Note: implementation-specific (e.g. Instance) details of set_unreachable/1 should be tested in implementation-specific tests +  describe "set_unreachable/1" do +    test "returns error status on non-binary input" do +      assert {:error, _} = Instances.set_unreachable(nil) +      assert {:error, _} = Instances.set_unreachable(1) +    end +  end + +  describe "set_consistently_unreachable/1" do +    test "sets reachable url or host unreachable" do +      url = "http://domain.com?q=" +      assert Instances.reachable?(url) + +      Instances.set_consistently_unreachable(url) +      refute Instances.reachable?(url) +    end + +    test "keeps unreachable url or host unreachable" do +      host = "site.name" +      Instances.set_consistently_unreachable(host) +      refute Instances.reachable?(host) + +      Instances.set_consistently_unreachable(host) +      refute Instances.reachable?(host) +    end +  end +end | 
