preserve state in singleton managers

This commit is contained in:
2026-03-03 14:13:01 -07:00
parent e0f2d8c4aa
commit 4ac6c09759
4 changed files with 124 additions and 49 deletions

View File

@@ -30,6 +30,29 @@ defmodule Backend.NodeClusterIntegrationTests do
assert length(peer_nodes -- [owner_node]) == 3,
"Expected 3 non-owner peer nodes, got #{inspect(peer_nodes -- [owner_node])}"
end
test "crashing GameRunner gets picked up on other node" do
peers = start_cluster(2)
game_runner_pid =
:peer.call(hd(peers) |> elem(0), :global, :whereis_name, [Backend.GameRunner])
assert is_pid(game_runner_pid), "Could not find GameRunner in :global registry"
first_node = node(game_runner_pid)
GameRunner.crash_game()
:timer.sleep(100)
new_pid = GameRunner.get_pid()
assert is_pid(new_pid), "GameRunner did not restart after crash "
restarted_node = node(new_pid)
assert restarted_node != first_node,
"GameRunner restarted on the same node after 10 crash attempts"
end
end
defp start_cluster(count) do