added tests

This commit is contained in:
Maksim Pechnikov 2020-06-15 14:55:00 +03:00
parent 2e8a236cef
commit 62b8c31b7a
3 changed files with 127 additions and 22 deletions

View File

@ -7,6 +7,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheController do
alias Pleroma.Plugs.OAuthScopesPlug alias Pleroma.Plugs.OAuthScopesPlug
alias Pleroma.Web.ApiSpec.Admin, as: Spec alias Pleroma.Web.ApiSpec.Admin, as: Spec
alias Pleroma.Web.MediaProxy
plug(Pleroma.Web.ApiSpec.CastAndValidate) plug(Pleroma.Web.ApiSpec.CastAndValidate)
@ -24,15 +25,39 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheController do
defdelegate open_api_operation(action), to: Spec.MediaProxyCacheOperation defdelegate open_api_operation(action), to: Spec.MediaProxyCacheOperation
def index(%{assigns: %{user: _}} = conn, _) do def index(%{assigns: %{user: _}} = conn, params) do
render(conn, "index.json", urls: []) cursor =
:deleted_urls_cache
|> :ets.table([{:traverse, {:select, Cachex.Query.create(true, :key)}}])
|> :qlc.cursor()
urls =
case params.page do
1 ->
:qlc.next_answers(cursor, params.page_size)
_ ->
:qlc.next_answers(cursor, (params.page - 1) * params.page_size)
:qlc.next_answers(cursor, params.page_size)
end
:qlc.delete_cursor(cursor)
render(conn, "index.json", urls: urls)
end end
def delete(%{assigns: %{user: _}, body_params: %{urls: urls}} = conn, _) do def delete(%{assigns: %{user: _}, body_params: %{urls: urls}} = conn, _) do
MediaProxy.remove_from_deleted_urls(urls)
render(conn, "index.json", urls: urls) render(conn, "index.json", urls: urls)
end end
def purge(%{assigns: %{user: _}, body_params: %{urls: urls, ban: _ban}} = conn, _) do def purge(%{assigns: %{user: _}, body_params: %{urls: urls, ban: ban}} = conn, _) do
MediaProxy.Invalidation.purge(urls)
if ban do
MediaProxy.put_in_deleted_urls(urls)
end
render(conn, "index.json", urls: urls) render(conn, "index.json", urls: urls)
end end
end end

View File

@ -10,7 +10,7 @@ defmodule Pleroma.Web.MediaProxy.Invalidation.Script do
require Logger require Logger
@impl Pleroma.Web.MediaProxy.Invalidation @impl Pleroma.Web.MediaProxy.Invalidation
def purge(urls, opts) do def purge(urls, opts \\ %{}) do
args = args =
urls urls
|> List.wrap() |> List.wrap()

View File

@ -6,6 +6,16 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
use Pleroma.Web.ConnCase use Pleroma.Web.ConnCase
import Pleroma.Factory import Pleroma.Factory
import Mock
alias Pleroma.Web.MediaProxy
setup do: clear_config([:media_proxy])
setup do
on_exit(fn -> Cachex.clear(:deleted_urls_cache) end)
:ok
end
setup do setup do
admin = insert(:user, is_admin: true) admin = insert(:user, is_admin: true)
@ -16,51 +26,121 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
|> assign(:user, admin) |> assign(:user, admin)
|> assign(:token, token) |> assign(:token, token)
Config.put([:media_proxy, :enabled], true)
Config.put([:media_proxy, :invalidation, :enabled], true)
Config.put([:media_proxy, :invalidation, :provider], MediaProxy.Invalidation.Script)
{:ok, %{admin: admin, token: token, conn: conn}} {:ok, %{admin: admin, token: token, conn: conn}}
end end
describe "GET /api/pleroma/admin/media_proxy_caches" do describe "GET /api/pleroma/admin/media_proxy_caches" do
test "shows banned MediaProxy URLs", %{conn: conn} do test "shows banned MediaProxy URLs", %{conn: conn} do
MediaProxy.put_in_deleted_urls([
"http://localhost:4001/media/a688346.jpg",
"http://localhost:4001/media/fb1f4d.jpg"
])
MediaProxy.put_in_deleted_urls("http://localhost:4001/media/gb1f44.jpg")
MediaProxy.put_in_deleted_urls("http://localhost:4001/media/tb13f47.jpg")
MediaProxy.put_in_deleted_urls("http://localhost:4001/media/wb1f46.jpg")
response = response =
conn conn
|> get("/api/pleroma/admin/media_proxy_caches") |> get("/api/pleroma/admin/media_proxy_caches?page_size=2")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert response["urls"] == [] assert response["urls"] == [
"http://localhost:4001/media/fb1f4d.jpg",
"http://localhost:4001/media/a688346.jpg"
]
response =
conn
|> get("/api/pleroma/admin/media_proxy_caches?page_size=2&page=2")
|> json_response_and_validate_schema(200)
assert response["urls"] == [
"http://localhost:4001/media/gb1f44.jpg",
"http://localhost:4001/media/tb13f47.jpg"
]
response =
conn
|> get("/api/pleroma/admin/media_proxy_caches?page_size=2&page=3")
|> json_response_and_validate_schema(200)
assert response["urls"] == ["http://localhost:4001/media/wb1f46.jpg"]
end end
end end
describe "DELETE /api/pleroma/admin/media_proxy_caches/delete" do describe "DELETE /api/pleroma/admin/media_proxy_caches/delete" do
test "deleted MediaProxy URLs from banned", %{conn: conn} do test "deleted MediaProxy URLs from banned", %{conn: conn} do
MediaProxy.put_in_deleted_urls([
"http://localhost:4001/media/a688346.jpg",
"http://localhost:4001/media/fb1f4d.jpg"
])
response = response =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/media_proxy_caches/delete", %{ |> post("/api/pleroma/admin/media_proxy_caches/delete", %{
urls: ["http://example.com/media/a688346.jpg", "http://example.com/media/fb1f4d.jpg"] urls: ["http://localhost:4001/media/a688346.jpg"]
}) })
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert response["urls"] == [ assert response["urls"] == ["http://localhost:4001/media/a688346.jpg"]
"http://example.com/media/a688346.jpg", refute MediaProxy.in_deleted_urls("http://localhost:4001/media/a688346.jpg")
"http://example.com/media/fb1f4d.jpg" assert MediaProxy.in_deleted_urls("http://localhost:4001/media/fb1f4d.jpg")
]
end end
end end
describe "PURGE /api/pleroma/admin/media_proxy_caches/purge" do describe "PURGE /api/pleroma/admin/media_proxy_caches/purge" do
test "perform invalidates cache of MediaProxy", %{conn: conn} do test "perform invalidates cache of MediaProxy", %{conn: conn} do
response = urls = [
conn "http://example.com/media/a688346.jpg",
|> put_req_header("content-type", "application/json") "http://example.com/media/fb1f4d.jpg"
|> post("/api/pleroma/admin/media_proxy_caches/purge", %{ ]
urls: ["http://example.com/media/a688346.jpg", "http://example.com/media/fb1f4d.jpg"]
})
|> json_response_and_validate_schema(200)
assert response["urls"] == [ with_mocks [
"http://example.com/media/a688346.jpg", {MediaProxy.Invalidation.Script, [],
"http://example.com/media/fb1f4d.jpg" [
] purge: fn _, _ -> {"ok", 0} end
]}
] do
response =
conn
|> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/media_proxy_caches/purge", %{urls: urls, ban: false})
|> json_response_and_validate_schema(200)
assert response["urls"] == urls
refute MediaProxy.in_deleted_urls("http://example.com/media/a688346.jpg")
refute MediaProxy.in_deleted_urls("http://example.com/media/fb1f4d.jpg")
end
end
test "perform invalidates cache of MediaProxy and adds url to banned", %{conn: conn} do
urls = [
"http://example.com/media/a688346.jpg",
"http://example.com/media/fb1f4d.jpg"
]
with_mocks [{MediaProxy.Invalidation.Script, [], [purge: fn _, _ -> {"ok", 0} end]}] do
response =
conn
|> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/media_proxy_caches/purge", %{
urls: urls,
ban: true
})
|> json_response_and_validate_schema(200)
assert response["urls"] == urls
assert MediaProxy.in_deleted_urls("http://example.com/media/a688346.jpg")
assert MediaProxy.in_deleted_urls("http://example.com/media/fb1f4d.jpg")
end
end end
end end
end end