-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathhttp_peer_test.go
More file actions
84 lines (70 loc) · 2.04 KB
/
http_peer_test.go
File metadata and controls
84 lines (70 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package graft
import (
"encoding/json"
"github.com/benmills/quiz"
"io/ioutil"
"net/http"
"net/http/httptest"
"testing"
)
func fakeRemoteServer() *httptest.Server {
server := http.NewServeMux()
server.HandleFunc("/request_vote", func(w http.ResponseWriter, r *http.Request) {
var requestVoteMessage RequestVoteMessage
rawBody, _ := ioutil.ReadAll(r.Body)
json.Unmarshal(rawBody, &requestVoteMessage)
response := VoteResponseMessage{
Term: requestVoteMessage.Term,
VoteGranted: true,
}
enc := json.NewEncoder(w)
enc.Encode(response)
})
server.HandleFunc("/append_entries", func(w http.ResponseWriter, r *http.Request) {
var appendEntriesMessage AppendEntriesMessage
rawBody, _ := ioutil.ReadAll(r.Body)
json.Unmarshal(rawBody, &appendEntriesMessage)
response := AppendEntriesResponseMessage{true}
enc := json.NewEncoder(w)
enc.Encode(response)
})
return httptest.NewServer(server)
}
func TestHttpPeerCanBeAddedToAServersListOfPeers(t *testing.T) {
peer := NewHttpPeer("http://localhost:4040")
server2 := New("id")
server2.Peers = []Peer{peer}
}
func TestHttpPeerRequestsVoteOverHttp(t *testing.T) {
test := quiz.Test(t)
remoteServer := fakeRemoteServer()
defer remoteServer.Close()
peer := NewHttpPeer(remoteServer.URL)
voteRequest := RequestVoteMessage{
Term: 1,
CandidateId: "foo",
LastLogIndex: 0,
LastLogTerm: 0,
}
response, err := peer.ReceiveRequestVote(voteRequest)
test.Expect(err == nil).ToBeTrue()
test.Expect(response.Term).ToEqual(1)
test.Expect(response.VoteGranted).ToBeTrue()
}
func TestHttpPeerAppendsEntriesOverHttp(t *testing.T) {
test := quiz.Test(t)
remoteServer := fakeRemoteServer()
defer remoteServer.Close()
peer := NewHttpPeer(remoteServer.URL)
appendEntriesMessage := AppendEntriesMessage{
Term: 1,
LeaderId: "foo",
PrevLogIndex: 0,
PrevLogTerm: 0,
Entries: []LogEntry{},
CommitIndex: 0,
}
response, err := peer.ReceiveAppendEntries(appendEntriesMessage)
test.Expect(response.Success).ToBeTrue()
test.Expect(err == nil).ToBeTrue()
}