HTTP API Client: Set worker groups 40/182240/7
authorMaciej Wereski <m.wereski@partner.samsung.com>
Thu, 21 Jun 2018 13:25:26 +0000 (15:25 +0200)
committerMaciej Wereski <m.wereski@partner.samsung.com>
Tue, 10 Jul 2018 08:01:25 +0000 (10:01 +0200)
Change-Id: I546f528cd57e88fc9aacaabde447313748dfbdfd
Signed-off-by: Maciej Wereski <m.wereski@partner.samsung.com>
http/client/client.go
http/client/client_test.go

index c3178ee..b6eee86 100644 (file)
@@ -329,9 +329,17 @@ func (client *BorutaClient) SetState(uuid boruta.WorkerUUID, state boruta.Worker
 
 // 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.
index 6cbdef4..74359bd 100644 (file)
@@ -915,11 +915,42 @@ func TestSetState(t *testing.T) {
 }
 
 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) {