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") } }