0
0
mirror of https://github.com/go-gitea/gitea.git synced 2026-04-08 11:13:32 +02:00
gitea/models/actions/task_count_test.go
2026-04-01 08:15:19 +02:00

124 lines
3.1 KiB
Go

// Copyright 2026 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package actions
import (
"context"
"testing"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
"github.com/stretchr/testify/assert"
)
func TestCountRunningJobsByWorkflowAndRun(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
ctx := context.Background()
t.Run("NoRunningJobs", func(t *testing.T) {
count, err := CountRunningJobsByWorkflowAndRun(ctx, 999999, "nonexistent")
assert.NoError(t, err)
assert.Equal(t, 0, count)
})
t.Run("WithRunningJobs", func(t *testing.T) {
runID := int64(1000)
jobID := "test-job"
// Create ActionRun first
run := &ActionRun{
ID: runID,
RepoID: 1,
OwnerID: 1,
Index: 1000,
Status: StatusRunning,
}
assert.NoError(t, db.Insert(ctx, run))
// Create running jobs
for range 3 {
job := &ActionRunJob{
RunID: runID,
RepoID: 1,
OwnerID: 1,
JobID: jobID,
Name: "Test Job",
Status: StatusRunning,
}
assert.NoError(t, db.Insert(ctx, job))
}
count, err := CountRunningJobsByWorkflowAndRun(ctx, runID, jobID)
assert.NoError(t, err)
assert.Equal(t, 3, count)
})
t.Run("DifferentJobIDs", func(t *testing.T) {
runID := int64(2000)
// Create ActionRun first
run := &ActionRun{
ID: runID,
RepoID: 1,
OwnerID: 1,
Index: 2000,
Status: StatusRunning,
}
assert.NoError(t, db.Insert(ctx, run))
// Create jobs with different job IDs
for i := range 5 {
job := &ActionRunJob{
RunID: runID,
RepoID: 1,
OwnerID: 1,
JobID: "job-" + string(rune('A'+i)),
Name: "Test Job",
Status: StatusRunning,
}
assert.NoError(t, db.Insert(ctx, job))
}
// Count for specific job ID should be 1
count, err := CountRunningJobsByWorkflowAndRun(ctx, runID, "job-A")
assert.NoError(t, err)
assert.Equal(t, 1, count)
})
t.Run("MatrixJobsWithMaxParallel", func(t *testing.T) {
runID := int64(3000)
jobID := "matrix-job"
maxParallel := 2
// Create ActionRun first
run := &ActionRun{
ID: runID,
RepoID: 1,
OwnerID: 1,
Index: 3000,
Status: StatusRunning,
}
assert.NoError(t, db.Insert(ctx, run))
// Create matrix jobs
jobs := []*ActionRunJob{
{RunID: runID, RepoID: 1, OwnerID: 1, JobID: jobID, Name: "Job 1", Status: StatusRunning, MaxParallel: maxParallel},
{RunID: runID, RepoID: 1, OwnerID: 1, JobID: jobID, Name: "Job 2", Status: StatusRunning, MaxParallel: maxParallel},
{RunID: runID, RepoID: 1, OwnerID: 1, JobID: jobID, Name: "Job 3", Status: StatusWaiting, MaxParallel: maxParallel},
{RunID: runID, RepoID: 1, OwnerID: 1, JobID: jobID, Name: "Job 4", Status: StatusWaiting, MaxParallel: maxParallel},
}
for _, job := range jobs {
assert.NoError(t, db.Insert(ctx, job))
}
// Count running jobs - should be 2 (matching max-parallel)
count, err := CountRunningJobsByWorkflowAndRun(ctx, runID, jobID)
assert.NoError(t, err)
assert.Equal(t, 2, count)
assert.Equal(t, maxParallel, count, "Running jobs should equal max-parallel")
})
}