etcdhttp: return 404 when removing nonexistent member

This commit is contained in:
Jonathan Boulle 2014-10-29 19:06:41 -07:00
parent 83ca16188c
commit 19881b2f15
2 changed files with 31 additions and 6 deletions

View File

@ -212,13 +212,16 @@ func (h *membersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
writeError(w, httptypes.NewHTTPError(http.StatusBadRequest, err.Error()))
return
}
log.Printf("etcdhttp: remove node %x", id)
if err := h.server.RemoveMember(ctx, id); err != nil {
err = h.server.RemoveMember(ctx, id)
switch {
case err == etcdserver.ErrIDNotFound:
writeError(w, httptypes.NewHTTPError(http.StatusNotFound, fmt.Sprintf("No such member: %s", idStr)))
case err != nil:
log.Printf("etcdhttp: error removing node %x: %v", id, err)
writeError(w, err)
return
default:
w.WriteHeader(http.StatusNoContent)
}
w.WriteHeader(http.StatusNoContent)
}
}

View File

@ -762,7 +762,7 @@ func TestServeMembersFail(t *testing.T) {
http.StatusInternalServerError,
},
{
// etcdserver.RemoveMember error
// etcdserver.RemoveMember error with arbitrary server error
&http.Request{
URL: mustNewURL(t, path.Join(membersPrefix, "1")),
Method: "DELETE",
@ -774,7 +774,29 @@ func TestServeMembersFail(t *testing.T) {
http.StatusInternalServerError,
},
{
// etcdserver.RemoveMember error
// etcdserver.RemoveMember error with nonexistent ID
&http.Request{
URL: mustNewURL(t, path.Join(membersPrefix, "0")),
Method: "DELETE",
},
&errServer{
etcdserver.ErrIDNotFound,
},
http.StatusNotFound,
},
{
// etcdserver.RemoveMember error with badly formed ID
&http.Request{
URL: mustNewURL(t, path.Join(membersPrefix, "bad_id")),
Method: "DELETE",
},
nil,
http.StatusBadRequest,
},
{
// etcdserver.RemoveMember with no ID
&http.Request{
URL: mustNewURL(t, membersPrefix),
Method: "DELETE",