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

68 lines
2.1 KiB
Go

// Copyright 2020-2026 Project Capsule Authors
// SPDX-License-Identifier: Apache-2.0
package tenant
import (
"context"
"reflect"
"testing"
storagev1 "k8s.io/api/storage/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
"sigs.k8s.io/controller-runtime/pkg/event"
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
)
func TestTenantClassEventHandlerUpdatesClassStatusDirectly(t *testing.T) {
t.Parallel()
scheme := runtime.NewScheme()
if err := storagev1.AddToScheme(scheme); err != nil {
t.Fatalf("add storage scheme: %v", err)
}
if err := capsulev1beta2.AddToScheme(scheme); err != nil {
t.Fatalf("add Capsule scheme: %v", err)
}
tenant := &capsulev1beta2.Tenant{
ObjectMeta: metav1.ObjectMeta{Name: "tenant"},
Status: capsulev1beta2.TenantStatus{
TenantAvailableStatus: capsulev1beta2.TenantAvailableStatus{
Classes: capsulev1beta2.TenantAvailableClassesStatus{
PriorityClasses: []string{"high"},
},
},
},
}
storageClass := &storagev1.StorageClass{ObjectMeta: metav1.ObjectMeta{Name: "fast"}}
cl := fake.NewClientBuilder().
WithScheme(scheme).
WithStatusSubresource(&capsulev1beta2.Tenant{}).
WithObjects(tenant, storageClass).
Build()
manager := &Manager{Client: cl, reader: cl}
h := manager.tenantClassEventHandler(manager.collectAvailableStorageClasses)
h.CreateFunc(
context.Background(),
event.TypedCreateEvent[client.Object]{Object: storageClass},
nil,
)
updated := &capsulev1beta2.Tenant{}
if err := cl.Get(context.Background(), client.ObjectKeyFromObject(tenant), updated); err != nil {
t.Fatalf("get updated Tenant: %v", err)
}
if !reflect.DeepEqual(updated.Status.Classes.StorageClasses, []string{"fast"}) {
t.Fatalf("storage classes = %#v, want [fast]", updated.Status.Classes.StorageClasses)
}
if !reflect.DeepEqual(updated.Status.Classes.PriorityClasses, []string{"high"}) {
t.Fatalf("priority classes = %#v, want preserved [high]", updated.Status.Classes.PriorityClasses)
}
}