@@ -59,4 +59,49 @@ defmodule UniformQuorumDistributionTest do
5959 end
6060 end
6161 end
62+
63+ test "has_quorum? returns false for empty list" do
64+ refute Horde.UniformQuorumDistribution . has_quorum? ( [ ] )
65+ end
66+
67+ test "has_quorum? returns nil when all members are shutting_down" do
68+ members = [
69+ % { status: :shutting_down , name: :a } ,
70+ % { status: :shutting_down , name: :b } ,
71+ % { status: :shutting_down , name: :c }
72+ ]
73+
74+ assert Horde.UniformQuorumDistribution . has_quorum? ( members ) == nil
75+ end
76+
77+ test "has_quorum? returns true when majority is alive" do
78+ members = [
79+ % { status: :alive , name: :a } ,
80+ % { status: :alive , name: :b } ,
81+ % { status: :dead , name: :c }
82+ ]
83+
84+ assert Horde.UniformQuorumDistribution . has_quorum? ( members )
85+ end
86+
87+ test "has_quorum? returns false when majority is dead" do
88+ members = [
89+ % { status: :alive , name: :a } ,
90+ % { status: :dead , name: :b } ,
91+ % { status: :dead , name: :c }
92+ ]
93+
94+ refute Horde.UniformQuorumDistribution . has_quorum? ( members )
95+ end
96+
97+ test "choose_node returns quorum_not_met when no quorum" do
98+ members = [
99+ % { status: :alive , name: :a } ,
100+ % { status: :dead , name: :b } ,
101+ % { status: :dead , name: :c }
102+ ]
103+
104+ assert { :error , :quorum_not_met } =
105+ Horde.UniformQuorumDistribution . choose_node ( % { id: :test , start: { :test } } , members )
106+ end
62107end
0 commit comments