Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
4.0KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.InstancesTest do
  5. alias Pleroma.Instances
  6. use Pleroma.DataCase
  7. clear_config_all([:instance, :federation_reachability_timeout_days]) do
  8. Pleroma.Config.put([:instance, :federation_reachability_timeout_days], 1)
  9. end
  10. describe "reachable?/1" do
  11. test "returns `true` for host / url with unknown reachability status" do
  12. assert Instances.reachable?("unknown.site")
  13. assert Instances.reachable?("http://unknown.site")
  14. end
  15. test "returns `false` for host / url marked unreachable for at least `reachability_datetime_threshold()`" do
  16. host = "consistently-unreachable.name"
  17. Instances.set_consistently_unreachable(host)
  18. refute Instances.reachable?(host)
  19. refute Instances.reachable?("http://#{host}/path")
  20. end
  21. test "returns `true` for host / url marked unreachable for less than `reachability_datetime_threshold()`" do
  22. url = "http://eventually-unreachable.name/path"
  23. Instances.set_unreachable(url)
  24. assert Instances.reachable?(url)
  25. assert Instances.reachable?(URI.parse(url).host)
  26. end
  27. test "returns true on non-binary input" do
  28. assert Instances.reachable?(nil)
  29. assert Instances.reachable?(1)
  30. end
  31. end
  32. describe "filter_reachable/1" do
  33. setup do
  34. host = "consistently-unreachable.name"
  35. url1 = "http://eventually-unreachable.com/path"
  36. url2 = "http://domain.com/path"
  37. Instances.set_consistently_unreachable(host)
  38. Instances.set_unreachable(url1)
  39. result = Instances.filter_reachable([host, url1, url2, nil])
  40. %{result: result, url1: url1, url2: url2}
  41. end
  42. test "returns a map with keys containing 'not marked consistently unreachable' elements of supplied list",
  43. %{result: result, url1: url1, url2: url2} do
  44. assert is_map(result)
  45. assert Enum.sort([url1, url2]) == result |> Map.keys() |> Enum.sort()
  46. end
  47. test "returns a map with `unreachable_since` values for keys",
  48. %{result: result, url1: url1, url2: url2} do
  49. assert is_map(result)
  50. assert %NaiveDateTime{} = result[url1]
  51. assert is_nil(result[url2])
  52. end
  53. test "returns an empty map for empty list or list containing no hosts / url" do
  54. assert %{} == Instances.filter_reachable([])
  55. assert %{} == Instances.filter_reachable([nil])
  56. end
  57. end
  58. describe "set_reachable/1" do
  59. test "sets unreachable url or host reachable" do
  60. host = "domain.com"
  61. Instances.set_consistently_unreachable(host)
  62. refute Instances.reachable?(host)
  63. Instances.set_reachable(host)
  64. assert Instances.reachable?(host)
  65. end
  66. test "keeps reachable url or host reachable" do
  67. url = "https://site.name?q="
  68. assert Instances.reachable?(url)
  69. Instances.set_reachable(url)
  70. assert Instances.reachable?(url)
  71. end
  72. test "returns error status on non-binary input" do
  73. assert {:error, _} = Instances.set_reachable(nil)
  74. assert {:error, _} = Instances.set_reachable(1)
  75. end
  76. end
  77. # Note: implementation-specific (e.g. Instance) details of set_unreachable/1
  78. # should be tested in implementation-specific tests
  79. describe "set_unreachable/1" do
  80. test "returns error status on non-binary input" do
  81. assert {:error, _} = Instances.set_unreachable(nil)
  82. assert {:error, _} = Instances.set_unreachable(1)
  83. end
  84. end
  85. describe "set_consistently_unreachable/1" do
  86. test "sets reachable url or host unreachable" do
  87. url = "http://domain.com?q="
  88. assert Instances.reachable?(url)
  89. Instances.set_consistently_unreachable(url)
  90. refute Instances.reachable?(url)
  91. end
  92. test "keeps unreachable url or host unreachable" do
  93. host = "site.name"
  94. Instances.set_consistently_unreachable(host)
  95. refute Instances.reachable?(host)
  96. Instances.set_consistently_unreachable(host)
  97. refute Instances.reachable?(host)
  98. end
  99. end
  100. end