Add basic go client

This commit is contained in:
simon987
2019-03-30 11:17:28 -04:00
parent 26dee89672
commit e7672f47ed
7 changed files with 315 additions and 32 deletions

View File

@@ -3,6 +3,7 @@ package test
import (
"fmt"
"github.com/simon987/task_tracker/api"
"github.com/simon987/task_tracker/client"
"testing"
)
@@ -31,7 +32,7 @@ func TestAssignRateLimit(t *testing.T) {
}, w)
}
var lastResp TaskAR
var lastResp client.AssignTaskResponse
for i := 0; i < 3; i++ {
lastResp = getTaskFromProject(project, w)
}

View File

@@ -3,6 +3,7 @@ package test
import (
"fmt"
"github.com/simon987/task_tracker/api"
"github.com/simon987/task_tracker/client"
"github.com/simon987/task_tracker/storage"
"math"
"testing"
@@ -925,19 +926,19 @@ func createTask(request api.SubmitTaskRequest, worker *storage.Worker) (ar api.J
return
}
func getTask(worker *storage.Worker) (ar TaskAR) {
func getTask(worker *storage.Worker) (ar client.AssignTaskResponse) {
r := Get("/task/get", worker, nil)
UnmarshalResponse(r, &ar)
return
}
func getTaskFromProject(project int64, worker *storage.Worker) (ar TaskAR) {
func getTaskFromProject(project int64, worker *storage.Worker) (ar client.AssignTaskResponse) {
r := Get(fmt.Sprintf("/task/get/%d", project), worker, nil)
UnmarshalResponse(r, &ar)
return
}
func releaseTask(request api.ReleaseTaskRequest, worker *storage.Worker) (ar ReleaseAR) {
func releaseTask(request api.ReleaseTaskRequest, worker *storage.Worker) (ar client.ReleaseTaskResponse) {
r := Post("/task/release", request, worker, nil)
UnmarshalResponse(r, &ar)
return

View File

@@ -3,6 +3,7 @@ package test
import (
"fmt"
"github.com/simon987/task_tracker/api"
"github.com/simon987/task_tracker/client"
"github.com/simon987/task_tracker/storage"
"net/http"
"testing"
@@ -108,13 +109,13 @@ func TestInvalidAccessRequest(t *testing.T) {
}
}
func createWorker(req api.CreateWorkerRequest) (ar WorkerAR) {
func createWorker(req api.CreateWorkerRequest) (ar client.CreateWorkerResponse) {
r := Post("/worker/create", req, nil, nil)
UnmarshalResponse(r, &ar)
return
}
func getWorker(id int64) (ar WorkerAR) {
func getWorker(id int64) (ar client.CreateWorkerResponse) {
r := Get(fmt.Sprintf("/worker/get/%d", id), nil, nil)
UnmarshalResponse(r, &ar)
return
@@ -125,7 +126,7 @@ func genWid() *storage.Worker {
return resp.Content.Worker
}
func requestAccess(req api.CreateWorkerAccessRequest, w *storage.Worker) (ar WorkerAR) {
func requestAccess(req api.CreateWorkerAccessRequest, w *storage.Worker) (ar client.CreateWorkerResponse) {
r := Post(fmt.Sprintf("/project/request_access"), req, w, nil)
UnmarshalResponse(r, &ar)
return

105
test/client_test.go Normal file
View File

@@ -0,0 +1,105 @@
package test
import (
"github.com/simon987/task_tracker/api"
"github.com/simon987/task_tracker/client"
"github.com/simon987/task_tracker/config"
"github.com/simon987/task_tracker/storage"
"testing"
)
func TestClientMakeWorker(t *testing.T) {
c := client.New(config.Cfg.ServerAddr)
w, err := c.MakeWorker("test")
if err != nil {
t.Error()
}
if w.Alias != "test" {
t.Error()
}
}
func TestClientFetchTaskNoTaskAvailable(t *testing.T) {
c := client.New(config.Cfg.ServerAddr)
w, _ := c.MakeWorker("test")
c.SetWorker(w)
_, err := c.FetchTask(89988)
if err != nil {
t.Error()
}
}
func TestClientFetchTask(t *testing.T) {
c := client.New(config.Cfg.ServerAddr)
w, _ := c.MakeWorker("test")
c.SetWorker(w)
createTask(api.SubmitTaskRequest{
Project: testProject,
Recipe: " ",
}, testWorker)
requestAccess(api.CreateWorkerAccessRequest{
Project: testProject,
Submit: false,
Assign: true,
}, &storage.Worker{
Secret: w.Secret,
Id: w.Id,
})
acceptAccessRequest(testProject, w.Id, testAdminCtx)
resp, err := c.FetchTask(int(testProject))
if err != nil {
t.Error()
}
if resp.Content.Task == nil {
t.Error()
}
}
func TestClientReleaseTask(t *testing.T) {
c := client.New(config.Cfg.ServerAddr)
w, _ := c.MakeWorker("test")
c.SetWorker(w)
createTask(api.SubmitTaskRequest{
Project: testProject,
Recipe: " ",
}, testWorker)
requestAccess(api.CreateWorkerAccessRequest{
Project: testProject,
Submit: false,
Assign: true,
}, &storage.Worker{
Secret: w.Secret,
Id: w.Id,
})
acceptAccessRequest(testProject, w.Id, testAdminCtx)
fetchResp, _ := c.FetchTask(int(testProject))
resp, err := c.ReleaseTask(api.ReleaseTaskRequest{
TaskId: fetchResp.Content.Task.Id,
Result: storage.TR_OK,
})
if err != nil {
t.Error()
}
if resp.Content.Updated != true {
t.Error()
}
}

View File

@@ -94,14 +94,6 @@ func UnmarshalResponse(r *http.Response, result interface{}) {
handleErr(err)
}
type WorkerAR struct {
Ok bool `json:"ok"`
Message string `json:"message"`
Content struct {
Worker *storage.Worker `json:"worker"`
} `json:"content"`
}
type RegisterAR struct {
Ok bool `json:"ok"`
Message string `json:"message"`
@@ -148,23 +140,6 @@ type ProjectListAR struct {
} `json:"content"`
}
type TaskAR struct {
Ok bool `json:"ok"`
Message string `json:"message"`
RateLimitDelay float64 `json:"rate_limit_delay,omitempty"`
Content struct {
Task *storage.Task `json:"task"`
} `json:"content"`
}
type ReleaseAR struct {
Ok bool `json:"ok"`
Message string `json:"message"`
Content struct {
Updated bool `json:"updated"`
} `json:"content"`
}
type WebhookSecretAR struct {
Ok bool `json:"ok"`
Message string `json:"message"`