logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

media_proxy_cache_controller_test.exs (5782B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
  5. use Pleroma.Web.ConnCase
  6. import Mock
  7. import Mox
  8. import Pleroma.Factory
  9. alias Pleroma.UnstubbedConfigMock, as: ConfigMock
  10. alias Pleroma.Web.MediaProxy
  11. setup do: clear_config([:media_proxy])
  12. setup do
  13. admin = insert(:user, is_admin: true)
  14. token = insert(:oauth_admin_token, user: admin)
  15. conn =
  16. build_conn()
  17. |> assign(:user, admin)
  18. |> assign(:token, token)
  19. clear_config([:media_proxy, :enabled], true)
  20. clear_config([:media_proxy, :invalidation, :enabled], true)
  21. clear_config([:media_proxy, :invalidation, :provider], MediaProxy.Invalidation.Script)
  22. {:ok, %{admin: admin, token: token, conn: conn}}
  23. end
  24. describe "GET /api/pleroma/admin/media_proxy_caches" do
  25. test "shows banned MediaProxy URLs", %{conn: conn} do
  26. MediaProxy.put_in_banned_urls([
  27. "http://localhost:4001/media/a688346.jpg",
  28. "http://localhost:4001/media/fb1f4d.jpg"
  29. ])
  30. MediaProxy.put_in_banned_urls("http://localhost:4001/media/gb1f44.jpg")
  31. MediaProxy.put_in_banned_urls("http://localhost:4001/media/tb13f47.jpg")
  32. MediaProxy.put_in_banned_urls("http://localhost:4001/media/wb1f46.jpg")
  33. response =
  34. conn
  35. |> get("/api/pleroma/admin/media_proxy_caches?page_size=2")
  36. |> json_response_and_validate_schema(200)
  37. assert response["page_size"] == 2
  38. assert response["count"] == 5
  39. results = response["urls"]
  40. response =
  41. conn
  42. |> get("/api/pleroma/admin/media_proxy_caches?page_size=2&page=2")
  43. |> json_response_and_validate_schema(200)
  44. assert response["page_size"] == 2
  45. assert response["count"] == 5
  46. results = results ++ response["urls"]
  47. response =
  48. conn
  49. |> get("/api/pleroma/admin/media_proxy_caches?page_size=2&page=3")
  50. |> json_response_and_validate_schema(200)
  51. results = results ++ response["urls"]
  52. assert results |> Enum.sort() ==
  53. [
  54. "http://localhost:4001/media/wb1f46.jpg",
  55. "http://localhost:4001/media/gb1f44.jpg",
  56. "http://localhost:4001/media/tb13f47.jpg",
  57. "http://localhost:4001/media/fb1f4d.jpg",
  58. "http://localhost:4001/media/a688346.jpg"
  59. ]
  60. |> Enum.sort()
  61. end
  62. test "search banned MediaProxy URLs", %{conn: conn} do
  63. MediaProxy.put_in_banned_urls([
  64. "http://localhost:4001/media/a688346.jpg",
  65. "http://localhost:4001/media/ff44b1f4d.jpg"
  66. ])
  67. MediaProxy.put_in_banned_urls("http://localhost:4001/media/gb1f44.jpg")
  68. MediaProxy.put_in_banned_urls("http://localhost:4001/media/tb13f47.jpg")
  69. MediaProxy.put_in_banned_urls("http://localhost:4001/media/wb1f46.jpg")
  70. response =
  71. conn
  72. |> get("/api/pleroma/admin/media_proxy_caches?page_size=2&query=F44")
  73. |> json_response_and_validate_schema(200)
  74. assert response["urls"] |> Enum.sort() == [
  75. "http://localhost:4001/media/ff44b1f4d.jpg",
  76. "http://localhost:4001/media/gb1f44.jpg"
  77. ]
  78. assert response["page_size"] == 2
  79. assert response["count"] == 2
  80. end
  81. end
  82. describe "POST /api/pleroma/admin/media_proxy_caches/delete" do
  83. test "deleted MediaProxy URLs from banned", %{conn: conn} do
  84. MediaProxy.put_in_banned_urls([
  85. "http://localhost:4001/media/a688346.jpg",
  86. "http://localhost:4001/media/fb1f4d.jpg"
  87. ])
  88. conn
  89. |> put_req_header("content-type", "application/json")
  90. |> post("/api/pleroma/admin/media_proxy_caches/delete", %{
  91. urls: ["http://localhost:4001/media/a688346.jpg"]
  92. })
  93. |> json_response_and_validate_schema(200)
  94. refute MediaProxy.in_banned_urls("http://localhost:4001/media/a688346.jpg")
  95. assert MediaProxy.in_banned_urls("http://localhost:4001/media/fb1f4d.jpg")
  96. end
  97. end
  98. describe "POST /api/pleroma/admin/media_proxy_caches/purge" do
  99. test "perform invalidates cache of MediaProxy", %{conn: conn} do
  100. urls = [
  101. "http://example.com/media/a688346.jpg",
  102. "http://example.com/media/fb1f4d.jpg"
  103. ]
  104. ConfigMock
  105. |> stub_with(Pleroma.Test.StaticConfig)
  106. with_mocks [
  107. {MediaProxy.Invalidation.Script, [],
  108. [
  109. purge: fn _, _ -> {"ok", 0} end
  110. ]}
  111. ] do
  112. conn
  113. |> put_req_header("content-type", "application/json")
  114. |> post("/api/pleroma/admin/media_proxy_caches/purge", %{urls: urls, ban: false})
  115. |> json_response_and_validate_schema(200)
  116. refute MediaProxy.in_banned_urls("http://example.com/media/a688346.jpg")
  117. refute MediaProxy.in_banned_urls("http://example.com/media/fb1f4d.jpg")
  118. end
  119. end
  120. test "perform invalidates cache of MediaProxy and adds url to banned", %{conn: conn} do
  121. urls = [
  122. "http://example.com/media/a688346.jpg",
  123. "http://example.com/media/fb1f4d.jpg"
  124. ]
  125. ConfigMock
  126. |> stub_with(Pleroma.Test.StaticConfig)
  127. with_mocks [{MediaProxy.Invalidation.Script, [], [purge: fn _, _ -> {"ok", 0} end]}] do
  128. conn
  129. |> put_req_header("content-type", "application/json")
  130. |> post(
  131. "/api/pleroma/admin/media_proxy_caches/purge",
  132. %{urls: urls, ban: true}
  133. )
  134. |> json_response_and_validate_schema(200)
  135. assert MediaProxy.in_banned_urls("http://example.com/media/a688346.jpg")
  136. assert MediaProxy.in_banned_urls("http://example.com/media/fb1f4d.jpg")
  137. end
  138. end
  139. end
  140. end