// setWorkerGroupsHandler parses HTTP workers for setting worker groups and calls
// workers.SetGroups().
func (api *API) setWorkerGroupsHandler(r *http.Request, ps map[string]string) responseData {
- return newServerError(ErrNotImplemented, "set worker groups")
+ var groups Groups
+ defer r.Body.Close()
+
+ if !isValidUUID(ps["id"]) {
+ return newServerError(ErrBadUUID)
+ }
+
+ if err := json.NewDecoder(r.Body).Decode(&groups); err != nil {
+ return newServerError(err)
+ }
+ return newServerError(api.workers.SetGroups(WorkerUUID(ps["id"]), groups))
}
// workerDeregister parses HTTP workers for deregistering worker state and calls
assert, m, api := initTest(t)
defer m.finish()
+ path := "/api/v1/workers/%s/setgroups"
+ methods := []string{http.MethodPost}
+ prefix := "worker-set-groups-"
+
+ groups := Groups{"foo", "bar"}
+ notFoundTest := testFromTempl(notFoundTestTempl, prefix, fmt.Sprintf(path, missingUUID), methods...)
+ notFoundTest.json = string(jsonMustMarshal(groups))
+ missingErr := NotFoundError("Worker")
+ malformedJSONTest := testFromTempl(malformedJSONTestTempl, prefix, fmt.Sprintf(path, validUUID), methods...)
+
+ m.wm.EXPECT().SetGroups(WorkerUUID(validUUID), groups).Return(nil)
+ m.wm.EXPECT().SetGroups(WorkerUUID(missingUUID), groups).Return(missingErr)
+
tests := []requestTest{
+ // Set valid groups.
{
- name: "worker-set-groups",
- path: "/api/v1/workers/8/setgroups",
- methods: []string{http.MethodPost},
- json: ``,
+ name: prefix + "valid",
+ path: fmt.Sprintf(path, validUUID),
+ methods: methods,
+ json: string(jsonMustMarshal(groups)),
+ status: http.StatusNoContent,
+ },
+ // invalid UUID
+ {
+ name: prefix + "bad-uuid",
+ path: fmt.Sprintf(path, invalidID),
+ methods: methods,
+ json: string(jsonMustMarshal(groups)),
contentType: contentTypeJSON,
- status: http.StatusNotImplemented,
+ status: http.StatusBadRequest,
},
+ notFoundTest,
+ malformedJSONTest,
}
runTests(assert, api, tests)