diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3180cdf..777e847 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,10 +27,5 @@ jobs: restore-keys: | ${{ runner.os }}-go- - - name: Start containers - run: | - docker-compose up -d - sleep 3 - - name: Test - run: go test -p 1 ./... + run: go test ./... diff --git a/cmd/web/main.go b/cmd/web/main.go index 6b73f5d..f07d0c7 100644 --- a/cmd/web/main.go +++ b/cmd/web/main.go @@ -61,7 +61,7 @@ func main() { // Start the task runner to execute queued tasks ctx, cancel := context.WithCancel(context.Background()) - c.Tasks.StartRunner(ctx) + go c.Tasks.StartRunner(ctx) // Wait for interrupt signal to gracefully shut down the server with a timeout of 10 seconds. quit := make(chan os.Signal, 1) diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index fedc25a..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: "3" - -services: - cache: - image: "redis:alpine" - container_name: pagoda_cache - ports: - - "127.0.0.1:6379:6379" - db: - # PG 16 is currently not supported https://github.com/ent/ent/issues/3750 - image: postgres:15-alpine - container_name: pagoda_db - ports: - - "127.0.0.1:5432:5432" - environment: - - POSTGRES_USER=admin - - POSTGRES_PASSWORD=admin - - POSTGRES_DB=app diff --git a/pkg/services/tasks.go b/pkg/services/tasks.go index cb963f4..e399144 100644 --- a/pkg/services/tasks.go +++ b/pkg/services/tasks.go @@ -98,6 +98,7 @@ func NewTaskClient(cfg config.TasksConfig, db *sql.DB) (*TaskClient, error) { // StartRunner starts the scheduler service which adds scheduled tasks to the queue. // This must be running in order to execute queued tasked. // To stop the runner, cancel the context. +// This is a blocking call. func (t *TaskClient) StartRunner(ctx context.Context) { t.runner.Start(ctx) } diff --git a/pkg/services/tasks_test.go b/pkg/services/tasks_test.go index 4008f4a..a34385c 100644 --- a/pkg/services/tasks_test.go +++ b/pkg/services/tasks_test.go @@ -1,29 +1,69 @@ package services -// TODO -//func TestTaskClient_New(t *testing.T) { -// now := time.Now() -// tk := c.Tasks. -// New("task1"). -// Payload("payload"). -// Queue("queue"). -// Periodic("@every 5s"). -// MaxRetries(5). -// Timeout(5 * time.Second). -// Deadline(now). -// At(now). -// Wait(6 * time.Second). -// Retain(7 * time.Second) -// -// assert.Equal(t, "task1", tk.typ) -// assert.Equal(t, "payload", tk.payload.(string)) -// assert.Equal(t, "queue", *tk.queue) -// assert.Equal(t, "@every 5s", *tk.periodic) -// assert.Equal(t, 5, *tk.maxRetries) -// assert.Equal(t, 5*time.Second, *tk.timeout) -// assert.Equal(t, now, *tk.deadline) -// assert.Equal(t, now, *tk.at) -// assert.Equal(t, 6*time.Second, *tk.wait) -// assert.Equal(t, 7*time.Second, *tk.retain) -// assert.NoError(t, tk.Save()) -//} +import ( + "context" + "database/sql" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "testing" + "time" +) + +type testTask struct { + Val int +} + +func (t testTask) Name() string { + return "test_task" +} + +func TestTaskClient_New(t *testing.T) { + var subCalled bool + + queue := NewQueue[testTask](func(ctx context.Context, task testTask) error { + subCalled = true + assert.Equal(t, 123, task.Val) + return nil + }) + c.Tasks.Register(queue) + + task := testTask{Val: 123} + + tx := &sql.Tx{} + + op := c.Tasks. + New(task). + Wait(5 * time.Second). + Tx(tx) + + // Check that the task op was built correctly + assert.Equal(t, task, op.task) + assert.Equal(t, tx, op.tx) + assert.Equal(t, 5*time.Second, *op.wait) + + // Remove the transaction and delay so we can process the task immediately + op.tx, op.wait = nil, nil + err := op.Save() + require.NoError(t, err) + + // Start the runner + ctx, cancel := context.WithCancel(context.Background()) + go c.Tasks.StartRunner(ctx) + defer cancel() + + // Check for up to 5 seconds if the task executed + start := time.Now() +waitLoop: + for { + switch { + case subCalled: + break waitLoop + case time.Since(start) > (5 * time.Second): + break waitLoop + default: + time.Sleep(10 * time.Millisecond) + } + } + + assert.True(t, subCalled) +} diff --git a/templates/pages/about.gohtml b/templates/pages/about.gohtml index 06524c2..2905bb0 100644 --- a/templates/pages/about.gohtml +++ b/templates/pages/about.gohtml @@ -19,7 +19,7 @@

Warning

- This route has caching enabled so hot-reloading in the local environment will not work. Check the Redis cache for a key matching the URL path. + This route has caching enabled so hot-reloading in the local environment will not work.
{{- end}}