etcdserver/etcdhttp: basic test working

This commit is contained in:
Blake Mizerany 2014-08-29 13:22:42 -07:00 committed by Yicheng Qin
parent 7469871d20
commit 17e56a1c57
2 changed files with 17 additions and 8 deletions

View File

@ -13,8 +13,8 @@ import (
"strings" "strings"
"time" "time"
"crypto/rand"
"code.google.com/p/go.net/context" "code.google.com/p/go.net/context"
"crypto/rand"
"github.com/coreos/etcd/elog" "github.com/coreos/etcd/elog"
etcdserver "github.com/coreos/etcd/etcdserver2" etcdserver "github.com/coreos/etcd/etcdserver2"
"github.com/coreos/etcd/etcdserver2/etcdserverpb" "github.com/coreos/etcd/etcdserver2/etcdserverpb"
@ -53,15 +53,22 @@ func (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} }
func (h Handler) serveKeys(ctx context.Context, w http.ResponseWriter, r *http.Request) { func (h Handler) serveKeys(ctx context.Context, w http.ResponseWriter, r *http.Request) {
rr := parseRequest(r) rr, err := parseRequest(r)
if err != nil {
log.Println(err) // reading of body failed
return
}
resp, err := h.Server.Do(ctx, rr) resp, err := h.Server.Do(ctx, rr)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
http.Error(w, "Internal Server Error", 500)
return
} }
if err := encodeResponse(ctx, w, resp); err != nil { if err := encodeResponse(ctx, w, resp); err != nil {
http.Error(w, "Timeout while waiting for response", 504) http.Error(w, "Timeout while waiting for response", 504)
return
} }
} }
@ -87,13 +94,17 @@ func genId() int64 {
return int64(binary.BigEndian.Uint64(b)) return int64(binary.BigEndian.Uint64(b))
} }
func parseRequest(r *http.Request) etcdserverpb.Request { func parseRequest(r *http.Request) (etcdserverpb.Request, error) {
if err := r.ParseForm(); err != nil {
return etcdserverpb.Request{}, err
}
q := r.URL.Query() q := r.URL.Query()
rr := etcdserverpb.Request{ rr := etcdserverpb.Request{
Id: genId(), Id: genId(),
Method: r.Method, Method: r.Method,
Val: r.FormValue("value"),
Path: r.URL.Path[len("/keys"):], Path: r.URL.Path[len("/keys"):],
Val: q.Get("value"),
PrevValue: q.Get("prevValue"), PrevValue: q.Get("prevValue"),
PrevIndex: parseUint64(q.Get("prevIndex")), PrevIndex: parseUint64(q.Get("prevIndex")),
Recursive: parseBool(q.Get("recursive")), Recursive: parseBool(q.Get("recursive")),
@ -116,7 +127,7 @@ func parseRequest(r *http.Request) etcdserverpb.Request {
rr.Expiration = time.Now().Add(expr).UnixNano() rr.Expiration = time.Now().Add(expr).UnixNano()
} }
return rr return rr, nil
} }
func parseBool(s string) bool { func parseBool(s string) bool {

View File

@ -1,15 +1,14 @@
package etcdhttp package etcdhttp
import ( import (
"code.google.com/p/go.net/context"
"encoding/json" "encoding/json"
"fmt"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"net/url" "net/url"
"reflect" "reflect"
"testing" "testing"
"time" "time"
"code.google.com/p/go.net/context"
etcdserver "github.com/coreos/etcd/etcdserver2" etcdserver "github.com/coreos/etcd/etcdserver2"
"github.com/coreos/etcd/etcdserver2/etcdserverpb" "github.com/coreos/etcd/etcdserver2/etcdserverpb"
@ -40,7 +39,6 @@ func TestSet(t *testing.T) {
if err := r.Unmarshal(e.Data); err != nil { if err := r.Unmarshal(e.Data); err != nil {
t.Fatal(err) t.Fatal(err)
} }
fmt.Printf("r.Path: %q\n", r.Path)
} }
}, },
} }