// SetGroups requests Boruta server to change groups of worker with provided
// UUID. SetGroups is intended only for Boruta server administrators.
-func (client *BorutaClient) SetGroups(uuid boruta.WorkerUUID,
- groups boruta.Groups) error {
- return util.ErrNotImplemented
+func (client *BorutaClient) SetGroups(uuid boruta.WorkerUUID, groups boruta.Groups) error {
+ path := client.url + "workers/" + string(uuid) + "/setgroups"
+ req, err := json.Marshal(groups)
+ if err != nil {
+ return err
+ }
+ resp, err := http.Post(path, contentType, bytes.NewReader(req))
+ if err != nil {
+ return err
+ }
+ return processResponse(resp, nil)
}
// Deregister requests Boruta server to deregister worker with provided UUID.
}
func TestSetGroups(t *testing.T) {
- assert, client := initTest(t, "")
- assert.NotNil(client)
+ prefix := "worker-set-groups-"
+ path := "/api/v1/workers/"
+ groups := Groups{"foo", "bar"}
- err := client.SetGroups(WorkerUUID(""), nil)
- assert.Equal(util.ErrNotImplemented, err)
+ tests := []*testCase{
+ &testCase{
+ // valid
+ name: prefix + "valid",
+ path: path + validUUID + "/setgroups",
+ json: string(jsonMustMarshal(groups)),
+ contentType: contentJSON,
+ status: http.StatusNoContent,
+ },
+ &testCase{
+ // invalid UUID
+ name: prefix + "bad-uuid",
+ path: path + invalidID + "/setgroups",
+ json: string(jsonMustMarshal(groups)),
+ contentType: contentJSON,
+ status: http.StatusBadRequest,
+ },
+ }
+
+ srv := prepareServer(http.MethodPost, tests)
+ defer srv.Close()
+ assert, client := initTest(t, srv.URL)
+
+ // valid
+ assert.Nil(client.SetGroups(validUUID, groups))
+
+ // invalid UUID
+ assert.Equal(util.NewServerError(util.ErrBadUUID), client.SetGroups(invalidID, groups))
+
+ // http.Post failure
+ client.url = "http://nosuchaddress.fail"
+ assert.NotNil(client.SetGroups(validUUID, groups))
}
func TestDeregister(t *testing.T) {