diff options
Diffstat (limited to 'test/web/media_proxy')
| -rw-r--r-- | test/web/media_proxy/invalidation_test.exs | 64 | ||||
| -rw-r--r-- | test/web/media_proxy/invalidations/http_test.exs | 39 | ||||
| -rw-r--r-- | test/web/media_proxy/invalidations/script_test.exs | 26 | ||||
| -rw-r--r-- | test/web/media_proxy/media_proxy_controller_test.exs | 16 | ||||
| -rw-r--r-- | test/web/media_proxy/media_proxy_test.exs | 14 | 
5 files changed, 148 insertions, 11 deletions
diff --git a/test/web/media_proxy/invalidation_test.exs b/test/web/media_proxy/invalidation_test.exs new file mode 100644 index 000000000..926ae74ca --- /dev/null +++ b/test/web/media_proxy/invalidation_test.exs @@ -0,0 +1,64 @@ +defmodule Pleroma.Web.MediaProxy.InvalidationTest do +  use ExUnit.Case +  use Pleroma.Tests.Helpers + +  alias Pleroma.Config +  alias Pleroma.Web.MediaProxy.Invalidation + +  import ExUnit.CaptureLog +  import Mock +  import Tesla.Mock + +  setup do: clear_config([:media_proxy]) + +  setup do +    on_exit(fn -> Cachex.clear(:banned_urls_cache) end) +  end + +  describe "Invalidation.Http" do +    test "perform request to clear cache" do +      Config.put([:media_proxy, :enabled], false) +      Config.put([:media_proxy, :invalidation, :enabled], true) +      Config.put([:media_proxy, :invalidation, :provider], Invalidation.Http) + +      Config.put([Invalidation.Http], method: :purge, headers: [{"x-refresh", 1}]) +      image_url = "http://example.com/media/example.jpg" +      Pleroma.Web.MediaProxy.put_in_banned_urls(image_url) + +      mock(fn +        %{ +          method: :purge, +          url: "http://example.com/media/example.jpg", +          headers: [{"x-refresh", 1}] +        } -> +          %Tesla.Env{status: 200} +      end) + +      assert capture_log(fn -> +               assert Pleroma.Web.MediaProxy.in_banned_urls(image_url) +               assert Invalidation.purge([image_url]) == {:ok, [image_url]} +               assert Pleroma.Web.MediaProxy.in_banned_urls(image_url) +             end) =~ "Running cache purge: [\"#{image_url}\"]" +    end +  end + +  describe "Invalidation.Script" do +    test "run script to clear cache" do +      Config.put([:media_proxy, :enabled], false) +      Config.put([:media_proxy, :invalidation, :enabled], true) +      Config.put([:media_proxy, :invalidation, :provider], Invalidation.Script) +      Config.put([Invalidation.Script], script_path: "purge-nginx") + +      image_url = "http://example.com/media/example.jpg" +      Pleroma.Web.MediaProxy.put_in_banned_urls(image_url) + +      with_mocks [{System, [], [cmd: fn _, _ -> {"ok", 0} end]}] do +        assert capture_log(fn -> +                 assert Pleroma.Web.MediaProxy.in_banned_urls(image_url) +                 assert Invalidation.purge([image_url]) == {:ok, [image_url]} +                 assert Pleroma.Web.MediaProxy.in_banned_urls(image_url) +               end) =~ "Running cache purge: [\"#{image_url}\"]" +      end +    end +  end +end diff --git a/test/web/media_proxy/invalidations/http_test.exs b/test/web/media_proxy/invalidations/http_test.exs new file mode 100644 index 000000000..a1bef5237 --- /dev/null +++ b/test/web/media_proxy/invalidations/http_test.exs @@ -0,0 +1,39 @@ +defmodule Pleroma.Web.MediaProxy.Invalidation.HttpTest do +  use ExUnit.Case +  alias Pleroma.Web.MediaProxy.Invalidation + +  import ExUnit.CaptureLog +  import Tesla.Mock + +  setup do +    on_exit(fn -> Cachex.clear(:banned_urls_cache) end) +  end + +  test "logs hasn't error message when request is valid" do +    mock(fn +      %{method: :purge, url: "http://example.com/media/example.jpg"} -> +        %Tesla.Env{status: 200} +    end) + +    refute capture_log(fn -> +             assert Invalidation.Http.purge( +                      ["http://example.com/media/example.jpg"], +                      [] +                    ) == {:ok, ["http://example.com/media/example.jpg"]} +           end) =~ "Error while cache purge" +  end + +  test "it write error message in logs when request invalid" do +    mock(fn +      %{method: :purge, url: "http://example.com/media/example1.jpg"} -> +        %Tesla.Env{status: 404} +    end) + +    assert capture_log(fn -> +             assert Invalidation.Http.purge( +                      ["http://example.com/media/example1.jpg"], +                      [] +                    ) == {:ok, ["http://example.com/media/example1.jpg"]} +           end) =~ "Error while cache purge: url - http://example.com/media/example1.jpg" +  end +end diff --git a/test/web/media_proxy/invalidations/script_test.exs b/test/web/media_proxy/invalidations/script_test.exs new file mode 100644 index 000000000..51833ab18 --- /dev/null +++ b/test/web/media_proxy/invalidations/script_test.exs @@ -0,0 +1,26 @@ +defmodule Pleroma.Web.MediaProxy.Invalidation.ScriptTest do +  use ExUnit.Case +  alias Pleroma.Web.MediaProxy.Invalidation + +  import ExUnit.CaptureLog + +  setup do +    on_exit(fn -> Cachex.clear(:banned_urls_cache) end) +  end + +  test "it logger error when script not found" do +    assert capture_log(fn -> +             assert Invalidation.Script.purge( +                      ["http://example.com/media/example.jpg"], +                      script_path: "./example" +                    ) == {:error, "%ErlangError{original: :enoent}"} +           end) =~ "Error while cache purge: %ErlangError{original: :enoent}" + +    capture_log(fn -> +      assert Invalidation.Script.purge( +               ["http://example.com/media/example.jpg"], +               [] +             ) == {:error, "\"not found script path\""} +    end) +  end +end diff --git a/test/web/media_proxy/media_proxy_controller_test.exs b/test/web/media_proxy/media_proxy_controller_test.exs index da79d38a5..d61cef83b 100644 --- a/test/web/media_proxy/media_proxy_controller_test.exs +++ b/test/web/media_proxy/media_proxy_controller_test.exs @@ -10,6 +10,10 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do    setup do: clear_config(:media_proxy)    setup do: clear_config([Pleroma.Web.Endpoint, :secret_key_base]) +  setup do +    on_exit(fn -> Cachex.clear(:banned_urls_cache) end) +  end +    test "it returns 404 when MediaProxy disabled", %{conn: conn} do      Config.put([:media_proxy, :enabled], false) @@ -66,4 +70,16 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do        assert %Plug.Conn{status: :success} = get(conn, url)      end    end + +  test "it returns 404 when url contains in banned_urls cache", %{conn: conn} do +    Config.put([:media_proxy, :enabled], true) +    Config.put([Pleroma.Web.Endpoint, :secret_key_base], "00000000000") +    url = Pleroma.Web.MediaProxy.encode_url("https://google.fn/test.png") +    Pleroma.Web.MediaProxy.put_in_banned_urls("https://google.fn/test.png") + +    with_mock Pleroma.ReverseProxy, +      call: fn _conn, _url, _opts -> %Plug.Conn{status: :success} end do +      assert %Plug.Conn{status: 404, resp_body: "Not Found"} = get(conn, url) +    end +  end  end diff --git a/test/web/media_proxy/media_proxy_test.exs b/test/web/media_proxy/media_proxy_test.exs index 69c2d5dae..69d2a71a6 100644 --- a/test/web/media_proxy/media_proxy_test.exs +++ b/test/web/media_proxy/media_proxy_test.exs @@ -124,15 +124,7 @@ defmodule Pleroma.Web.MediaProxyTest do      end      test "uses the configured base_url" do -      base_url = Pleroma.Config.get([:media_proxy, :base_url]) - -      if base_url do -        on_exit(fn -> -          Pleroma.Config.put([:media_proxy, :base_url], base_url) -        end) -      end - -      Pleroma.Config.put([:media_proxy, :base_url], "https://cache.pleroma.social") +      clear_config([:media_proxy, :base_url], "https://cache.pleroma.social")        url = "https://pleroma.soykaf.com/static/logo.png"        encoded = url(url) @@ -213,8 +205,8 @@ defmodule Pleroma.Web.MediaProxyTest do      end      test "does not change whitelisted urls" do -      Pleroma.Config.put([:media_proxy, :whitelist], ["mycdn.akamai.com"]) -      Pleroma.Config.put([:media_proxy, :base_url], "https://cache.pleroma.social") +      clear_config([:media_proxy, :whitelist], ["mycdn.akamai.com"]) +      clear_config([:media_proxy, :base_url], "https://cache.pleroma.social")        media_url = "https://mycdn.akamai.com"  | 
