48 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| # Pleroma: A lightweight social networking server
 | |
| # Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
 | |
| # SPDX-License-Identifier: AGPL-3.0-only
 | |
| 
 | |
| defmodule MockActivityPub do
 | |
|   def publish_one({ret, waiter}) do
 | |
|     send(waiter, :complete)
 | |
|     {ret, "success"}
 | |
|   end
 | |
| end
 | |
| 
 | |
| defmodule Pleroma.Web.Federator.RetryQueueTest do
 | |
|   use Pleroma.DataCase
 | |
|   alias Pleroma.Web.Federator.RetryQueue
 | |
| 
 | |
|   @small_retry_count 0
 | |
|   @hopeless_retry_count 10
 | |
| 
 | |
|   setup do
 | |
|     RetryQueue.reset_stats()
 | |
|   end
 | |
| 
 | |
|   test "RetryQueue responds to stats request" do
 | |
|     assert %{delivered: 0, dropped: 0} == RetryQueue.get_stats()
 | |
|   end
 | |
| 
 | |
|   test "failed posts are retried" do
 | |
|     {:retry, _timeout} = RetryQueue.get_retry_params(@small_retry_count)
 | |
| 
 | |
|     wait_task =
 | |
|       Task.async(fn ->
 | |
|         receive do
 | |
|           :complete -> :ok
 | |
|         end
 | |
|       end)
 | |
| 
 | |
|     RetryQueue.enqueue({:ok, wait_task.pid}, MockActivityPub, @small_retry_count)
 | |
|     Task.await(wait_task)
 | |
|     assert %{delivered: 1, dropped: 0} == RetryQueue.get_stats()
 | |
|   end
 | |
| 
 | |
|   test "posts that have been tried too many times are dropped" do
 | |
|     {:drop, _timeout} = RetryQueue.get_retry_params(@hopeless_retry_count)
 | |
| 
 | |
|     RetryQueue.enqueue({:ok, nil}, MockActivityPub, @hopeless_retry_count)
 | |
|     assert %{delivered: 0, dropped: 1} == RetryQueue.get_stats()
 | |
|   end
 | |
| end
 |