Fix flaky/erratic tests in Pleroma.Config.TransferTaskTest
There were async calls happening, so they weren't always finished when assert happened.
This commit is contained in:
parent
9a6280cdb9
commit
ba31af021c
|
@ -61,6 +61,12 @@ def handle_cast(:refresh, _state) do
|
||||||
{:noreply, @init_state}
|
{:noreply, @init_state}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Don't actually restart during tests.
|
||||||
|
# We just check if the correct call has been done.
|
||||||
|
# If we actually restart, we get errors during the tests like
|
||||||
|
# (RuntimeError) could not lookup Ecto repo Pleroma.Repo because it was not started or
|
||||||
|
# it does not exist
|
||||||
|
# See tests in Pleroma.Config.TransferTaskTest
|
||||||
def handle_cast({:restart, :test, _}, state) do
|
def handle_cast({:restart, :test, _}, state) do
|
||||||
Logger.debug("pleroma manually restarted")
|
Logger.debug("pleroma manually restarted")
|
||||||
{:noreply, Map.put(state, :need_reboot, false)}
|
{:noreply, Map.put(state, :need_reboot, false)}
|
||||||
|
@ -74,6 +80,12 @@ def handle_cast({:restart, _, delay}, state) do
|
||||||
|
|
||||||
def handle_cast({:after_boot, _}, %{after_boot: true} = state), do: {:noreply, state}
|
def handle_cast({:after_boot, _}, %{after_boot: true} = state), do: {:noreply, state}
|
||||||
|
|
||||||
|
# Don't actually restart during tests.
|
||||||
|
# We just check if the correct call has been done.
|
||||||
|
# If we actually restart, we get errors during the tests like
|
||||||
|
# (RuntimeError) could not lookup Ecto repo Pleroma.Repo because it was not started or
|
||||||
|
# it does not exist
|
||||||
|
# See tests in Pleroma.Config.TransferTaskTest
|
||||||
def handle_cast({:after_boot, :test}, state) do
|
def handle_cast({:after_boot, :test}, state) do
|
||||||
Logger.debug("pleroma restarted after boot")
|
Logger.debug("pleroma restarted after boot")
|
||||||
state = %{state | after_boot: true, rebooted: true}
|
state = %{state | after_boot: true, rebooted: true}
|
||||||
|
|
|
@ -79,35 +79,70 @@ test "transfer config values with full subkey update" do
|
||||||
|
|
||||||
describe "pleroma restart" do
|
describe "pleroma restart" do
|
||||||
setup do
|
setup do
|
||||||
on_exit(fn -> Restarter.Pleroma.refresh() end)
|
on_exit(fn ->
|
||||||
|
Restarter.Pleroma.refresh()
|
||||||
|
|
||||||
|
# Restarter.Pleroma.refresh/0 is an asynchronous call.
|
||||||
|
# A GenServer will first finish the previous call before starting a new one.
|
||||||
|
# Here we do a synchronous call.
|
||||||
|
# That way we are sure that the previous call has finished before we continue.
|
||||||
|
# See https://stackoverflow.com/questions/51361856/how-to-use-task-await-with-genserver
|
||||||
|
Restarter.Pleroma.rebooted?()
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
@tag :erratic
|
|
||||||
test "don't restart if no reboot time settings were changed" do
|
test "don't restart if no reboot time settings were changed" do
|
||||||
clear_config(:emoji)
|
clear_config(:emoji)
|
||||||
insert(:config, key: :emoji, value: [groups: [a: 1, b: 2]])
|
insert(:config, key: :emoji, value: [groups: [a: 1, b: 2]])
|
||||||
|
|
||||||
refute String.contains?(
|
refute String.contains?(
|
||||||
capture_log(fn -> TransferTask.start_link([]) end),
|
capture_log(fn ->
|
||||||
|
TransferTask.start_link([])
|
||||||
|
|
||||||
|
# TransferTask.start_link/1 is an asynchronous call.
|
||||||
|
# A GenServer will first finish the previous call before starting a new one.
|
||||||
|
# Here we do a synchronous call.
|
||||||
|
# That way we are sure that the previous call has finished before we continue.
|
||||||
|
Restarter.Pleroma.rebooted?()
|
||||||
|
end),
|
||||||
"pleroma restarted"
|
"pleroma restarted"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
@tag :erratic
|
|
||||||
test "on reboot time key" do
|
test "on reboot time key" do
|
||||||
clear_config(:shout)
|
clear_config(:shout)
|
||||||
insert(:config, key: :shout, value: [enabled: false])
|
insert(:config, key: :shout, value: [enabled: false])
|
||||||
assert capture_log(fn -> TransferTask.start_link([]) end) =~ "pleroma restarted"
|
|
||||||
|
# Note that we don't actually restart Pleroma.
|
||||||
|
# See module Restarter.Pleroma
|
||||||
|
assert capture_log(fn ->
|
||||||
|
TransferTask.start_link([])
|
||||||
|
|
||||||
|
# TransferTask.start_link/1 is an asynchronous call.
|
||||||
|
# A GenServer will first finish the previous call before starting a new one.
|
||||||
|
# Here we do a synchronous call.
|
||||||
|
# That way we are sure that the previous call has finished before we continue.
|
||||||
|
Restarter.Pleroma.rebooted?()
|
||||||
|
end) =~ "pleroma restarted"
|
||||||
end
|
end
|
||||||
|
|
||||||
@tag :erratic
|
|
||||||
test "on reboot time subkey" do
|
test "on reboot time subkey" do
|
||||||
clear_config(Pleroma.Captcha)
|
clear_config(Pleroma.Captcha)
|
||||||
insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])
|
insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])
|
||||||
assert capture_log(fn -> TransferTask.start_link([]) end) =~ "pleroma restarted"
|
|
||||||
|
# Note that we don't actually restart Pleroma.
|
||||||
|
# See module Restarter.Pleroma
|
||||||
|
assert capture_log(fn ->
|
||||||
|
TransferTask.start_link([])
|
||||||
|
|
||||||
|
# TransferTask.start_link/1 is an asynchronous call.
|
||||||
|
# A GenServer will first finish the previous call before starting a new one.
|
||||||
|
# Here we do a synchronous call.
|
||||||
|
# That way we are sure that the previous call has finished before we continue.
|
||||||
|
Restarter.Pleroma.rebooted?()
|
||||||
|
end) =~ "pleroma restarted"
|
||||||
end
|
end
|
||||||
|
|
||||||
@tag :erratic
|
|
||||||
test "don't restart pleroma on reboot time key and subkey if there is false flag" do
|
test "don't restart pleroma on reboot time key and subkey if there is false flag" do
|
||||||
clear_config(:shout)
|
clear_config(:shout)
|
||||||
clear_config(Pleroma.Captcha)
|
clear_config(Pleroma.Captcha)
|
||||||
|
@ -116,7 +151,15 @@ test "don't restart pleroma on reboot time key and subkey if there is false flag
|
||||||
insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])
|
insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])
|
||||||
|
|
||||||
refute String.contains?(
|
refute String.contains?(
|
||||||
capture_log(fn -> TransferTask.load_and_update_env([], false) end),
|
capture_log(fn ->
|
||||||
|
TransferTask.load_and_update_env([], false)
|
||||||
|
|
||||||
|
# TransferTask.start_link/1 is an asynchronous call.
|
||||||
|
# A GenServer will first finish the previous call before starting a new one.
|
||||||
|
# Here we do a synchronous call.
|
||||||
|
# That way we are sure that the previous call has finished before we continue.
|
||||||
|
Restarter.Pleroma.rebooted?()
|
||||||
|
end),
|
||||||
"pleroma restarted"
|
"pleroma restarted"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue