feat: run official executor behind SPIFFE mTLS

This commit is contained in:
2026-09-20 20:12:03 +00:00
parent 8b77b4be63
commit 27599631f1
7 changed files with 199 additions and 8 deletions
+49
View File
@@ -2,11 +2,17 @@ package runnerfacade
import (
"context"
"crypto/tls"
"crypto/x509"
"net/http"
"net/http/httptest"
"net/url"
"testing"
"connectrpc.com/connect"
"gitea.dev/actionslib/pkg/protocol"
runnerv1 "gitea.dev/actionslib/runner/v1"
"gitea.dev/actionslib/runner/v1/runnerv1connect"
"google.golang.org/protobuf/types/known/structpb"
"git.ddupan.top/panxiao81/gitea-dynamic-runner/internal/taskassignment"
@@ -81,6 +87,49 @@ func TestFacadeReturnsOnlyPreassignedTaskAndSignalsClaim(t *testing.T) {
}
}
func TestFacadeDeclareReturnsOfficialRunnerMetadata(t *testing.T) {
facade, assignment, token := testFacade(t)
ctx := WithSPIFFEID(context.Background(), assignment.Identity.SPIFFEID)
response, err := facade.Declare(ctx, authenticatedRequest(&runnerv1.DeclareRequest{
Version: "v3.5.0", Labels: []string{"self-hosted", "pod"},
}, assignment.ID, token))
if err != nil {
t.Fatal(err)
}
runner := response.Msg.GetRunner()
if runner.GetUuid() != assignment.ID || runner.GetName() != assignment.ID || runner.GetVersion() != "v3.5.0" || !runner.GetEphemeral() {
t.Fatalf("runner = %#v", runner)
}
if len(runner.GetLabels()) != 2 || runner.GetLabels()[0] != "self-hosted" || runner.GetLabels()[1] != "pod" {
t.Fatalf("labels = %#v", runner.GetLabels())
}
}
func TestAPIHandlerMatchesOfficialRunnerBasePath(t *testing.T) {
facade, assignment, token := testFacade(t)
identityURL, err := url.Parse(assignment.Identity.SPIFFEID)
if err != nil {
t.Fatal(err)
}
handler := APIHandler(facade)
server := httptest.NewServer(http.HandlerFunc(func(response http.ResponseWriter, request *http.Request) {
request.TLS = &tls.ConnectionState{PeerCertificates: []*x509.Certificate{{URIs: []*url.URL{identityURL}}}}
handler.ServeHTTP(response, request)
}))
defer server.Close()
client := runnerv1connect.NewRunnerServiceClient(server.Client(), server.URL+APIBasePath)
request := authenticatedRequest(&runnerv1.DeclareRequest{
Version: "v3.5.0", Labels: []string{"self-hosted", "pod"},
}, assignment.ID, token)
response, err := client.Declare(context.Background(), request)
if err != nil {
t.Fatal(err)
}
if response.Msg.GetRunner().GetUuid() != assignment.ID {
t.Fatalf("runner = %#v", response.Msg.GetRunner())
}
}
func TestFacadeRejectsWrongIdentityOrCapability(t *testing.T) {
facade, assignment, token := testFacade(t)
wrongIdentity := WithSPIFFEID(context.Background(), "spiffe://ddupan.top/ci/owner/repo/other")