tests consistency
[akkoma] / test / pleroma / web / rich_media / parsers / ttl / aws_signed_url_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.RichMedia.Parsers.TTL.AwsSignedUrlTest do
6 use ExUnit.Case, async: true
7
8 test "s3 signed url is parsed correct for expiration time" do
9 url = "https://pleroma.social/amz"
10
11 {:ok, timestamp} =
12 Timex.now()
13 |> DateTime.truncate(:second)
14 |> Timex.format("{ISO:Basic:Z}")
15
16 # in seconds
17 valid_till = 30
18
19 metadata = construct_metadata(timestamp, valid_till, url)
20
21 expire_time =
22 Timex.parse!(timestamp, "{ISO:Basic:Z}") |> Timex.to_unix() |> Kernel.+(valid_till)
23
24 assert {:ok, expire_time} == Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl.ttl(metadata, url)
25 end
26
27 test "s3 signed url is parsed and correct ttl is set for rich media" do
28 url = "https://pleroma.social/amz"
29
30 {:ok, timestamp} =
31 Timex.now()
32 |> DateTime.truncate(:second)
33 |> Timex.format("{ISO:Basic:Z}")
34
35 # in seconds
36 valid_till = 30
37
38 metadata = construct_metadata(timestamp, valid_till, url)
39
40 body = """
41 <meta name="twitter:card" content="Pleroma" />
42 <meta name="twitter:site" content="Pleroma" />
43 <meta name="twitter:title" content="Pleroma" />
44 <meta name="twitter:description" content="Pleroma" />
45 <meta name="twitter:image" content="#{Map.get(metadata, :image)}" />
46 """
47
48 Tesla.Mock.mock(fn
49 %{
50 method: :get,
51 url: "https://pleroma.social/amz"
52 } ->
53 %Tesla.Env{status: 200, body: body}
54 end)
55
56 Cachex.put(:rich_media_cache, url, metadata)
57
58 Pleroma.Web.RichMedia.Parser.set_ttl_based_on_image(metadata, url)
59
60 {:ok, cache_ttl} = Cachex.ttl(:rich_media_cache, url)
61
62 # as there is delay in setting and pulling the data from cache we ignore 1 second
63 # make it 2 seconds for flakyness
64 assert_in_delta(valid_till * 1000, cache_ttl, 2000)
65 end
66
67 defp construct_s3_url(timestamp, valid_till) do
68 "https://pleroma.s3.ap-southeast-1.amazonaws.com/sachin%20%281%29%20_a%20-%25%2Aasdasd%20BNN%20bnnn%20.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIBLWWK6RGDQXDLJQ%2F20190716%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=#{
69 timestamp
70 }&X-Amz-Expires=#{valid_till}&X-Amz-Signature=04ffd6b98634f4b1bbabc62e0fac4879093cd54a6eed24fe8eb38e8369526bbf&X-Amz-SignedHeaders=host"
71 end
72
73 defp construct_metadata(timestamp, valid_till, url) do
74 %{
75 image: construct_s3_url(timestamp, valid_till),
76 site: "Pleroma",
77 title: "Pleroma",
78 description: "Pleroma",
79 url: url
80 }
81 end
82 end