test: LeaderElection attempt_election + leader_call callbacks

This commit is contained in:
Graham McIntire 2026-04-24 08:49:52 -05:00
parent f4453078ae
commit 8be2fb5a77
No known key found for this signature in database
GPG key ID: F4ABF488E6029E59

View file

@ -422,4 +422,61 @@ defmodule Aprsme.Cluster.LeaderElectionTest do
assert new_state.election_forced
end
end
describe "handle_info(:attempt_election) direct callback" do
setup do
:global.unregister_name(@election_key)
on_exit(fn ->
:global.unregister_name(@election_key)
end)
:ok
end
test "becomes leader and persists leadership when no other registration exists" do
state = %LeaderElection{
cluster_enabled: false,
is_leader: false,
leader_node: nil
}
assert {:noreply, new_state} =
LeaderElection.handle_info(:attempt_election, state)
assert new_state.is_leader == true
assert new_state.leader_node == node()
end
test "re-confirms leadership when already registered as self" do
# Pre-register ourselves as the leader.
:global.register_name(@election_key, self())
state = %LeaderElection{
cluster_enabled: false,
is_leader: false,
leader_node: nil
}
assert {:noreply, new_state} =
LeaderElection.handle_info(:attempt_election, state)
assert new_state.is_leader == true
end
end
describe "handle_call callbacks" do
test "leader? returns state.is_leader" do
state = %LeaderElection{is_leader: true}
assert {:reply, true, ^state} = LeaderElection.handle_call(:leader?, self(), state)
state2 = %LeaderElection{is_leader: false}
assert {:reply, false, ^state2} = LeaderElection.handle_call(:leader?, self(), state2)
end
test "current_leader returns state.leader_node" do
state = %LeaderElection{leader_node: :node_a}
assert {:reply, :node_a, ^state} = LeaderElection.handle_call(:current_leader, self(), state)
end
end
end