50 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| defmodule Pleroma.Plugs.RateLimitPlugTest do
 | |
|   use ExUnit.Case, async: true
 | |
|   use Plug.Test
 | |
| 
 | |
|   alias Pleroma.Plugs.RateLimitPlug
 | |
| 
 | |
|   @opts RateLimitPlug.init(%{max_requests: 5, interval: 1})
 | |
| 
 | |
|   setup do
 | |
|     enabled = Pleroma.Config.get([:app_account_creation, :enabled])
 | |
| 
 | |
|     Pleroma.Config.put([:app_account_creation, :enabled], true)
 | |
| 
 | |
|     on_exit(fn ->
 | |
|       Pleroma.Config.put([:app_account_creation, :enabled], enabled)
 | |
|     end)
 | |
| 
 | |
|     :ok
 | |
|   end
 | |
| 
 | |
|   test "it restricts by opts" do
 | |
|     conn = conn(:get, "/")
 | |
|     bucket_name = conn.remote_ip |> Tuple.to_list() |> Enum.join(".")
 | |
|     ms = 1000
 | |
| 
 | |
|     conn = RateLimitPlug.call(conn, @opts)
 | |
|     {1, 4, _, _, _} = ExRated.inspect_bucket(bucket_name, ms, 5)
 | |
|     conn = RateLimitPlug.call(conn, @opts)
 | |
|     {2, 3, _, _, _} = ExRated.inspect_bucket(bucket_name, ms, 5)
 | |
|     conn = RateLimitPlug.call(conn, @opts)
 | |
|     {3, 2, _, _, _} = ExRated.inspect_bucket(bucket_name, ms, 5)
 | |
|     conn = RateLimitPlug.call(conn, @opts)
 | |
|     {4, 1, _, _, _} = ExRated.inspect_bucket(bucket_name, ms, 5)
 | |
|     conn = RateLimitPlug.call(conn, @opts)
 | |
|     {5, 0, to_reset, _, _} = ExRated.inspect_bucket(bucket_name, ms, 5)
 | |
|     conn = RateLimitPlug.call(conn, @opts)
 | |
|     assert conn.status == 403
 | |
|     assert conn.halted
 | |
|     assert conn.resp_body == "{\"error\":\"Rate limit exceeded.\"}"
 | |
| 
 | |
|     Process.sleep(to_reset)
 | |
| 
 | |
|     conn = conn(:get, "/")
 | |
|     conn = RateLimitPlug.call(conn, @opts)
 | |
|     {1, 4, _, _, _} = ExRated.inspect_bucket(bucket_name, ms, 5)
 | |
|     refute conn.status == 403
 | |
|     refute conn.halted
 | |
|     refute conn.resp_body
 | |
|   end
 | |
| end
 | 
