diff options
| author | Maksim <parallel588@gmail.com> | 2019-07-14 21:01:32 +0000 | 
|---|---|---|
| committer | kaniini <ariadne@dereferenced.org> | 2019-07-14 21:01:32 +0000 | 
| commit | fa17879c204980c6fb0025b2e51a978669c441da (patch) | |
| tree | 25e150b785b57bc285dd5b02b0cc6c87b3711d5e /test | |
| parent | 4b78622bbaf743d540022b8aeec41405ca0cad8f (diff) | |
| download | pleroma-fa17879c204980c6fb0025b2e51a978669c441da.tar.gz pleroma-fa17879c204980c6fb0025b2e51a978669c441da.zip  | |
added tests for Web.MediaProxy
Diffstat (limited to 'test')
| -rw-r--r-- | test/web/media_proxy/media_proxy_controller_test.exs | 73 | ||||
| -rw-r--r-- | test/web/media_proxy/media_proxy_test.exs (renamed from test/media_proxy_test.exs) | 14 | 
2 files changed, 83 insertions, 4 deletions
diff --git a/test/web/media_proxy/media_proxy_controller_test.exs b/test/web/media_proxy/media_proxy_controller_test.exs new file mode 100644 index 000000000..53b8f556b --- /dev/null +++ b/test/web/media_proxy/media_proxy_controller_test.exs @@ -0,0 +1,73 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do +  use Pleroma.Web.ConnCase +  import Mock +  alias Pleroma.Config + +  setup do +    media_proxy_config = Config.get([:media_proxy]) || [] +    on_exit(fn -> Config.put([:media_proxy], media_proxy_config) end) +    :ok +  end + +  test "it returns 404 when MediaProxy disabled", %{conn: conn} do +    Config.put([:media_proxy, :enabled], false) + +    assert %Plug.Conn{ +             status: 404, +             resp_body: "Not Found" +           } = get(conn, "/proxy/hhgfh/eeeee") + +    assert %Plug.Conn{ +             status: 404, +             resp_body: "Not Found" +           } = get(conn, "/proxy/hhgfh/eeee/fff") +  end + +  test "it returns 403 when signature invalidated", %{conn: conn} do +    Config.put([:media_proxy, :enabled], true) +    Config.put([Pleroma.Web.Endpoint, :secret_key_base], "00000000000") +    path = URI.parse(Pleroma.Web.MediaProxy.encode_url("https://google.fn")).path +    Config.put([Pleroma.Web.Endpoint, :secret_key_base], "000") + +    assert %Plug.Conn{ +             status: 403, +             resp_body: "Forbidden" +           } = get(conn, path) + +    assert %Plug.Conn{ +             status: 403, +             resp_body: "Forbidden" +           } = get(conn, "/proxy/hhgfh/eeee") + +    assert %Plug.Conn{ +             status: 403, +             resp_body: "Forbidden" +           } = get(conn, "/proxy/hhgfh/eeee/fff") +  end + +  test "redirects on valid url when filename invalidated", %{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") +    invalid_url = String.replace(url, "test.png", "test-file.png") +    response = get(conn, invalid_url) +    html = "<html><body>You are being <a href=\"#{url}\">redirected</a>.</body></html>" +    assert response.status == 302 +    assert response.resp_body == html +  end + +  test "it performs ReverseProxy.call when signature valid", %{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") + +    with_mock Pleroma.ReverseProxy, +      call: fn _conn, _url, _opts -> %Plug.Conn{status: :success} end do +      assert %Plug.Conn{status: :success} = get(conn, url) +    end +  end +end diff --git a/test/media_proxy_test.exs b/test/web/media_proxy/media_proxy_test.exs index fbf200931..cb4807e0b 100644 --- a/test/media_proxy_test.exs +++ b/test/web/media_proxy/media_proxy_test.exs @@ -2,7 +2,7 @@  # Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>  # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.MediaProxyTest do +defmodule Pleroma.Web.MediaProxyTest do    use ExUnit.Case    import Pleroma.Web.MediaProxy    alias Pleroma.Web.MediaProxy.MediaProxyController @@ -90,22 +90,28 @@ defmodule Pleroma.MediaProxyTest do      test "filename_matches preserves the encoded or decoded path" do        assert MediaProxyController.filename_matches( -               true, +               %{"filename" => "/Hello world.jpg"},                 "/Hello world.jpg",                 "http://pleroma.social/Hello world.jpg"               ) == :ok        assert MediaProxyController.filename_matches( -               true, +               %{"filename" => "/Hello%20world.jpg"},                 "/Hello%20world.jpg",                 "http://pleroma.social/Hello%20world.jpg"               ) == :ok        assert MediaProxyController.filename_matches( -               true, +               %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg"},                 "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg",                 "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg"               ) == :ok + +      assert MediaProxyController.filename_matches( +               %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jp"}, +               "/my%2Flong%2Furl%2F2019%2F07%2FS.jp", +               "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" +             ) == {:wrong_filename, "my%2Flong%2Furl%2F2019%2F07%2FS.jpg"}      end      test "uses the configured base_url" do  | 
