diff options
| author | rinpatch <rinpatch@sdf.org> | 2020-09-14 14:45:58 +0300 | 
|---|---|---|
| committer | rinpatch <rinpatch@sdf.org> | 2020-09-14 14:45:58 +0300 | 
| commit | f70335002df9b2b3f47f0ccaed6aaeebfb14435f (patch) | |
| tree | 16c15bdcdf5c5260e58fae9947075aca7d80687a /test | |
| parent | f66a15c4a51e1c8f614b4c1609b2385a29762931 (diff) | |
| download | pleroma-f70335002df9b2b3f47f0ccaed6aaeebfb14435f.tar.gz pleroma-f70335002df9b2b3f47f0ccaed6aaeebfb14435f.zip | |
RichMedia: Do a HEAD request to check content type/length
This shouldn't be too expensive, since the connections are pooled,
but it should save us some bandwidth since we won't fetch non-html
files and files that are too large for us to process (especially
since you can't cancel a request without closing the connection
with HTTP1).
Diffstat (limited to 'test')
| -rw-r--r-- | test/support/http_request_mock.ex | 17 | ||||
| -rw-r--r-- | test/web/rich_media/parser_test.exs | 29 | 
2 files changed, 46 insertions, 0 deletions
| diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index 344e27f13..cb022333f 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -1262,4 +1262,21 @@ defmodule HttpRequestMock do         inspect(headers)       }"}    end + +  # Most of the rich media mocks are missing HEAD requests, so we just return 404. +  @rich_media_mocks [ +    "https://example.com/ogp", +    "https://example.com/ogp-missing-data", +    "https://example.com/twitter-card" +  ] +  def head(url, _query, _body, _headers) when url in @rich_media_mocks do +    {:ok, %Tesla.Env{status: 404, body: ""}} +  end + +  def head(url, query, body, headers) do +    {:error, +     "Mock response not implemented for HEAD #{inspect(url)}, #{query}, #{inspect(body)}, #{ +       inspect(headers) +     }"} +  end  end diff --git a/test/web/rich_media/parser_test.exs b/test/web/rich_media/parser_test.exs index 21ae35f8b..d65a63121 100644 --- a/test/web/rich_media/parser_test.exs +++ b/test/web/rich_media/parser_test.exs @@ -56,6 +56,27 @@ defmodule Pleroma.Web.RichMedia.ParserTest do        %{method: :get, url: "http://example.com/error"} ->          {:error, :overload} + +      %{ +        method: :head, +        url: "http://example.com/huge-page" +      } -> +        %Tesla.Env{ +          status: 200, +          headers: [{"content-length", "2000001"}, {"content-type", "text/html"}] +        } + +      %{ +        method: :head, +        url: "http://example.com/pdf-file" +      } -> +        %Tesla.Env{ +          status: 200, +          headers: [{"content-length", "1000000"}, {"content-type", "application/pdf"}] +        } + +      %{method: :head} -> +        %Tesla.Env{status: 404, body: "", headers: []}      end)      :ok @@ -144,4 +165,12 @@ defmodule Pleroma.Web.RichMedia.ParserTest do    test "returns error if getting page was not successful" do      assert {:error, :overload} = Parser.parse("http://example.com/error")    end + +  test "does a HEAD request to check if the body is too large" do +    assert {:error, body_too_large} = Parser.parse("http://example.com/huge-page") +  end + +  test "does a HEAD request to check if the body is html" do +    assert {:error, {:content_type, _}} = Parser.parse("http://example.com/pdf-file") +  end  end | 
