89 lines
2.2 KiB
Go
89 lines
2.2 KiB
Go
//go:build integration
|
|
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"github.com/osbuild/osbuild-composer/internal/jobqueue/jobqueuetest"
|
|
"testing"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/osbuild/osbuild-composer/pkg/jobqueue/dbjobqueue"
|
|
)
|
|
|
|
func TestDBJobQueueMaintenance(t *testing.T) {
|
|
dbMaintenance, err := newDB(jobqueuetest.TestDbURL())
|
|
require.NoError(t, err)
|
|
defer dbMaintenance.Close()
|
|
q, err := dbjobqueue.New(jobqueuetest.TestDbURL())
|
|
require.NoError(t, err)
|
|
defer q.Close()
|
|
|
|
_, err = dbMaintenance.Conn.Exec(context.Background(), "DELETE FROM jobs")
|
|
require.NoError(t, err)
|
|
|
|
t.Run("testDeleteJob", func(t *testing.T) {
|
|
testDeleteJob(t, dbMaintenance, q)
|
|
})
|
|
t.Run("testVacuum", func(t *testing.T) {
|
|
testVacuum(t, dbMaintenance, q)
|
|
})
|
|
|
|
}
|
|
|
|
func setExpired(t *testing.T, d db, id uuid.UUID) {
|
|
_, err := d.Conn.Exec(context.Background(), "UPDATE jobs SET expires_at = NOW() - INTERVAL '1 SECOND' WHERE id = $1", id)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func testDeleteJob(t *testing.T, d db, q *dbjobqueue.DBJobQueue) {
|
|
id, err := q.Enqueue("octopus", nil, nil, "")
|
|
require.NoError(t, err)
|
|
require.NotEqual(t, uuid.Nil, id)
|
|
_, _, _, _, _, err = q.Dequeue(context.Background(), uuid.Nil, []string{"octopus"}, []string{""})
|
|
require.NoError(t, err)
|
|
|
|
type Result struct {
|
|
Result string `json:"result"`
|
|
}
|
|
result := Result{
|
|
"deleteme",
|
|
}
|
|
|
|
res, err := json.Marshal(result)
|
|
require.NoError(t, err)
|
|
requeued, err := q.RequeueOrFinishJob(id, 0, res)
|
|
require.NoError(t, err)
|
|
require.False(t, requeued)
|
|
|
|
_, _, r, _, _, _, _, _, _, err := q.JobStatus(id)
|
|
require.NoError(t, err)
|
|
|
|
var r1 Result
|
|
require.NoError(t, json.Unmarshal(r, &r1))
|
|
require.Equal(t, result, r1)
|
|
|
|
rows, err := d.DeleteJobs()
|
|
require.NoError(t, err)
|
|
require.Equal(t, int64(0), rows)
|
|
|
|
setExpired(t, d, id)
|
|
rows, err = d.ExpiredJobCount()
|
|
require.NoError(t, err)
|
|
require.Equal(t, int64(1), rows)
|
|
|
|
rows, err = d.DeleteJobs()
|
|
require.NoError(t, err)
|
|
require.Equal(t, int64(1), rows)
|
|
|
|
_, _, _, _, _, _, _, _, _, err = q.JobStatus(id)
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func testVacuum(t *testing.T, d db, q *dbjobqueue.DBJobQueue) {
|
|
require.NoError(t, d.VacuumAnalyze())
|
|
require.NoError(t, d.LogVacuumStats())
|
|
}
|