From d62c70e1be79fa1ac21bafc0c08aec245b9f26e9 Mon Sep 17 00:00:00 2001 From: simon987 Date: Sun, 10 Mar 2019 09:54:04 -0400 Subject: [PATCH] Don't give rate limit delay when project is not found --- api/rate.go | 4 ++-- api/task.go | 14 ++++++++++++++ test/api_task_test.go | 20 ++++++++++++++++++++ test/common.go | 7 ++++--- 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/api/rate.go b/api/rate.go index 9c7643d..c74a9da 100644 --- a/api/rate.go +++ b/api/rate.go @@ -11,7 +11,7 @@ func (api *WebAPI) ReserveSubmit(pid int64) *rate.Reservation { if !ok { project := api.Database.GetProject(pid) if project == nil { - return &rate.Reservation{} + return nil } limiter = rate.NewLimiter(project.SubmitRate, 1) @@ -27,7 +27,7 @@ func (api *WebAPI) ReserveAssign(pid int64) *rate.Reservation { if !ok { project := api.Database.GetProject(pid) if project == nil { - return &rate.Reservation{} + return nil } limiter = rate.NewLimiter(project.AssignRate, 1) diff --git a/api/task.go b/api/task.go index b81e22a..6d967c7 100644 --- a/api/task.go +++ b/api/task.go @@ -56,6 +56,13 @@ func (api *WebAPI) SubmitTask(r *Request) { } reservation := api.ReserveSubmit(createReq.Project) + if reservation == nil { + r.Json(JsonResponse{ + Ok: false, + Message: "Project not found", + }, 404) + return + } delay := reservation.DelayFrom(time.Now()).Seconds() if delay > 0 { r.Json(JsonResponse{ @@ -108,6 +115,13 @@ func (api *WebAPI) GetTaskFromProject(r *Request) { } reservation := api.ReserveAssign(project) + if reservation == nil { + r.Json(JsonResponse{ + Ok: false, + Message: "Project not found", + }, 404) + return + } delay := reservation.DelayFrom(time.Now()).Seconds() if delay > 0 { r.Json(JsonResponse{ diff --git a/test/api_task_test.go b/test/api_task_test.go index 9bbc363..55809dd 100644 --- a/test/api_task_test.go +++ b/test/api_task_test.go @@ -899,6 +899,26 @@ func TestTaskChainCausesConflict(t *testing.T) { } } +func TestTaskAssignInvalidDoesntGiveRateLimit(t *testing.T) { + + task := getTaskFromProject(13247, testWorker) + + if task.RateLimitDelay != 0 { + t.Error() + } +} + +func TestTaskSubmitInvalidDoesntGiveRateLimit(t *testing.T) { + + resp := createTask(api.SubmitTaskRequest{ + Recipe: " ", + Project: 133453, + }, testWorker) + + if resp.RateLimitDelay != 0 { + t.Error() + } +} func createTask(request api.SubmitTaskRequest, worker *storage.Worker) (ar api.JsonResponse) { r := Post("/task/submit", request, worker, nil) UnmarshalResponse(r, &ar) diff --git a/test/common.go b/test/common.go index b1c240c..e231f4c 100644 --- a/test/common.go +++ b/test/common.go @@ -168,9 +168,10 @@ type ProjectListAR struct { } type TaskAR struct { - Ok bool `json:"ok"` - Message string `json:"message"` - Content 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"` }