HTTP API Client: Get worker information 38/182238/7
authorMaciej Wereski <m.wereski@partner.samsung.com>
Thu, 21 Jun 2018 12:40:02 +0000 (14:40 +0200)
committerMaciej Wereski <m.wereski@partner.samsung.com>
Tue, 10 Jul 2018 08:01:25 +0000 (10:01 +0200)
Change-Id: Ie0ef143db2e88cf96cef4267c3257223efb0df63
Signed-off-by: Maciej Wereski <m.wereski@partner.samsung.com>
http/client/client.go
http/client/client_test.go

index cbc901e..e2c887f 100644 (file)
@@ -301,9 +301,15 @@ func (client *BorutaClient) ListWorkers(groups boruta.Groups,
 
 // GetWorkerInfo queries Boruta server for information about worker with given
 // UUID.
-func (client *BorutaClient) GetWorkerInfo(uuid boruta.WorkerUUID) (
-       boruta.WorkerInfo, error) {
-       return boruta.WorkerInfo{}, util.ErrNotImplemented
+func (client *BorutaClient) GetWorkerInfo(uuid boruta.WorkerUUID) (boruta.WorkerInfo, error) {
+       var info boruta.WorkerInfo
+       path := client.url + "workers/" + string(uuid)
+       resp, err := http.Get(path)
+       if err != nil {
+               return info, err
+       }
+       err = processResponse(resp, &info)
+       return info, err
 }
 
 // SetState requests Boruta server to change state of worker with provided UUID.
index 39dd807..9cf9520 100644 (file)
@@ -73,6 +73,8 @@ func (r dummyReadCloser) Read(p []byte) (n int, err error) {
 const (
        contentJSON = "application/json"
        dateLayout  = "2006-01-02T15:04:05Z07:00"
+       invalidID   = "test"
+       validUUID   = "ec4898ac-0853-407c-8501-cbb24ef6bd77"
 )
 
 var (
@@ -829,12 +831,49 @@ func TestListWorkers(t *testing.T) {
 }
 
 func TestGetWorkerInfo(t *testing.T) {
-       assert, client := initTest(t, "")
-       assert.NotNil(client)
+       prefix := "worker-info-"
+       path := "/api/v1/workers/"
+       worker := newWorker(validUUID, IDLE, Groups{}, nil)
+       header := make(http.Header)
+       header.Set("Boruta-Worker-State", "IDLE")
+
+       tests := []*testCase{
+               &testCase{
+                       // valid
+                       name:        prefix + "valid",
+                       path:        path + validUUID,
+                       contentType: contentJSON,
+                       status:      http.StatusOK,
+                       header:      header,
+               },
+               &testCase{
+                       // invalid UUID
+                       name:        prefix + "bad-uuid",
+                       path:        path + invalidID,
+                       contentType: contentJSON,
+                       status:      http.StatusBadRequest,
+               },
+       }
 
-       info, err := client.GetWorkerInfo(WorkerUUID(""))
+       srv := prepareServer(http.MethodGet, tests)
+       defer srv.Close()
+       assert, client := initTest(t, srv.URL)
+
+       // valid
+       info, err := client.GetWorkerInfo(validUUID)
+       assert.Nil(err)
+       assert.Equal(worker, info)
+
+       // invalid UUID
+       info, err = client.GetWorkerInfo(invalidID)
        assert.Zero(info)
-       assert.Equal(util.ErrNotImplemented, err)
+       assert.Equal(util.NewServerError(util.ErrBadUUID), err)
+
+       // http.Get failure
+       client.url = "http://nosuchaddress.fail"
+       info, err = client.GetWorkerInfo(validUUID)
+       assert.Zero(info)
+       assert.NotNil(err)
 }
 
 func TestSetState(t *testing.T) {