mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
etcdhttp: add /version endpoint
This commit is contained in:
parent
d7f9228133
commit
9a465b9cf5
@ -37,6 +37,7 @@ import (
|
||||
"github.com/coreos/etcd/pkg/types"
|
||||
"github.com/coreos/etcd/raft/raftpb"
|
||||
"github.com/coreos/etcd/store"
|
||||
"github.com/coreos/etcd/version"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -45,6 +46,7 @@ const (
|
||||
deprecatedMachinesPrefix = "/v2/machines"
|
||||
adminMembersPrefix = "/v2/admin/members/"
|
||||
statsPrefix = "/v2/stats"
|
||||
versionPrefix = "/version"
|
||||
// prefixes of peer endpoint
|
||||
raftPrefix = "/raft"
|
||||
membersPrefix = "/members"
|
||||
@ -74,11 +76,9 @@ func NewClientHandler(server *etcdserver.EtcdServer) http.Handler {
|
||||
mux.HandleFunc(statsPrefix+"/store", sh.serveStoreStats)
|
||||
mux.HandleFunc(statsPrefix+"/self", sh.serveSelfStats)
|
||||
mux.HandleFunc(statsPrefix+"/leader", sh.serveLeaderStats)
|
||||
// TODO: dynamic configuration may make this outdated. take care of it.
|
||||
// TODO: dynamic configuration may introduce race also.
|
||||
// TODO: add serveMembers
|
||||
mux.HandleFunc(deprecatedMachinesPrefix, sh.serveMachines)
|
||||
mux.HandleFunc(adminMembersPrefix, sh.serveAdminMembers)
|
||||
mux.HandleFunc(versionPrefix, sh.serveVersion)
|
||||
mux.HandleFunc("/", http.NotFound)
|
||||
return mux
|
||||
}
|
||||
@ -249,6 +249,13 @@ func (h serverHandler) serveLeaderStats(w http.ResponseWriter, r *http.Request)
|
||||
w.Write(h.stats.LeaderStats())
|
||||
}
|
||||
|
||||
func (h serverHandler) serveVersion(w http.ResponseWriter, r *http.Request) {
|
||||
if !allowMethod(w, r.Method, "GET") {
|
||||
return
|
||||
}
|
||||
w.Write([]byte("etcd " + version.Version))
|
||||
}
|
||||
|
||||
func (h serverHandler) serveRaft(w http.ResponseWriter, r *http.Request) {
|
||||
if !allowMethod(w, r.Method, "POST") {
|
||||
return
|
||||
|
@ -20,6 +20,7 @@ import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
@ -40,6 +41,7 @@ import (
|
||||
"github.com/coreos/etcd/etcdserver/etcdserverpb"
|
||||
"github.com/coreos/etcd/raft/raftpb"
|
||||
"github.com/coreos/etcd/store"
|
||||
"github.com/coreos/etcd/version"
|
||||
)
|
||||
|
||||
func boolp(b bool) *bool { return &b }
|
||||
@ -754,6 +756,40 @@ func TestServeStoreStats(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
func TestServeVersion(t *testing.T) {
|
||||
req, err := http.NewRequest("GET", "", nil)
|
||||
if err != nil {
|
||||
t.Fatalf("error creating request: %v", err)
|
||||
}
|
||||
h := &serverHandler{}
|
||||
rw := httptest.NewRecorder()
|
||||
h.serveVersion(rw, req)
|
||||
if rw.Code != http.StatusOK {
|
||||
t.Errorf("code=%d, want %d", rw.Code, http.StatusOK)
|
||||
}
|
||||
w := fmt.Sprintf("etcd %s", version.Version)
|
||||
if g := rw.Body.String(); g != w {
|
||||
t.Fatalf("body = %q, want %q", g, w)
|
||||
}
|
||||
}
|
||||
|
||||
func TestServeVersionFails(t *testing.T) {
|
||||
for _, m := range []string{
|
||||
"CONNECT", "TRACE", "PUT", "POST", "HEAD",
|
||||
} {
|
||||
req, err := http.NewRequest(m, "", nil)
|
||||
if err != nil {
|
||||
t.Fatalf("error creating request: %v", err)
|
||||
}
|
||||
h := &serverHandler{}
|
||||
rw := httptest.NewRecorder()
|
||||
h.serveVersion(rw, req)
|
||||
if rw.Code != http.StatusMethodNotAllowed {
|
||||
t.Errorf("method %s: code=%d, want %d", m, rw.Code, http.StatusMethodNotAllowed)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestAllowMethod(t *testing.T) {
|
||||
tests := []struct {
|
||||
m string
|
||||
|
Loading…
x
Reference in New Issue
Block a user