// 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.
const (
contentJSON = "application/json"
dateLayout = "2006-01-02T15:04:05Z07:00"
+ invalidID = "test"
+ validUUID = "ec4898ac-0853-407c-8501-cbb24ef6bd77"
)
var (
}
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) {