Files
gitea-dynamic-runner/internal/taskscheduler/scheduler_test.go
T

57 lines
1.6 KiB
Go

package taskscheduler
import (
"context"
"testing"
runnerv1 "gitea.dev/actionslib/runner/v1"
"google.golang.org/protobuf/types/known/structpb"
)
type recordingDispatcher struct {
assignment Assignment
}
func (d *recordingDispatcher) Dispatch(_ context.Context, assignment Assignment) error {
d.assignment = assignment
return nil
}
func TestRunDerivesIdentityBeforeDispatch(t *testing.T) {
taskContext, err := structpb.NewStruct(map[string]any{
"repository": "panxiao81/gitea-dynamic-runner",
"job": "test",
})
if err != nil {
t.Fatal(err)
}
task := &runnerv1.Task{
Id: 42,
Context: taskContext,
WorkflowPayload: []byte("jobs:\n test:\n runs-on: [self-hosted, pod]\n steps: []\n"),
}
dispatcher := &recordingDispatcher{}
scheduler := Scheduler{TrustDomain: "ddupan.top", Dispatcher: dispatcher}
if err := scheduler.Run(context.Background(), task); err != nil {
t.Fatal(err)
}
if dispatcher.assignment.Task != task {
t.Fatal("dispatcher did not receive the fetched task")
}
if dispatcher.assignment.ID != "gitea-task-42" {
t.Fatalf("assignment ID = %q", dispatcher.assignment.ID)
}
want := "spiffe://ddupan.top/ci/panxiao81/gitea-dynamic-runner/test"
if dispatcher.assignment.Identity.SPIFFEID != want {
t.Fatalf("SPIFFE ID = %q, want %q", dispatcher.assignment.Identity.SPIFFEID, want)
}
}
func TestRunRequiresDispatcher(t *testing.T) {
scheduler := Scheduler{TrustDomain: "ddupan.top"}
if err := scheduler.Run(context.Background(), &runnerv1.Task{}); err == nil {
t.Fatal("expected missing dispatcher to fail")
}
}