This lists the root job UUIDs (the jobs with no dependants). Currently only implemented by fsjobqueue. The function for dbjobqueue currently returns nil. Related: RHEL-60120
89 lines
2.3 KiB
Go
89 lines
2.3 KiB
Go
package fsjobqueue_test
|
|
|
|
import (
|
|
"os"
|
|
"path"
|
|
"sort"
|
|
"testing"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/osbuild/osbuild-composer/internal/jobqueue/fsjobqueue"
|
|
"github.com/osbuild/osbuild-composer/internal/jobqueue/jobqueuetest"
|
|
"github.com/osbuild/osbuild-composer/pkg/jobqueue"
|
|
)
|
|
|
|
func TestJobQueueInterface(t *testing.T) {
|
|
jobqueuetest.TestJobQueue(t, func() (jobqueue.JobQueue, func(), error) {
|
|
dir := t.TempDir()
|
|
q, err := fsjobqueue.New(dir)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
stop := func() {
|
|
}
|
|
return q, stop, nil
|
|
})
|
|
}
|
|
|
|
func TestNonExistant(t *testing.T) {
|
|
q, err := fsjobqueue.New("/non-existant-directory")
|
|
require.Error(t, err)
|
|
require.Nil(t, q)
|
|
}
|
|
|
|
func TestJobQueueBadJSON(t *testing.T) {
|
|
dir := t.TempDir()
|
|
|
|
// Write a purposfully invalid JSON file into the queue
|
|
err := os.WriteFile(path.Join(dir, "/4f1cf5f8-525d-46b7-aef4-33c6a919c038.json"), []byte("{invalid json content"), 0600)
|
|
require.Nil(t, err)
|
|
|
|
q, err := fsjobqueue.New(dir)
|
|
require.Nil(t, err)
|
|
require.NotNil(t, q)
|
|
}
|
|
|
|
func sortUUIDs(entries []uuid.UUID) {
|
|
sort.Slice(entries, func(i, j int) bool {
|
|
return entries[i].String() < entries[j].String()
|
|
})
|
|
}
|
|
|
|
func TestAllRootJobIDs(t *testing.T) {
|
|
dir := t.TempDir()
|
|
q, err := fsjobqueue.New(dir)
|
|
require.Nil(t, err)
|
|
require.NotNil(t, q)
|
|
|
|
var rootJobs []uuid.UUID
|
|
|
|
// root with no dependencies
|
|
jidRoot1, err := q.Enqueue("oneRoot", nil, nil, "OneRootJob")
|
|
require.Nil(t, err)
|
|
rootJobs = append(rootJobs, jidRoot1)
|
|
|
|
// root with 2 dependencies
|
|
jid1, err := q.Enqueue("twoDeps", nil, nil, "TwoDepJobs")
|
|
require.Nil(t, err)
|
|
jid2, err := q.Enqueue("twoDeps", nil, nil, "TwoDepJobs")
|
|
require.Nil(t, err)
|
|
jidRoot2, err := q.Enqueue("twoDeps", nil, []uuid.UUID{jid1, jid2}, "TwoDepJobs")
|
|
require.Nil(t, err)
|
|
rootJobs = append(rootJobs, jidRoot2)
|
|
|
|
// root with 2 dependencies, one shared with the previous root
|
|
jid3, err := q.Enqueue("sharedDeps", nil, nil, "SharedDepJobs")
|
|
require.Nil(t, err)
|
|
jidRoot3, err := q.Enqueue("sharedDeps", nil, []uuid.UUID{jid1, jid3}, "SharedDepJobs")
|
|
require.Nil(t, err)
|
|
rootJobs = append(rootJobs, jidRoot3)
|
|
|
|
sortUUIDs(rootJobs)
|
|
roots, err := q.AllRootJobIDs()
|
|
require.Nil(t, err)
|
|
require.Greater(t, len(roots), 0)
|
|
sortUUIDs(roots)
|
|
require.Equal(t, rootJobs, roots)
|
|
}
|