func TestRaftLogReplicationWithoutLeader(t *testing.T) { t.Parallel() nodes, clockSource := raftutils.NewRaftCluster(t, tc) defer raftutils.TeardownCluster(t, nodes) // Stop the leader nodes[1].Stop() // Propose a value _, err := raftutils.ProposeValue(t, nodes[2]) assert.Error(t, err) // No value should be replicated in the store in the absence of the leader raftutils.CheckNoValue(t, clockSource, nodes[2]) raftutils.CheckNoValue(t, clockSource, nodes[3]) }
func TestRaftQuorumFailure(t *testing.T) { t.Parallel() // Bring up a 5 nodes cluster nodes, clockSource := raftutils.NewRaftCluster(t, tc) raftutils.AddRaftNode(t, clockSource, nodes, tc) raftutils.AddRaftNode(t, clockSource, nodes, tc) defer raftutils.TeardownCluster(t, nodes) // Lose a majority for i := uint64(3); i <= 5; i++ { nodes[i].Server.Stop() nodes[i].Stop() } // Propose a value _, err := raftutils.ProposeValue(t, nodes[1]) assert.Error(t, err) // The value should not be replicated, we have no majority raftutils.CheckNoValue(t, clockSource, nodes[2]) raftutils.CheckNoValue(t, clockSource, nodes[1]) }