Files
gitea-dynamic-runner/internal/controller/components_test.go
panxiao81 897d327a26
test / shell (pull_request) Successful in 28s
test / python (pull_request) Successful in 59s
test / go (pull_request) Successful in 3m35s
refactor: separate workload class from placement driver
2026-09-25 16:48:32 +00:00

74 lines
2.1 KiB
Go

package controller
import (
"context"
"errors"
"sync"
"testing"
)
func TestParseSelectionDefaultsToAll(t *testing.T) {
for _, input := range []string{"", "all"} {
selection, err := ParseSelection(input)
if err != nil {
t.Fatal(err)
}
if len(selection) != 3 || selection[0] != Scheduler || selection[1] != KubernetesWorker || selection[2] != OpenSandboxWorker {
t.Fatalf("selection = %v", selection)
}
}
}
func TestParseSelectionAllowsOneOrMoreComponents(t *testing.T) {
selection, err := ParseSelection("opensandbox-worker,scheduler,opensandbox-worker")
if err != nil {
t.Fatal(err)
}
if len(selection) != 2 || selection[0] != OpenSandboxWorker || selection[1] != Scheduler {
t.Fatalf("selection = %v", selection)
}
if _, err := ParseSelection("webhook"); err == nil {
t.Fatal("expected obsolete component to be rejected")
}
}
func TestParseSelectionNormalizesLegacyWorkerNames(t *testing.T) {
selection, err := ParseSelection("pod-worker,vm-worker")
if err != nil {
t.Fatal(err)
}
if len(selection) != 2 || selection[0] != KubernetesWorker || selection[1] != OpenSandboxWorker {
t.Fatalf("selection = %v", selection)
}
}
type componentFunc func(context.Context) error
func (f componentFunc) Run(ctx context.Context) error { return f(ctx) }
func TestRunStartsSelectedComponentsAndCancelsPeers(t *testing.T) {
started := make(chan ComponentName, 2)
peerStopped := make(chan struct{})
var once sync.Once
registry := Registry{
Scheduler: componentFunc(func(context.Context) error {
started <- Scheduler
return errors.New("poll failed")
}),
KubernetesWorker: componentFunc(func(ctx context.Context) error {
started <- KubernetesWorker
<-ctx.Done()
once.Do(func() { close(peerStopped) })
return ctx.Err()
}),
}
err := Run(context.Background(), Selection{Scheduler, KubernetesWorker}, registry)
if err == nil || !errors.Is(err, context.Canceled) && err.Error() != "component scheduler: poll failed" {
t.Fatalf("Run() error = %v", err)
}
<-peerStopped
if len(started) != 2 {
t.Fatalf("started components = %d", len(started))
}
}