test: LeaderElection attempt_election + leader_call callbacks
This commit is contained in:
parent
f4453078ae
commit
8be2fb5a77
1 changed files with 57 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue