Merge pull request #2071 from yichengq/287

etcdhttp: add NewPeerHandler test
This commit is contained in:
Yicheng Qin 2015-01-12 15:59:37 -08:00
commit 2e776117f8
4 changed files with 37 additions and 6 deletions

View File

@ -171,7 +171,7 @@ func startEtcd(cfg *config) (<-chan struct{}, error) {
Handler: etcdhttp.NewClientHandler(s),
Info: cfg.corsInfo,
}
ph := etcdhttp.NewPeerHandler(s)
ph := etcdhttp.NewPeerHandler(s.Cluster, s.RaftHandler())
// Start the peer server in a goroutine
for _, l := range plns {
go func(l net.Listener) {

View File

@ -30,15 +30,15 @@ const (
)
// NewPeerHandler generates an http.Handler to handle etcd peer (raft) requests.
func NewPeerHandler(server *etcdserver.EtcdServer) http.Handler {
func NewPeerHandler(clusterInfo etcdserver.ClusterInfo, raftHandler http.Handler) http.Handler {
mh := &peerMembersHandler{
clusterInfo: server.Cluster,
clusterInfo: clusterInfo,
}
mux := http.NewServeMux()
mux.HandleFunc("/", http.NotFound)
mux.Handle(rafthttp.RaftPrefix, server.RaftHandler())
mux.Handle(rafthttp.RaftPrefix+"/", server.RaftHandler())
mux.Handle(rafthttp.RaftPrefix, raftHandler)
mux.Handle(rafthttp.RaftPrefix+"/", raftHandler)
mux.Handle(peerMembersPrefix, mh)
return mux
}

View File

@ -18,14 +18,45 @@ package etcdhttp
import (
"encoding/json"
"io/ioutil"
"net/http"
"net/http/httptest"
"path"
"testing"
"github.com/coreos/etcd/etcdserver"
"github.com/coreos/etcd/rafthttp"
)
// TestNewPeerHandler tests that NewPeerHandler returns a handler that
// handles raft-prefix requests well.
func TestNewPeerHandlerOnRaftPrefix(t *testing.T) {
h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("test data"))
})
ph := NewPeerHandler(&fakeCluster{}, h)
srv := httptest.NewServer(ph)
defer srv.Close()
tests := []string{
rafthttp.RaftPrefix,
rafthttp.RaftPrefix + "/hello",
}
for i, tt := range tests {
resp, err := http.Get(srv.URL + tt)
if err != nil {
t.Fatalf("unexpected http.Get error: %v", err)
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
t.Fatalf("unexpected ioutil.ReadAll error: %v", err)
}
if w := "test data"; string(body) != w {
t.Errorf("#%d: body = %s, want %s", i, body, w)
}
}
}
func TestServeMembersFails(t *testing.T) {
tests := []struct {
method string

View File

@ -487,7 +487,7 @@ func (m *member) Launch() error {
m.s.SyncTicker = time.Tick(500 * time.Millisecond)
m.s.Start()
m.raftHandler = &testutil.PauseableHandler{Next: etcdhttp.NewPeerHandler(m.s)}
m.raftHandler = &testutil.PauseableHandler{Next: etcdhttp.NewPeerHandler(m.s.Cluster, m.s.RaftHandler())}
for _, ln := range m.PeerListeners {
hs := &httptest.Server{