64 lines
1.7 KiB
Go
64 lines
1.7 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] != PodWorker || selection[2] != VMWorker {
|
|
t.Fatalf("selection = %v", selection)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseSelectionAllowsOneOrMoreComponents(t *testing.T) {
|
|
selection, err := ParseSelection("vm-worker,scheduler,vm-worker")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(selection) != 2 || selection[0] != VMWorker || selection[1] != Scheduler {
|
|
t.Fatalf("selection = %v", selection)
|
|
}
|
|
if _, err := ParseSelection("webhook"); err == nil {
|
|
t.Fatal("expected obsolete component to be rejected")
|
|
}
|
|
}
|
|
|
|
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")
|
|
}),
|
|
PodWorker: componentFunc(func(ctx context.Context) error {
|
|
started <- PodWorker
|
|
<-ctx.Done()
|
|
once.Do(func() { close(peerStopped) })
|
|
return ctx.Err()
|
|
}),
|
|
}
|
|
err := Run(context.Background(), Selection{Scheduler, PodWorker}, 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))
|
|
}
|
|
}
|