Browse Source

etcdserver/etcdhttp: basic test working

Blake Mizerany 11 years ago
parent
commit
17e56a1c57
2 changed files with 17 additions and 8 deletions
  1. 16 5
      etcdserver2/etcdhttp/http.go
  2. 1 3
      etcdserver2/etcdhttp/http_test.go

+ 16 - 5
etcdserver2/etcdhttp/http.go

@@ -13,8 +13,8 @@ import (
 	"strings"
 	"time"
 
-	"crypto/rand"
 	"code.google.com/p/go.net/context"
+	"crypto/rand"
 	"github.com/coreos/etcd/elog"
 	etcdserver "github.com/coreos/etcd/etcdserver2"
 	"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) {
-	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)
 	if err != nil {
 		log.Println(err)
+		http.Error(w, "Internal Server Error", 500)
+		return
 	}
 
 	if err := encodeResponse(ctx, w, resp); err != nil {
 		http.Error(w, "Timeout while waiting for response", 504)
+		return
 	}
 }
 
@@ -87,13 +94,17 @@ func genId() int64 {
 	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()
 	rr := etcdserverpb.Request{
 		Id:        genId(),
 		Method:    r.Method,
+		Val:       r.FormValue("value"),
 		Path:      r.URL.Path[len("/keys"):],
-		Val:       q.Get("value"),
 		PrevValue: q.Get("prevValue"),
 		PrevIndex: parseUint64(q.Get("prevIndex")),
 		Recursive: parseBool(q.Get("recursive")),
@@ -116,7 +127,7 @@ func parseRequest(r *http.Request) etcdserverpb.Request {
 		rr.Expiration = time.Now().Add(expr).UnixNano()
 	}
 
-	return rr
+	return rr, nil
 }
 
 func parseBool(s string) bool {

+ 1 - 3
etcdserver2/etcdhttp/http_test.go

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