Files
Oliver BählerandGitHub 99e05220ab feat: implement performance optimizations (#2045)
* feat: implement performance optimizations

---------

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
2026-07-21 16:27:29 +02:00

132 lines
4.4 KiB
Go

// Copyright 2020-2026 Project Capsule Authors
// SPDX-License-Identifier: Apache-2.0
package indexers_test
import (
"context"
"errors"
"net/http"
"testing"
"github.com/go-logr/logr"
"github.com/projectcapsule/capsule/pkg/runtime/indexers"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/events"
"k8s.io/client-go/tools/record"
ctrlcache "sigs.k8s.io/controller-runtime/pkg/cache"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/cluster"
ctrlconfig "sigs.k8s.io/controller-runtime/pkg/config"
"sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/webhook"
"sigs.k8s.io/controller-runtime/pkg/webhook/conversion"
)
func TestAddToManagerRegistersIndexers(t *testing.T) {
t.Parallel()
mgr := &fakeManager{indexer: &recordingFieldIndexer{}}
if err := indexers.AddToManager(context.Background(), logr.Discard(), mgr); err != nil {
t.Fatalf("AddToManager() unexpected error: %v", err)
}
if got, want := len(mgr.indexer.calls), 22; got != want {
t.Fatalf("registered indexers = %d, want %d", got, want)
}
fields := map[string]bool{}
for _, call := range mgr.indexer.calls {
if call.object == nil {
t.Fatalf("registered nil object for field %q", call.field)
}
if call.field == "" {
t.Fatalf("registered empty field for object %T", call.object)
}
if call.fn == nil {
t.Fatalf("registered nil indexer func for field %q", call.field)
}
fields[call.field] = true
}
for _, field := range []string{
".spec.name",
".status.namespaces",
"spec.serviceaccount",
"hostnamePathPair",
".spec.dependsOn.global",
".spec.dependsOn.namespaced",
} {
if !fields[field] {
t.Fatalf("expected field %q to be registered; got %#v", field, fields)
}
}
}
func TestAddToManagerReturnsRegistrationError(t *testing.T) {
t.Parallel()
wantErr := errors.New("index failed")
mgr := &fakeManager{indexer: &recordingFieldIndexer{err: wantErr}}
if err := indexers.AddToManager(context.Background(), logr.Discard(), mgr); !errors.Is(err, wantErr) {
t.Fatalf("AddToManager() error = %v, want %v", err, wantErr)
}
}
type indexCall struct {
object client.Object
field string
fn client.IndexerFunc
}
type recordingFieldIndexer struct {
calls []indexCall
err error
}
func (r *recordingFieldIndexer) IndexField(_ context.Context, obj client.Object, field string, fn client.IndexerFunc) error {
r.calls = append(r.calls, indexCall{object: obj, field: field, fn: fn})
return r.err
}
type fakeManager struct {
indexer *recordingFieldIndexer
}
func (f *fakeManager) GetFieldIndexer() client.FieldIndexer { return f.indexer }
func (f *fakeManager) GetEventRecorderFor(string) record.EventRecorder {
return nil
}
func (f *fakeManager) GetEventRecorder(string) events.EventRecorder { return nil }
func (f *fakeManager) GetHTTPClient() *http.Client { return nil }
func (f *fakeManager) GetConfig() *rest.Config { return nil }
func (f *fakeManager) GetCache() ctrlcache.Cache { return nil }
func (f *fakeManager) GetScheme() *runtime.Scheme { return nil }
func (f *fakeManager) GetClient() client.Client { return nil }
func (f *fakeManager) GetRESTMapper() meta.RESTMapper { return nil }
func (f *fakeManager) GetAPIReader() client.Reader { return nil }
func (f *fakeManager) Start(context.Context) error { return nil }
func (f *fakeManager) Add(manager.Runnable) error { return nil }
func (f *fakeManager) Elected() <-chan struct{} { return nil }
func (f *fakeManager) AddMetricsServerExtraHandler(string, http.Handler) error {
return nil
}
func (f *fakeManager) AddHealthzCheck(string, healthz.Checker) error { return nil }
func (f *fakeManager) AddReadyzCheck(string, healthz.Checker) error { return nil }
func (f *fakeManager) GetWebhookServer() webhook.Server { return nil }
func (f *fakeManager) GetLogger() logr.Logger { return logr.Discard() }
func (f *fakeManager) GetControllerOptions() ctrlconfig.Controller {
return ctrlconfig.Controller{}
}
func (f *fakeManager) GetConverterRegistry() conversion.Registry { return nil }
var _ manager.Manager = (*fakeManager)(nil)
var _ client.FieldIndexer = (*recordingFieldIndexer)(nil)
var _ cluster.Cluster = (*fakeManager)(nil)