From 2007a7ac1203bb51f88033daa5100b57c6603ca5 Mon Sep 17 00:00:00 2001
From: Ben Johnson <benbjohnson@yahoo.com>
Date: Mon, 29 Apr 2013 20:43:36 -0600
Subject: [PATCH] Add request vote denial if already voted.

---
 server_test.go | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/server_test.go b/server_test.go
index e953d29a3b..8a4a65eb1a 100644
--- a/server_test.go
+++ b/server_test.go
@@ -37,8 +37,20 @@ func TestServerRequestVoteDeniedForStaleTerm(t *testing.T) {
 	}
 }
 
-// TODO: Test demotion.
-// TODO: Test voted for different candidate.
+// Ensure that a vote request is denied if we've already voted for a different candidate.
+func TestServerRequestVoteDeniedIfAlreadyVoted(t *testing.T) {
+	server := newTestServer("1")
+	server.currentTerm = 2
+	resp := server.RequestVote(NewRequestVoteRequest(2, "foo", 0, 0))
+	if !(resp.Term == 2 && resp.VoteGranted) {
+		t.Fatalf("First vote should not have been denied")
+	}
+	resp = server.RequestVote(NewRequestVoteRequest(2, "bar", 0, 0))
+	if !(resp.Term == 2 && !resp.VoteGranted) {
+		t.Fatalf("Second vote should have been denied")
+	}
+}
+
 // TODO: Test out of date log.
 // TODO: Test success with longer log.