75 lines
2.5 KiB
Go
75 lines
2.5 KiB
Go
package runnerbootstrap
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"git.ddupan.top/panxiao81/gitea-dynamic-runner/internal/runnerfacade"
|
|
"git.ddupan.top/panxiao81/gitea-dynamic-runner/internal/taskassignment"
|
|
"git.ddupan.top/panxiao81/gitea-dynamic-runner/internal/taskidentity"
|
|
)
|
|
|
|
func testBootstrap(t *testing.T) Bootstrap {
|
|
t.Helper()
|
|
capabilities, err := runnerfacade.NewCapabilities([]byte("0123456789abcdef0123456789abcdef"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return Bootstrap{
|
|
Capabilities: capabilities,
|
|
FacadeURL: "https://runner-facade.gitea-actions.svc:8443",
|
|
FacadeSPIFFEID: "spiffe://ddupan.top/ns/gitea-actions/sa/gitea-dynamic-runner",
|
|
}
|
|
}
|
|
|
|
func testAssignment() taskassignment.Assignment {
|
|
return taskassignment.Assignment{
|
|
ID: "gitea-task-42", Backend: taskassignment.BackendPod,
|
|
Identity: taskidentity.Identity{SPIFFEID: "spiffe://ddupan.top/ci/owner/repo/publish"},
|
|
}
|
|
}
|
|
|
|
func TestEnvironmentIsDeterministicAndAssignmentScoped(t *testing.T) {
|
|
bootstrap := testBootstrap(t)
|
|
first, err := bootstrap.Environment(testAssignment())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
second, err := bootstrap.Environment(testAssignment())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if first[EnvCapability] == "" || first[EnvCapability] != second[EnvCapability] {
|
|
t.Fatalf("capabilities = %q, %q", first[EnvCapability], second[EnvCapability])
|
|
}
|
|
if first[EnvAssignmentID] != "gitea-task-42" || first[EnvSPIFFEID] != testAssignment().Identity.SPIFFEID {
|
|
t.Fatalf("environment = %#v", first)
|
|
}
|
|
if first[EnvBackend] != "pod" || first[EnvFacadeID] == "" {
|
|
t.Fatalf("environment = %#v", first)
|
|
}
|
|
}
|
|
|
|
func TestRegistrationMatchesOfficialRunnerSchema(t *testing.T) {
|
|
data, err := RegistrationJSON("gitea-task-42", "capability", "http://127.0.0.1:8080", taskassignment.BackendVM)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var registration Registration
|
|
if err := json.Unmarshal(data, ®istration); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if registration.UUID != "gitea-task-42" || registration.Token != "capability" || registration.Address != "http://127.0.0.1:8080" || !registration.Ephemeral {
|
|
t.Fatalf("registration = %#v", registration)
|
|
}
|
|
if len(registration.Labels) != 2 || registration.Labels[0] != "self-hosted" || registration.Labels[1] != "vm" {
|
|
t.Fatalf("labels = %#v", registration.Labels)
|
|
}
|
|
}
|
|
|
|
func TestRegistrationRejectsNonLocalTLSAddress(t *testing.T) {
|
|
if _, err := RegistrationJSON("id", "capability", "https://facade.example", taskassignment.BackendPod); err == nil {
|
|
t.Fatal("expected local proxy URL validation error")
|
|
}
|
|
}
|