65 lines
2.4 KiB
Go
65 lines
2.4 KiB
Go
package orbit
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestIntegrationTaskQuerySDK(t *testing.T) {
|
|
api, queue, _ := integrationWorkerClient(t)
|
|
ctx, stop := context.WithTimeout(context.Background(), 20*time.Second)
|
|
defer stop()
|
|
op := workerTestID(t)
|
|
key := "query /+% é " + op + " "
|
|
var tasks []Task
|
|
for _, k := range []string{key, key, key[:len(key)-1]} {
|
|
v, err := api.SubmitTask(ctx, workerTestID(t), SubmitTaskRequest{QueueID: queue, Handler: "query." + op, HandlerVersion: "v1", PayloadVersion: "v1", Payload: json.RawMessage(`{"sequence":9007199254740993}`), BusinessKey: k, TaskTimeoutMS: 60000})
|
|
if err != nil || v.Task.BusinessKey != k {
|
|
t.Fatal(v, err)
|
|
}
|
|
tasks = append(tasks, v.Task)
|
|
}
|
|
from := tasks[0].CreatedAt
|
|
before := tasks[2].CreatedAt.Add(time.Microsecond)
|
|
query := ListTasksRequest{QueueID: queue, State: TaskWaiting, BusinessKey: key, CreatedFrom: &from, CreatedBefore: &before, Limit: 1}
|
|
page, err := api.ListTasks(ctx, query)
|
|
if err != nil || len(page.Items) != 1 || page.Items[0].ID != tasks[1].ID || page.NextCursor == "" {
|
|
t.Fatal(page, err)
|
|
}
|
|
query.Cursor = page.NextCursor
|
|
last, err := api.ListTasks(ctx, query)
|
|
if err != nil || len(last.Items) != 1 || last.Items[0].ID != tasks[0].ID || last.NextCursor != "" {
|
|
t.Fatal(last, err)
|
|
}
|
|
changed := query
|
|
changed.BusinessKey = key[:len(key)-1]
|
|
_, err = api.ListTasks(ctx, changed)
|
|
var apiErr *APIError
|
|
if !errors.As(err, &apiErr) || apiErr.Code != "INVALID_ARGUMENT" {
|
|
t.Fatal("cursor accepted changed filter", err)
|
|
}
|
|
query.Cursor = ""
|
|
end := tasks[1].CreatedAt
|
|
query.CreatedBefore = &end
|
|
bounded, err := api.ListTasks(ctx, query)
|
|
if err != nil || len(bounded.Items) != 1 || bounded.Items[0].ID != tasks[0].ID || bounded.NextCursor != "" {
|
|
t.Fatal("exclusive upper boundary", bounded, err)
|
|
}
|
|
for _, task := range tasks {
|
|
if _, err := api.CancelTask(ctx, task.ID, workerTestID(t), CancelTaskRequest{ExpectedRevision: task.Revision, Reason: "complete task query regression"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
query.State = TaskCancelled
|
|
query.CreatedBefore = &before
|
|
query.Limit = 20
|
|
cancelled, err := api.ListTasks(ctx, query)
|
|
if err != nil || len(cancelled.Items) != 2 {
|
|
t.Fatal("created time changed after cancellation", cancelled, err)
|
|
}
|
|
t.Log("exact Unicode/trailing-space filter, inclusive lower/exclusive upper time, cursor binding and stable creation order verified over real HTTP")
|
|
}
|