Browse Source

etcdhttp: DELETE on members = MethodNotAllowed

Jonathan Boulle 11 years ago
parent
commit
e849d8e157
2 changed files with 14 additions and 0 deletions
  1. 4 0
      etcdserver/etcdhttp/client.go
  2. 10 0
      etcdserver/etcdhttp/client_test.go

+ 4 - 0
etcdserver/etcdhttp/client.go

@@ -205,6 +205,10 @@ func (h *adminMembersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 		}
 		}
 	case "DELETE":
 	case "DELETE":
 		idStr := trimPrefix(r.URL.Path, adminMembersPrefix)
 		idStr := trimPrefix(r.URL.Path, adminMembersPrefix)
+		if idStr == "" {
+			http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed)
+			return
+		}
 		id, err := strconv.ParseUint(idStr, 16, 64)
 		id, err := strconv.ParseUint(idStr, 16, 64)
 		if err != nil {
 		if err != nil {
 			http.Error(w, err.Error(), http.StatusBadRequest)
 			http.Error(w, err.Error(), http.StatusBadRequest)

+ 10 - 0
etcdserver/etcdhttp/client_test.go

@@ -779,6 +779,16 @@ func TestServeAdminMembersFail(t *testing.T) {
 
 
 			http.StatusInternalServerError,
 			http.StatusInternalServerError,
 		},
 		},
+		{
+			// etcdserver.RemoveMember error
+			&http.Request{
+				URL:    mustNewURL(t, adminMembersPrefix),
+				Method: "DELETE",
+			},
+			nil,
+
+			http.StatusMethodNotAllowed,
+		},
 	}
 	}
 	for i, tt := range tests {
 	for i, tt := range tests {
 		h := &adminMembersHandler{
 		h := &adminMembersHandler{